Moin, Ich versuche seit einem Monat die Geschwindigkeit von einem Band mit Hilfe des Sensors ADNS3050 zu ermitteln aber bis jetzt habe ich nur geschafft die Register Delta x bzw. delta y abzulesen. Wie gehts eigentlich weiter! Bin für jede Hilfe sehr Dankbar. Daniel
:
Verschoben durch User
Mit dem Satz des Pythagoras bestimmst du den Betrag des Wegänderungsvektors und mit der Formel
ermittelst du die mittlere Geschwindigkeit je Abtastung.
hi Denker, Danke erstmal für deine Antwort. Aber hier gehts um die ADNS3050, daher muss man die Geschwindigkeit andersrum berechnen und nicht nur einfach V=S/t. Ich habe mein Maus [ADNS3050] mit Arduino UNO angeschlossen und kriege die Delta X bzw. delta Y, aber ich weiss nicht was für Werte sind die und was man damit anfangen könnte, um die Geschwindigkeit zu berechnen.
Daniel schrieb: > daher muss man die Geschwindigkeit andersrum berechnen Ich verstehe nicht was du meinst, aber ich denke du irrst dich. Daniel schrieb: > kriege die Delta X bzw. delta Y, aber ich weiss nicht was für Werte sind Die Werte repräsentieren die Verschiebung des Sensors in x- bzw. y-Richtung. Diese Verschiebung wird in Inkrementen gemessen; die reale Strecke ist abhängig von der Auflösung des Sensors ("DPI Zahl"). Um den Betrag der resultierende Bewegung aus der Überlagerung der Bewegungen in x- und y-Richtung zu erhalten, kannst den Satz des Pythagoras anwenden. Die Geschwindigkeit berechnet sich immer mit der oben genannten Formel, denn sie entspricht der Definition der Geschwindigkeit ("Änderung des Weges in einer bestimmen Zeit"). Der Trick ist, das Delta t durch die Abtastrate deines Arduino-Programms festzulegen. Zum Beispiel, indem der Sensor in einem festen Intervall in einem Timer-Interrupt ausgelesen wird.
ja genau du hast recht. Also mien Code sieht folgendermassen aus: void loop() { int SqrtW=0; int A = 0; byte ProID = 0; byte x = 0; byte y=0; byte M = 0; int X1=0; int Y1=0; M = Read(0x02); // Motion x = Read(0x03); // Delta x y=Read(0x04); // Delta y ProID = Read(0x00); // Seriel- schnittstelle testen X1= convTwosComp(x); Y1=convTwosComp(y); Sqrt= sqrt((pow(X1,2))+pow((Y1,2))); // Pytagoras } Aber mit Timer-Interrupt habe ich bis jetzt keine Erfahrung. kannst du mir das bitte erläutern bzw. paar Hinweise zu dem Code geben?
ich habe jetzt paar Teste auf einem Band, die mit 0,8 mm/s läuft,durchgeführt, und habe folgendes bekommen: Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 125 y: 64 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 123 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 124 y: 64 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 125 Motion: 0 x: 0 y: 124 Motion: 0 x: 0 y: 124 ich habe die Geschwingkeit geändert manchmal auf 0,2 mm/s geändert, trotzdem bekomme ich immer die gleiche Werte. ist das so oder stimmt da irgendwas net?
Hi Wieso ist bei dir immer 'Motion: 0'? Da müsste doch wenigstens ab und zu 0x80 auftauchen. MfG Spess
hallo, auf Binär bekomme ich jetzt 10000000 für Motion, weil da die siebte Bit laut Datenblatt gesetzen werden soll, wenn ein Motion detektiert wird.
Daniel schrieb: > hallo, > > auf Binär bekomme ich jetzt 10000000 für Motion, weil da die siebte Bit > laut Datenblatt gesetzen werden soll, wenn ein Motion detektiert wird. aber wieso bekommen ich die gleiche Werte, wenn Motion auch 0 spuckt !
Daniel schrieb: > Daniel schrieb: >> hallo, >> >> auf Binär bekomme ich jetzt 10000000 für Motion, weil da die siebte Bit >> laut Datenblatt gesetzen werden soll, wenn ein Motion detektiert wird. > > aber wieso bekommen ich die gleiche Werte, wenn Motion auch 0 spuckt ! Vielleicht schaust du erstmal dass deine Werte vom Sensor überhaupt korrekt übertragen und von dir interpretiert werden.
Hi >auf Binär bekomme ich jetzt 10000000 für Motion, weil da die siebte Bit >laut Datenblatt gesetzen werden soll, wenn ein Motion detektiert wird. Und wieso taucht das in der Tabelle nicht als 128 auf? MfG Spess
spess53 schrieb: > Hi > >>auf Binär bekomme ich jetzt 10000000 für Motion, weil da die siebte Bit >>laut Datenblatt gesetzen werden soll, wenn ein Motion detektiert wird. > > Und wieso taucht das in der Tabelle nicht als 128 auf? > > MfG Spess Also ich habe es jetzt separat gestestet : Motion, DEC = 64 Motion, BIN = 1000000
Hi >Also ich habe es jetzt separat gestestet : >Motion, DEC = 64 >Motion, BIN = 1000000 Das ist aber lt. Datenblatt falsch und taucht auch noch in der falschen Spalte auf. Mach das, was Cyblord -. (cyblord) vorgeschlagen hat: >Vielleicht schaust du erstmal dass deine Werte vom Sensor überhaupt >korrekt übertragen und von dir interpretiert werden. MfG Spess
Denker schrieb: > Mit dem Satz des Pythagoras bestimmst du den Betrag des > Wegänderungsvektors … Bei dir ist die Schule wohl schon länger her … https://www.mathematik-nachhilfe.de/mathematik/satz-des-pythagoras/
Ma.Thematikus schrieb: > Denker schrieb: >> Mit dem Satz des Pythagoras bestimmst du den Betrag des >> Wegänderungsvektors … > > Bei dir ist die Schule wohl schon länger her … > https://www.mathematik-nachhilfe.de/mathematik/satz-des-pythagoras/ was meinst du damit. Pythagoras versteht jeder...und Denker hat recht gehabt
spess53 schrieb: > spess53 jetzt abgesehen davon was Motion spuckt, will ich nur wissen, wie man die Geschwindigkeit mittes DeltaX bzw. DeltaY berechen. wir gehen davon aus, dass die Werte von beiden Deltas richtig übertragen werden.Also wie gehts dann weiter ?
HI >jetzt abgesehen davon was Motion spuckt, will ich nur wissen, wie man >die Geschwindigkeit mittes DeltaX bzw. DeltaY berechen. Wenn schon dein Motion falsch ist, dann sind wahrscheinlich deine anderen Werte auch falsch. Was willst du mit den falschen Werten berechnen? Bring das erst mal in Ordnung. MfG Spess
#define PIN_NCS 3 #define PIN_MOTION 5 ich habe Motion bzw. Chip-select so definiert und sind jeweils an Arduino am Ports 3 und 5 angeschloßen. wo kann der Fehler liegen ?
Hi
>wo kann der Fehler liegen ?
Da ich das Arduinogedöhns nicht kenne, kann ich dir nicht weiter helfen.
MfG Spess
Also ich habe gerade nochmal die verkablung geprüft und da stimmt alles. ich bekomme noch die 64 auf MOTION_ST.Merkwürdig. Kann sein, dass die sexte Bit ausgelesen werden soll, anstatt die Siebte ! int Sqrt=0; int A = 0; byte ProID = 0; byte x = 0; byte y=0; int M=0 ; int X1=0; int Y1=0; M = Read(MOTION_ST); // Motion x = Read(0x03); // Delta x y=Read(0x04); // Delta y ProID = Read(0x00); // Seriel- schnittstelle testen X1= convTwosComp(x); Y1=convTwosComp(y); Serial.println ("M"); Serial.println (M); delay(100); Serial.println ("X1"); Serial.println (X1); delay(100); Serial.println ("Y1"); Serial.println (Y1); delay(100);
Hi >Also ich habe gerade nochmal die verkablung geprüft und da stimmt alles. >ich bekomme noch die 64 auf MOTION_ST.Merkwürdig. Kann sein, dass die >sexte Bit ausgelesen werden soll, anstatt die Siebte ! Vielleicht stimmt auch einfach dein SPI-Mode nicht. MfG Spess
Respekt .ich habe jetzt alle MODEs probiert und das funktioniert nur mit MODE3. ich habe am Anfang gedacht, es ist egal welches MODE hat man gewählt, der Unterschied liegt normalerweise nur bei CPHA bzw. CPHA. Aber jetzt funktioniert und bekomme ich 128 für Motion und auch negative Werte bei DeltaX, DeltaY. Danke Spess
Hi
>der Unterschied liegt normalerweise nur bei CPHA bzw. CPHA.
Bei CPOL und CPHA. Wenn du dort was falsches einstellst, kann es
passieren das MOSI im falschen Moment abgetastet wird.
Wenigstens funktioniert es jetzt.
MfG Spess
ja genau 4:17:09.907 -> Motion: 128| x: -128| y: -1 14:17:09.907 -> Motion: 128| x: -128| y: 2 14:17:09.907 -> Motion: 128| x: -128| y: 4 14:17:09.907 -> Motion: 128| x: -128| y: 3 14:17:09.907 -> Motion: 128| x: -128| y: 0 14:17:09.907 -> Motion: 128| x: -128| y: 0 14:17:09.907 -> Motion: 128| x: -128| y: -2 14:17:09.941 -> Motion: 128| x: -128| y: 5 14:17:09.941 -> Motion: 128| x: -128| y: 1 14:17:09.941 -> Motion: 128| x: -128| y: 9 14:17:09.941 -> Motion: 128| x: -128| y: 8 14:17:09.941 -> Motion: 128| x: -128| y: 3 14:17:09.941 -> Motion: 128| x: -128| y: 3 14:17:09.941 -> Motion: 128| x: -128| y: -3 14:17:09.974 -> Motion: 128| x: -128| y: 4 14:17:09.974 -> Motion: 128| x: -128| y: 0 14:17:09.974 -> Motion: 128| x: -128| y: -9
wieso änderen sich die Werte von DeltaX bzw. DeltaY wenn ich die Geschwindigkeit vom Band ändere.!
Hi >wieso änderen sich die Werte von DeltaX bzw. DeltaY wenn ich die >Geschwindigkeit vom Band ändere. Vielleicht ist dein Band etwas gewellt oder wird bei verschiedenen Geschwindigkeiten unterschiedlich straff gezogen. Was anderes: Dein dX-Wert liegt an einem Ende des Bereichs. Möglicherweise ist die Geschwindigkeit zu groß. Überprüfe mal mit MOTION_EXT (Register 0x1b) ob da nicht auch ein Überlauf stattfindet. MfG Spess
Daniel schrieb: > was meinst du damit. Pythagoras versteht jeder...und Denker hat recht > gehabt Bei dir ist das Thema wohl auch schon länger her ;-( Hast du dir mal die Mühe gemacht, dem Link zu folgen, um dein Wissen über den Inhalt des Satzes des Pythagoras etwas aufzufrischen?
bin erst 18 und versuche was zu lernen,aber bedauerlichweise meine Maus funktioniert jetzt nicht mehr, und soll ein neues bestellen. Welches soll ich am besten bestellen ?
hallo, laut meinen Freunden ist die ADNS 3090 viel besser als 3050. ich habe die bestellt und habs heute Morgen bekommen. Ich würde nochmal das selbe experimentieren. Gruß, Daniel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.