Bewegungssensor von einer Maus auslesen

OP #4964683
Lesenswert?

Hallo ,

Ich bin grade an einem Projekt involviert, wo ich aus einem 
Bewegungssensor, welches ich von einer Maus rausgeschraucht habe, 
auslesen. Dabei soll der Sensor, die Geschwindigkeit messen und per 
Mikrorechner(Audiono Leonardo) verarbeiten. Ich wollte dies per SPI 
realisieren.
Folgendes Problem:
Ich habe eine USB Maus mit einem S5008 Chip. Zu diesem Chip habe ich 
kein Datenblatt gefunden. Kann ich durch USB die Daten auslesen, ohne 
Linux Kenntnisse zu haben.
Ich besitze lediglich VisualBasic, C/C++ und Matlab kennisse.
Persönliche Seite #4964733
Lesenswert?

HP M. schrieb:
> Ich wollte dies per SPI realisieren.

Ist in der Maus mehr drin als nur dieser eine "S5008"?

Wenn nein: Dann kommst Du mit SPI zu keinem Ziel, denn der Chip ist ein 
USB-Gerät. Das kannst Du nicht an Deinen Arduino anschließen (außer mit 
einem USB-Host-Shield, und das ist dann einiges an Programmieraufwand).

Einfacher dürfte es sein, eine Maus zu besorgen, die man an einem 
PS/2-Anschluss betreiben kann. Das dafür nötige Protokoll kann man 
recht problemlos mit einem Arduino erzeugen.
(Firma: Potilatormanufaktur) #4964747
Lesenswert?

HP M. schrieb:
> Ich habe eine USB Maus mit einem S5008 Chip. Zu diesem Chip habe ich
> kein Datenblatt gefunden.

Ich wette der ist kompatibel mit irgendeinem ADNS-Typ. Wieso nimmst du 
nicht einfach einen ADNS... ? Sind in jeder Billigts-Maus drin und den 
Arduino-Sketch bekommst du quasi per copy/paste auf deinen Leonardo

> Kann ich durch USB die Daten auslesen, ohne
> Linux Kenntnisse zu haben.
> Ich besitze lediglich VisualBasic, C/C++ und Matlab kennisse.

Klar kannst du die Maus-Signale unter Linux auslesen. Unter Ubuntu 16.04 
z.B. mit
1
sudo cat /dev/input/mouse0
Oder ähnlich. Das kannst du dann z.B. in eine fifo pipen oder was auch 
immer.
(Firma: Potilatormanufaktur) #4964765
Lesenswert?

HP M. schrieb:
> Kannst du eine Maus empfehlen?

Eine Maus direkt empfehlen kann ich nicht. Ich habe eine Kiste voll 
ausrangierter Mäuse aus einem Großraumbüro gehabt. Das waren alles 
Logitech-Billig-Mäuse. Ich war da scharf auf den ADNS2610. Es gibt aber 
auch andere/bessere ADNS-Typen. Google mal, da findest du bestimmt 
Modelle.
#4964784
Lesenswert?

Wie so üblich: Zu sparsam mit Informationen!

Maus mit Balla-Balla?
Optische Maus?

Ganze Maus oder Teil (Protokoll am Kabel, Lichtschranke)?

USB-Teil oder PS/2? Letzteres erklären Dir Fräulein Bing oder auch Herr 
Google. Falls beide nicht verzogen sind.

Kannst Du aber auch für Dich behalten.
(Firma: Potilatormanufaktur) #4964814
Lesenswert?

Rufus Τ. F. schrieb:
> Nein. Aber was PS/2 ist, kannst Du mit wenigen Sekunden Aufwand selbst
> herausfinden.

Könnte ich. So sehr interessiert es mich dann aber doch nicht, dass ich 
dafür einen ganzen Wikipedia-Artikel durchlese. War eher als Anregung 
gedacht für den, den es interessieren könnte. Ich bin auch nicht 
wirklich davon ausgegangen, ich wollte eigentlich eher bekräftigen, dass 
ich das aus einem Bauchgefühl heraus für einen dieser Avargo-Chips 
halte, auch wenn da kein weiteres IC in der Maus ist.
Gast #4964821
Lesenswert?

HP M. schrieb:
> Kannst du eine Maus empfehlen?

Such mal bei Ebay nach defekten Mäusen (oft 1Euro+
4-5Euro Versand), schau Dir die Beschreibung an und
such dann nach den Maustypen im Netz. Da findest Du
dann idR, welcher Sensortyp verbaut wurde.

Ich hatte mal vor Jahren eine Liste mit Mäusen/Sensoren,
vlt. findest Du ja eine vergleichbare.
(Firma: matzetronics) #4964826
Lesenswert?

Sowohl eine Logitech Maus PS/2 Maus als auch eine HP PS/2 Maus, die ich 
gerade offen hatte, enthielten beide den ADNS2620 Sensor mit extra MC 
für die Anbindung an PS/2.

Die Logitech müsste die hier gewesen sein:
http://www.ebay.de/itm/Logitech-original-M-SBF90-einfache-PS-2-optische-Maus-weiss-unbenutzt-/391733940472
ODer auch die hier:
http://www.ebay.de/itm/Logitech-Optical-Mouse-30-Stuck-Optische-Maus-M-SBF96-PS-2-Kabelgebunden-/262921782987
Persönliche Seite #4965493
Lesenswert?

Ich kann auch die ADNSxxxx empfehlen. Ich habe den ADNS3090 für 
Optical-Flow-Messungen verwendet. Aber es kommt immer auf die Anwendung 
an.
Die Programmierung war ein bisschen tricky. Der Bus wird SPI sein.

Schau mal bei Alibaba, da bekommste solche ICs hinterhergeschmissen. 
Achte aber auch auf die richtige LED-Wellenlänge, da i.d.R. der CMOS 
hier am emfindlichsten reagiert. Auch die Linse sollte nicht 
unterschätzt werden.

Gruß
Daniel
(Firma: Potilatormanufaktur) #4965523
Lesenswert?

Daniel V. schrieb:
> Die Programmierung war ein bisschen tricky.

Lässt sich (für Arduino) auf das hier runterbechen:
1
byte opticalRead(byte address)
2
{
3
  pinMode (SDIO, OUTPUT);
4
  for (byte i = 128; i > 0 ; i >>= 1)
5
  {
6
    digitalWrite (SCLK, LOW);
7
    delayMicroseconds(10);
8
    digitalWrite (SDIO, (address & i) != 0 ? HIGH : LOW);
9
    delayMicroseconds(10);
10
    digitalWrite (SCLK, HIGH);
11
    delayMicroseconds(10);
12
  }
13
  delayMicroseconds(120);
14
  pinMode (SDIO, INPUT);
15
  byte res = 0;
16
  for (byte i = 128; i > 0 ; i >>= 1)
17
  {
18
    digitalWrite (SCLK, LOW);
19
    delayMicroseconds(10);
20
    digitalWrite (SCLK, HIGH);
21
    delayMicroseconds(10);
22
    if ( digitalRead (SDIO) == HIGH )
23
    {
24
      res |= i;
25
    }
26
  }
27
  delayMicroseconds(100);
28
  return res;
29
}
30

31
void opticalWrite(byte address, byte data)
32
{
33
  address |= 0x80;
34
  pinMode (SDIO, OUTPUT);
35
  for (byte i = 128; i > 0 ; i >>= 1)
36
  {
37
    digitalWrite (SCLK, LOW);
38
    delayMicroseconds(10);
39
    digitalWrite (SDIO, (address & i) != 0 ? HIGH : LOW);
40
    delayMicroseconds(10);
41
    digitalWrite (SCLK, HIGH);
42
    delayMicroseconds(10);
43
  }
44
  delayMicroseconds(120);
45
  for (byte i = 128; i > 0 ; i >>= 1)
46
  {
47
    digitalWrite (SCLK, LOW);
48
    delayMicroseconds(10);
49
    digitalWrite (SDIO, (data & i) != 0 ? HIGH : LOW);
50
    delayMicroseconds(10);
51
    digitalWrite (SCLK, HIGH);
52
    delayMicroseconds(10);
53
  }
54
  delayMicroseconds(100);
55
}
56

57
void opticalInit()
58
{
59
  pinMode(SCLK, OUTPUT);
60
  pinMode(SDIO, OUTPUT);
61
  digitalWrite(SCLK, HIGH);
62
  delayMicroseconds(5);
63
  digitalWrite(SCLK, LOW);
64
  delayMicroseconds(1);
65
  digitalWrite(SCLK, HIGH);
66
  delay(1025);
67
  opticalWrite(0x00, 0x01);
68
  //  delay(3000);
69
}

Pins für SDIO und SCLK definieren und fertig. Die entsprechenden 
Adressen steehn ja im Datenblatt. Beim ADNS2610 für den optischen Flow 
z.B.
1
opticalRead(0x3); // X
2
opticalRead(0x2); // Y

Einen kompletten Frame zu holen ist etwas aufwändiger, weil man da 
synchronisieren muss.

> Auch die Linse sollte nicht
> unterschätzt werden.

Es gibt die Teile auch als fix und fertige Moduel mit brauchbarer Optik 
antstat diese HDNS-Linse, die in den Mäusen verwendet wird. Ich 
persönlich habe da einfach ein 12mm-Objektiv vorgesetzt, um den Fokus 
auf einen Abstand von einigen cm zu erhöhen.
Persönliche Seite #4965644
Lesenswert?

Md M. schrieb:
> Lässt sich (für Arduino) auf das hier runterbechen:

Naja ich habe es auf einem STM32 gemacht, mit der SPL

Md M. schrieb:
> Einen kompletten Frame zu holen ist etwas aufwändiger, weil man da
> synchronisieren muss.

Ja, da habe ich doch ein paar Tage dran gesessen. Hier im Forum wurde 
mir aber gut geholfen ;)

Md M. schrieb:
> Es gibt die Teile auch als fix und fertige Moduel mit brauchbarer Optik
> antstat diese HDNS-Linse, die in den Mäusen verwendet wird. Ich
> persönlich habe da einfach ein 12mm-Objektiv vorgesetzt, um den Fokus
> auf einen Abstand von einigen cm zu erhöhen.

Ja, gerade für Drohnen gibt es die ADNS3090  mit veränderter Optik. Mir 
war aber der Nahbereich sehr wichtig und vor allem die Frames.

Gruß
Daniel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren