Optischer Sensor zur Postitionsbestimmung

Die meisten Roboter benötigen ein Navigationssystem, um ihre Position selbstständig bestimmen zu können. Im Rahmen einer Ingenieurspraxis wurde dazu der Sensor einer optischen Maus programmiert, um diese Aufgabe bewältgen zu können.

Ziele:

Das Navigationssystem muss Bewegungen  in Echtzeit erkennen

Die Auswertung der Sensordaten darf zeitkritische Aufgaben des verwendeten Microcontrollers  nicht in zu großem Maße behindern

Der Sensor sollte ein externes Modul sein, welches leicht an einem beliebigen Roboter angebaut werden kann.

 

Überblick:


Als Sensor wurde der ADNS-2610 (kurz A2610) von Agilent  verwendet, ein IC welcher in vielen älteren Computermäusen verbaut ist. Das DATENBLATT ist ein guter Einstiegspunkt, um sich mit dem Aufbau und der Funktionsweise des Sensors vertraut zu machen. Grundlegende Kenntnisse im Bereich "Digitale Schaltungen" sind hilfreich, aber nicht notwendig. Viele andere optische Sensoren mit acht Pins funktionieren genauso wie der A2610, ein Vergleich der Datenblätter kann sich also lohnen.

Zur Steuerung des Sensors wurde ein Arduino Leonardo (www.arduino.cc) verwendet.              Der Arduino speichert darüber hinaus  Messdaten und verarbeitet sie weiter. Es ist ratsam, sich gründlich mit dem Microcontrollerboard vertraut zu machen, um bei der späteren Inbetriebnahme den Arduino nicht zu beschädigen.

Das Programm Processing (www.processing.org) eignet sich hervorragend um Sensordaten, wie zum Beispiel die Pixeldaten zu visualisieren. Es ist damit möglich den Sensor als "Mini-Kamera zu benutzen. Es handelt sich allerdings um ein Graustufenbild und die Obergrenze liegt bei etwa zehn fps (frames per second) .
 

Anschlüsse des Sensors und Arduinocode:

 


Der A2610 ist zusammen mit anderen Bauteilen einer Computermaus auf einer Platine verlötet. Zum Anschluss an den Arduino werden nur die Anschlüsse VDD,GND,SDIO und SCLK benötigt.
Die restlichen Anschlüsse bleiben unberührt.

Die Pins VDD bzw.GND müssen mit den jeweiligen Pins des Arduino verbunden werden.
Für die Pins SCK und SDIO werden zwei Möglichkeiten geschildert.

1.Variante:
SCK und SDIO werden an jeweils einem, beliebigen digitalen Pin des Arduino verbunden.
Der dazugehörige Code im Anhang   (ArduinoCode_ohneSPI) funktioniert beipielsweise mit SCK an Pin2 und SDIO an Pin4 des Arduino.
Anhand des Codes und des Datenblattes ist es einfach, den Ablauf der Datenübertragung zu verstehen.


2.Variante:                                                                                                                                                        Es wird nun die SPI-Bibliothek des Arduino verwendet. SPI ist ein lockerer Standard, der festlegt, wie die Datenübertragung zwischen mehreren Geräten funktioniert. Weitere Informationen finden sich beispielsweise auf WIKIPEDIA. Zum Sensorbetrieb mit SPI muss man den "Mode 3" einstellen.
Die Pins MISO (digital Pin 14) und MOSI (digital Pin 16) des Arduino werden mit dem SDIO-Pin verbunden. Außerdem werden die Pins SCK (digital Pin 15) und SCLK verbunden.
Die dazugehörigen Codes heißen "SPI_BildAuslesen" und "SPI_Gesamtentfernung" und unterscheiden sich nur geringfügig.
Wichitg ist, dass erst die Anschlüsse hergestellt werden und dann der Code auf das Arduinoboard geladen wird, da der Sensor initialisiert werden muss.

 
Der Processing-Code:

Um das Sensorbild grafisch am PC darzustellen, werden immer 324 Pixeldaten zusammengefasst (324 Pixel ergeben ein Bild). Um das Auswerten mit Processing zu vereinfachen, werden die Pixel mit Leerzeichen und die Bilder mit einem Zeilenumbruch getrennt, da die Informationen als String übertragen werden. Weitere Details sind im "processing"-Code nachzulesen. Dieser Code funktioniert nur in Verbindung mit "SPI_BildAuslesen" !

Graustufenbild des Sensors

 

Sensor mit Anschlüssen               Sensorhülle, mit 3D-Drucker gefertigt

Anhänge:
Diese Datei herunterladen (processing_Bild.pde)processing[ ]%2014-%09-%22 %1:%Sep%+02:00
Diese Datei herunterladen (registerAuslesen_ohneSPI.ino)Arduino_ohneSPI[ ]%2014-%09-%22 %1:%Sep%+02:00
Diese Datei herunterladen (sensor_huelle.scad.zip)sensor_huelle.scad.zip[ ]%2014-%11-%24 %0:%Nov%+01:00
Diese Datei herunterladen (SPI_BildAuslesen.ino)SPI_BildAuslesen.ino[ ]%2014-%09-%22 %1:%Sep%+02:00
Diese Datei herunterladen (SPI_gesamtentfernung.ino)SPI_gesamtentfernung.ino[ ]%2014-%09-%22 %1:%Sep%+02:00