PIR pyroelektrischer Infrarot Bewegungs-Sensor für den Lego Mindstorms NXT
Verfolgungsjagd
| Ein Beispiel für eine komplexere Anwendung des Sensors ist die eines
mobilen Roboters, der Tiere und Menschen entdeckt und dann auf sie
zufährt bzw. sie verfolgt.
Das hier vorgestellte Programm wurde in NXC (Not eXactly C) codiert. NXC ist eine höhere Programmiersprache für den Lego Mindstorms NXT, die der allgemein bekannten Programmiersprache C entlehnt ist. Mit NXC erzeugt man erheblich performanteren und dichteren Code als mit NXT-G (der original Lego Software), benötigt aber weitergehende Programmierkenntnisse. Wer mit NXC arbeiten möchte, dem empfehle ich BricxCC. BricxCC ist eine graphische Benutzeroberfläche, von der aus der NXC-Compiler und der Download des compilierten Programms auf den NXT gestartet wird. BricxCC steht gleich zusammen mit NXC hier zum Download bereit: BricxCC Download Für mehr Informationen zu BricxCC siehe auch BricxCC home Mehr Informationen zu NXC gibt es hier: NBC/NXC home |
Bild: Modifizierter TriBot mit montiertem Bewegungssensor |
Das Programm wurde für den mobilen Roboter TriBot aus der Lego Mindstorms NXT Bauanleitung geschrieben. Der Tribot wurde für diesen Zweck leicht modifiziert, um den neuen Sensor anzubringen. Der Bewegungssensor ist an Port 3 angeschlossen. Der Geräuschsensor ist nicht angeschlossen, der Lichtsensor wird nicht benutzt. Hier steht das Program als Quellcode (C)
follower.nxc
und als Executable zur Verfügung:
follower.rxe
Das Program enthält globale Variablen-Deklarationen und Initialisierungen und neben dem Hauptprogram unter main die Tasks peakdetect und bump sowie das Unterprogramm search. Das Hauptprogramm initialisiert die beiden benutzen Sensoren, den Bewegungssensor und den Ultraschallsensor. Dann werden die Tasks peakdetect und bump gestartet, die parallel zum Hauptprogramm ausgeführt werden (multithreading).
Wenn kein warmer Körper entdeckt wurde, wird vom Hauptprogramm das Unterprogramm search aufgerufen. Dort rotiert der TriBot um die eigene Achse, bis in der Task peakdetect ein Signal eines warmen Körpers detektiert wird sowie die relative "Bewegungsrichtung" des Körpers bestimmt worden ist. Dann wird das Unterprogramm search verlassen und im Hauptprogramm fährt der Roboter auf den entdeckten warmen Körper zu.
Nach Ablauf einer Sekunde wird eine leichte Links- oder Rechts-Kurve gefahren (je nach vorher bestimmter relativer Bewegungsrichtung), um ein neues Signal zu detektieren. Falls dies nicht gelingt, wird wieder die Task search aufgerufen. Wenn der Roboter näher als 20 cm auf einen Gegenstand zufährt, wird die Task bump aufgerufen, die eine Kollision verhindert, usw.
Der gemessene Signalwert des Bewegungssensors sowie der aktuell gespeicherten high und low Peak werden auf dem LCD Display angezeigt. Die ersten 1000 Meßwerte werden in einer Datei namens track.txt protolliert und können z.B. mit dem NXT-Explorer auf einen PC hochgeladen werden, um sie auszuwerten. Hier eine solche Protokolldatei zum download:
track.txt
Aus den Daten und der Beobachtung des Roboters bei der Fahrt kann man ein paar einfache Dinge ablesen:
- ca. alle 20 ms wird eine Messung des Bewegungssensors vorgenommen
- die ersten 1000 Meßpunkte entsprechen daher einer abgelaufenen Zeit von ca. 20 Sekunden
- die typische Zeit zwischen einem High und dem zugehörigen Low Peak liegt bei ca. 330 - 500 ms. Wenn man dies als halbe Periodendauer der Schwingung interpretiert, so resultiert eine Frequenz von ca. 1-1,5 Hz.
- eine 180°-Drehung des Roboters entspricht ca. einem MotorRotationCount von OUT_A=700 und OUT_C=-700 oder umgekehrt
- die gesamte zurückgelegte Wegstrecke von etwa 3m entspricht einem MotorRotationCount von 4500
track.xls
Hier die erzeugten Grafiken:
Bild: Signalverlauf des Bewegungssensors während der Fahrt des TriBot und die beiden Variablen high und low, die die Peakwerte zeitweise speichern
Bild: Positionszähler der beiden Motoren rechts (OUT_A) und links (OUT_C), eingetragen ist der Fahrtmodus des TriBot
Der Tribot ist so in der Lage, einen warmen Körper zu finden und auf ihn zu zu fahren bzw. ihm zu folgen. Irritieren könnten ihn andere warme Körper wie z.B. Heizkörper. Bestimmt kann man den Algorithmus weiter verfeinern und verbessern und Euch fallen bestimmt noch weitere tolle Anwendungen für den Bewegungssensor ein.
Email senden
Hier geht es nach oben zurück:
Seitenanfang