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: Die Datei track.txt mit den Track-Daten habe ich mit Excel weiter ausgewertet und die Messwerte graphisch dargestellt:
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