Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Maus als Sensor am PC (https://www.delphipraxis.net/164988-maus-als-sensor-am-pc.html)

laube53 8. Dez 2011 21:02

Maus als Sensor am PC
 
Ich möchte eine optische Maus als Bewegungssensor nutzen.
Die Roboter-Bastler machen das schon lange, aber sie steuern mit Mikrokontrollern, d.h. sie nutzen einen seriellen Zugriff auf den Maus-Chip.
Hat jemand einen Tip, wie das mit Delphi (unter USB) gemacht werden kann?

Ich habe mit der JvHIDController-Klasse (JEDI) herumprobiert.
Stecke ich (in der ReadWriteDemo) einen Joystick an, sprudeln die Daten - wunderbar.
Stecke ich eine (zweite) Maus an, wird das zwar gemeldet, aber ich kann keine Daten empfangen.
Vermutlich liegt das daran, dass Windows alle Mäuse exklusiv für das System öffnet.
Die Abfrage
TJvHidDevice.HasReadWriteAccess
wird auch negativ beantwortet.
Wenn ich sie auskommentiere, ergibt der Lesezugriff
Device.ReadFileEx(Report[0], Device.Caps.InputReportByteLength, @DummyReadCompletion)
natürlich einen Fehler (GetLastError = 5, d.h. access denied).

Es ist wohl nicht so einfach (und vielleicht auch ein Sicherheitsproblem), einer Maus beizubringen, sie solle sich als Nicht-Maus ausgeben.
Dann könnte man sich ja auch als Tastatur ausgeben und unbemerkt Daten eingeben (s. Heise).

Hat jemand einen Hinweis?

Laube53

himitsu 8. Dez 2011 21:10

AW: Maus als Sensor am PC
 
Für diese Maus einen Treiber installieren, welcher sich nicht als Maus-Treiber ausgibt?

hathor 8. Dez 2011 21:36

AW: Maus als Sensor am PC
 
Warum nimmst Du nicht einen RICHTIGEN Bewegungssensor?
http://www.robot-electronics.co.uk/htm/cmps09doc.htm
http://pishrobot.com/files/products/...ets/cmps09.pdf
Nachfolger:
http://www.dfrobot.com/index.php?rou...product_id=137
http://www.robot-electronics.co.uk/htm/cmps10doc.htm

laube53 9. Dez 2011 19:17

AW: Maus als Sensor am PC
 
Vielen Dank für die Tips.

Der vorgeschlagene CMPS10 ist eine interessante Platine, aber ein Kompass.
Der eingebaute Beschleunigungssensor dient vorrangig der Kompensation bei Schräglage.
Die Position kann man aus den Beschleunigungswerten natürlich errechnen; man muss aber zweimal integrieren, und damit geht die Zeit quadratisch ein. Selbst bei Ruhelage würde ein leicht verstimmter Beschleunigungssensor mit der Zeit große Positionsabweichungen ergeben. Eine Maus, die nicht bewegt wird, lässt den Mauszeiger aber ziemlich gut in Ruhe.

Der Vorschlag, einen veränderten Maustreiber zu schreiben, ist für Profis bestimmt richtig.
Meines Wissens lässt sich mit Delphi da nicht viel ausrichten.
Außerdem: Die Zuordnung eines Geräts, das sich gerade verbindet, zu einem Treiber übernimmt Windows, und zwar anhand der VendorID und ProductID, die das Gerät ihm bei der Kontaktaufnahme zusendet. Ohne hier einzugreifen (was ich mir schwierig vorstelle) nützt auch ein neuer Treiber nichts.

hathor 9. Dez 2011 19:39

AW: Maus als Sensor am PC
 
Der CMPS wird sogar in Erdbeben-Anzeige-Programmen genutzt.
Du hast offensichtlich nicht alles gelesen oder nicht alles verstanden!
Wenn der Chip bzw. die Platine nicht bewegt wird, werden immer die gleichen Werte für X, Y, Z gesendet.
Wo ist das Problem?

Es ist ein Chip zur Messung der Beschleunigung und zur Lage im Erdmagnetfeld.

Man kann die Werte entweder als absolut oder relativ interpretieren, um z.B. eine Cursor-Steuerung (wie ich es gemacht habe - Stichwort: HEADTRACKER) zu realisieren.

Bummi 9. Dez 2011 19:54

AW: Maus als Sensor am PC
 
man kann schon, aber alles abgesehn von Lage und Beschleunigung nur mit extremem Rechenaufwand, bei dem sich langfristig dann Ungenauigkeiten bezüglich der Position einschleichen.

laube53 9. Dez 2011 20:32

AW: Maus als Sensor am PC
 
Ob mit dem Baustein CMPS10 (Überschrift in der Dokumentation: Tilt Compensated Compass Module) eine Positionsbestimmung so genau und schnell möglich ist, wie ich es gerne hätte, weiß ich natürlich nicht, dazu muss ihn ausprobieren. Dass man die Beschleunigungswerte ebenfalls auslesen kann, ist mir nicht entgangen; allerdings nur mit ca. 75 Werten pro Sekunde.

Ich wollte auch keine Erdbeben registrieren, sondern eine laufende Fahrradfelge mit einem optischen Sensor erfassen und die zurückgelegte Entfernung als Referenzgröße benutzen.
Vielleicht ist das ja eine schlechte Idee, aber eigene Ideen machen halt mehr Spass.

Hathor: Kannst du etwas über die mit dem CMPS10 erzielbare Genauigkeit sagen?

hathor 9. Dez 2011 21:05

AW: Maus als Sensor am PC
 
Was Du vorhast, kann man ganz einfach mit einem Fahrrad-Computer für 10 EUR machen, die zur Erfassung der Radumdrehungen mit einem Reed-Kontakt und einem Magneten arbeiten.
Es gibt auch drahtlose Ausführungen.

Der CMPS ist für Dein Vorhaben völlig deplaziert.
Zur Genauigkeit:

CMPS03, CMPS09: - 3 bis 4 Grad nach Justierung

CMPS10: 0,1°

laube53 9. Dez 2011 21:56

AW: Maus als Sensor am PC
 
Ich benötige die Rad-Position in Millimeter-Genauigkeit. Das Rad dreht sich nur langsam; am Fahrrad montiert ist ein Laser-Sensor (mit Triangulierung), der den Straßenbelag vermisst. Wie das mit ein paar Reed-Kontakten gehen soll, sehe ich noch nicht. Man könnte aber über eine feine, sich mitdrehende Scheibe nachdenken, wie sie in mechanischen Mäusen verbaut wurde.

hathor 9. Dez 2011 22:06

AW: Maus als Sensor am PC
 
Man kann doch die Zeitdifferenz zwischen 2 Reed-Kontakt-Schliessungen durch 360 teilen und erhält zu jedem Zeitpunkt den Winkel.

jfheins 10. Dez 2011 11:25

AW: Maus als Sensor am PC
 
Zitat:

Zitat von hathor (Beitrag 1140688)
Man kann doch die Zeitdifferenz zwischen 2 Reed-Kontakt-Schliessungen durch 360 teilen und erhält zu jedem Zeitpunkt den Winkel.

Das ist dem TE wohl zu ungenau. Man erfasst ja nicht die Momentangeschwinigkeit (die äuerst schwer zu messen ist) sondern mittelt über eine Radumdrehung. Beschleunigen und Abbremsen des Rads kann man so nur sehr unpräzise erfassen.

Der Sensor einer optischen Maus ist da schon eine sehr gute Idee. Eine andere Möglichkeit wäre, einen Drehimpulsgeber zu verwenden. Den kannst du mit an die Achse hängen und (je nach Preisklasse) Bekommst du den aktuellen Winkel des Rads sehr genau. (Laut Wikipedia bis zu 10000 Impulse pro Umdrehung)
==> http://de.wikipedia.org/wiki/Inkrementalgeber

Ich empfehle allerdings, dich in das Thema Mikrocontroller einzuarbeiten. (Oder jemanden zu suchen, der dir das machen kann) Weil solche Sachen brauchen oft eine Echtzeitfähige Ansteuerung und das ist mit einem PC halt nicht gegeben.

hathor 10. Dez 2011 12:12

AW: Maus als Sensor am PC
 
Peiselerrad

.
Entfernungsmessung

laube53 14. Dez 2011 15:27

AW: Maus als Sensor am PC
 
Wenn nur alle 360° ein Impuls gesendet wird, mus man interpolieren. Das wäre in Ordnung, wenn man die Geschwindigkeit genau genug konstant halten könnte.
Das wird in der Realität nicht gehen.

Meine ursprüngliche Idee lässt sich wohl nicht verwirklichen.
Auch Leute, denen ich mehr Ahnung unterstelle, winken da ab (vgl. SpriteMods).
Es ist wohl unvermeidlich, zum Lötkolben zu greifen, und die serielle Schnittstelle eines Maussensors zu beutzen, wie es die Roboterbauer tun (z.B. mit dem ADNS-2610 von Avago).
Dann kann man auch gleich einen Mikrocontroller einsetzen.

Ich danke nochmals für die Beiträge (auch Peiseler Messsysteme).

Thomas Lauer.

hathor 14. Dez 2011 19:41

AW: Maus als Sensor am PC
 
Es gibt Plattenspieler mit Direktantrieb, die haben einen kreisrunden Magneten, der auf dem Plattenteller klebt. Dieser Magnet enthält sehr viele radiale Erhebungen, die in einem Hall-Generator Schwankungen verursachen und zur Drehzahlerfassung dienen.
Ein anderes Beispiel: Pedelecs enthalten am Tretkurbelgehäuse mehrere Magneten, die beim Treten an einem Reedschalter vorbeibewegt werden. Es können 4 oder mehr sein, die der Elektronik eine Tretbewegung signalisieren. Nur dann darf der E-Motor im Bereich von 6-25 km/h mit Strom versorgt werden. Unterhalb dieser Geschwindigkeit darf beim Schieben (z.B. bergauf) der E-Motor auch ohne Tretbewegung Strom erhalten.

blackfin 14. Dez 2011 21:36

AW: Maus als Sensor am PC
 
Optische Maus-Sensoren haben meistens eine 3-wire SPI-Schnittstelle, die relativ einfach auszulesen ist und hier oft schon fertig benutzbaren Gray-Code ausgibt, da optische Maus-Sensoren oft "One-Chip-Lösungen" sind, die für das Processing des Bildes keinen externen DSP brauchen.
Somit zapfst du am Besten diese Schnittstelle am Chip direkt an, ohne über den USB-Weg der Maus zu gehen.

Wenn du nicht selbst zum Lötkolben für eine eigene MCU-Schaltung greifen willst, kannst du dir so etwas wie das PICkit Serial Analyzer Board holen. (ca. 50 Euro)
Das ist ein Testboard für serielle Protokolle (SPI, I2C, Microwire, RS232 etc.), an das du einen solchen Maus-Sensor dann anschliessen kannst.
Das Board bringt dabei schon alles mit, was du brauchst: Kommunikationsmöglichkeit mit dem PC über USB, hat bereits einen Microcontroller inkl. Steckanschlüsse drauf, eine komplette Entwicklungs-IDE, entsprechende Windowstreiber zum Ansteuern des Boards, eine DLL, die du sicher auch in Delphi ansteuern kannst, wenn du die VB-Header übersetzt und haufenweise Code-Beispiele, wie man die Protokolle über die API in der DLL verwendet.

Du brauchst dazu natürlich eine Maus, bei der du weisst, welcher genaue Sensor verbaut ist und der am Besten bis auf die drei SPI-Leitungen nur noch die Stromversorgung braucht.
Das ist der schwierigste Teil des Projektes, einen einfachen Sensor zu finden, allerdings gibt es afaik solche von Analog Devices, die weit verbreitet in Mäusen verbaut werden.
Notfalls, wenn du keinen solchen Sensor findest, schaust du halt, welche externen Komponenten er noch benötigt (Quartz etc.) und ob das oben genannte Testboard eventuell diese Anschlüsse auch schon hat.
Zuletzt holst dir noch das Datenblatt des Sensors, schliesst den Sensor an das PICKit an und wurschtelst los :-D

Gut, um den Sensor anzuschliessen brauchst du dann doch minimal für die Drähtle den Lötkolben, aber das lässt sich eigentlich kaum vermeiden, wenn du den Sensor nativ auslesen willst.
Allerdings sind die meisten dieser Sensoren noch sehr "Lötanfänger-freundlich" im 2,54er DIP-Raster und zum Glück nicht im fiesen BGA-Formfaktor, der sich daheim eh kaum ohne Dampfphase oder umgebauten Pizzaofen löten lässt.
Zur Not gehts dann doch auch ganz ohne Löten, wenn du dir ein Experimentier-Steckboard holst und der Chip das besagte 2,54mm Raster hat.
Hier muss man allerdings darauf achten, dass das Steckboard nicht hinderlich ist, was die Linse der CMOS-Camera angeht und ob die Schaltfrequenzen des Chips einen Aufbau auf einem Steckboard vertragen.
(Wobei nach aussen ja eh nur per SPI kommuniziert wird und das ist bezüglich Leitungslängen und Einstreuungen sehr robust, sofern man den Bus nicht zu sehr kapazitiv belastet).

Auf jedenfall ist der Versuch mit einem solchen PICKit-Testboard (oder vergleichbarem) wesentlich zeit- und nervenschonender, als die gesamte MCU-Schaltung inkl. SPI-Protokoll als Microcontroller-Anfänger von 0 an selbst zu bauen und die dementsprechende Firmware in ASM oder C zu schreiben.

Ein Problem könnte jedoch werden, dass du den Maussensor wirklich wackelfrei und nahe am Rad verbauen musst, um eine ausreichende Genauigkeit und Datenstabilität zu erhalten, aber das wäre eh dann die nächste Geschichte, wenn man die Schaltung und die generelle Funktion schon einmal hat :-)

laube53 16. Dez 2011 19:54

AW: Maus als Sensor am PC
 
So langsam wird mir klarer, was zu tun ist.
Ich habe noch ein STK500-Entwicklungsboard mit einem ATMega32, damit müsste das eigentlich gehen.
Das hätte den Vorteil, dass ich Code aus dem ct-Bot-Projekt (das auch eine Maussensor verwendet) benutzen kann.
Außerdem gibts dafür auch einen PASCAL-Compiler; und auch PASCAL-Quellcode aus dem ctLab-Projekt.
Da muss ich vielleicht gar nicht C lernen.:)

Hilfreich fand ich auch die Informationen im RoboterNETZ http://www.rn-wissen.de/index.php/Maussensor und
Mikrocontroller.nethttp://www.mikrocontroller.net/articles/Maussensor.

Die Mausoptik kann man auch in der Brennweite manipulieren, um nicht auf präzise Einhaltung des Abstands angewiesen zu sein.
Spannend ist auch die Aussicht, höher auflösende Sensoren aus Gamer-Mäusen einzusetzen.

Löten tu ich eigentlich gerne, solange es nicht SMD-Teile sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz