![]() |
TigerJython | xx für Gymnasien |
| Deutsch English |
Das neueste Maqueen-Modell Plus V3 verfügt über folgende Erweiterungen:
|
Lidar ist eine Technologie, die Laserlicht nutzt, um die Entfernung zu messen. Lidar funktioniert ähnlich wie ein Ultraschallsensor. Anstelle der Ultraschallwellen sendet er Laserimpulse aus, die von Objekten reflektiert werden. Gemessen wird die Zeit, die das Licht für den Hin- und Rückweg benötigt. Mit Hilfe dieser Zeit und der Lichtgeschwindigkeit wird die Distanz berechnet. Maqueen Plus V3 ist mit einem Matrix-Lidar-Sensor ausgestattet. Innerhalb eines 60-Grad-Erfassungsbereichs liefert er eine Matrix mit 64 Messwerten. |
![]() |
|
![]() |
![]() |
|
|
Beispiel 1: Objekte erkennen Der Lidarsensor wird an der ersten oder zweiten I2C-Schnittstelle angeschlossen. Der Roboter fährt vorwärts und misst mit dem LIDAR die Distanz zu den Objekten, die vor ihm liegen. Man verwendet den Befehl getDistance(). Wenn ein Objekt näher als 20 cm ist, hält der Roboter an. Wenn die Distanz wieder grösser wird, fährt er wieder los. Die Messwerte werden mit print() angezeigt. delay(100) gibt die Messperiode an. |
![]() |
from mbrobot_plusV3 import * setSpeed(30) repeat: d = getDistance() print(d) if d < 20: stop() else: forward() delay(100) |
Erklärungen zum Programmcode:
| getDistance(): gibt den Abstand zum mittleren Bereich der Distanzmatrix. Entspreicht dem Befehl getDistance() für den Ultraschallsensor bei den anderen Maqueen Modellen |
Beispiel 2: Lidar-Messwerte links und rechts vergleichen
Der Befehl getDistanceRow(4) liefert eine Liste mit 8 Messwerten (die vierte Reihe der Matrix). Man kann die Messewerte links und rechts vergleichen. Wenn die Distanz rechts kleiner ist, leuchtet die rechte LED rot, wenn die Distanz links kleiner ist, leuchtet die linke LED grün. from mbrobot_plusV3 import * repeat: row = getDistanceRow(4) #8 Values left to right print(row) if row[0] < row[7]: setLEDLeft(1) setLEDRight(0) else: setLEDLeft(0) setLEDRight(2) delay(100) |
![]() |
Erklärungen zum Programmcode:
| getDistanceRow(4) : lifert eine Liste mit 8 Messwerten (von lins nach rechts) | |
| if row[1] < row[7] : falls der Abstand rechts |
Beispiel 3: Was "sieht" der LIDAR-Sensor?
Der LIDAR Sensor liefert typischerweise 8×8 = 64 Messpunkte. Diese kannst du mit dem Befehl
getDistanceList() auslesen und in 8 Zeilen à 8 Zeichen visualisieren. Je näher ein Punkt liegt, umso grösser wählst du das Zeichen.
Damit du die Matrix besser anschauen kannst, wählst du eine längere Messperiode (delay(3000)).
from mbrobot_plusV3 import * def readData(): data = getDistanceList() matrix = [] for row in range(8): rowData = [data[row * 8 + col] for col in range(8)] matrix.append(rowData) return matrix def showMap(matrix): for row in matrix: line = "" for val in row: if val < 30: line += " X " elif val < 60: line += " x " elif val < 100: line += " - " elif val < 150: line += " . " else: line += " " print(line) print("") print("------------------------------") print("") while True: matrix = readData() showMap(matrix) delay(3000) |
![]() |
Erklärungen zum Programmcode:
| getDistanceList() liefert eine Liste mit 64 Messwerten | |
| readData bereitet die Messwerte so, dass sie reihenweise gelesen werden können |
Maqueen Plus V3 verfügt über einen Motorencoder, mit dem man die Vorwärtsbewegung und den Lenkwinkel des Roboters präzise steuern kann. |
Beispiel: Fahren und Drehen mit PID-Control
Der Roboter fährt zuerst 20 cm vorwärts, dann 20 cm Rückwärts, dreht 90° nach links und anschliessend 90° nach rechts.
from mbrobot_plusV3 import * pidControlDistance(1, 20) pidControlDistance(2, 20) pidControlAngle(90) pidControlAngle(-90) |
Erklärungen zum Programmcode:
| pidControlDistance(1, 20): der Roboter bewegt sich 20 cm vorwärts | |
| pidControlDistance(2, 20):der Roboter bewegt sich 20 cm rückwärts | |
| pidControlAngle(90):der Roboter dreht 90° nach links | |
| pidControlAngel(-90):der Roboter dreht 90° nach rechts |
Mit den zwei integrierte Lichtsensoren kannst du die Intensität des Umgebungslichts messen. Es sind im Prinzip Photodioden (LDRs), deren elektrischer Widerstand sich ändert, wenn Licht darauf fällt. Die Änderungen des Widerstands werden vom micro:bit erfasst und in einen digitalen Wert im Bereich von 0 bis 1023 umgewandelt. |
|
|
0 bedeutet sehr dunkel und 1023 sehr hell. Die Sensoren befinden sich vorne links und rechts am Chassis. |
Beispiel: Roboter mit einer Taschenlampe steuern
Mit einer Taschenlampe beleuchtet man die rechte oder die linke Seite des Roboters. Wenn der rechte Lichtsensor einen Wert grösser als 250 misst, fährt der Roboter auf einem Rechtsbogen, bei Beleuchtung des linken Sensors fährt er auf einem Linksbogen, sonst gerade aus. readLightIntensity(0) gibt den Lichtwert des rechten Sensors |
![]() |
from mbrobot_plusV3 import * setSpeed(30) repeat: vR = readLightIntensity(0) #right vL = readLightIntensity(1) #left print(vR, vL) if vR > 250: rightArc(0.2) elif vL > 250: leftArc(0.2) else: forward() delay(100) |
Erklärungen zum Programmcode:
| Den Grenzwert von 250 muss man je nach Umgebungshelligkeit und Helligkeit der Lichtquelle noch anpassen. |
Maqueen Plus V3 erkennt die Kreuzungen, T-Kreuzungen, Links-, Rechts-abbiege und Geradekreuzungen. |
Beispiel:Roboter mit einer Taschenlampe steuern
In diesen einfachen Beispiel kannst du testen, wie der Roboter die verschiedenen Kreuzungen erkennt. Du lässt ihn jeweils vorwärts fahren, bis er eine Kreuzung erkennt. Dann soll er anhalten. Falls der Roboter eine Kreuzung detektiert, gibt intersectionDetecting() True zurück, sonst False. |
![]() |
from mbrobot_plusV3 import * forward() repeat: if intersectionDetecting(): stop() delay(100) |
Erklärungen zum Programmcode:
| Die Funktion intersectionDetecting()gibt True zurück, wenn sich der Roboter auf einer Kreuzung befindet. | |
| Den Grenzwert von 250 muss man je nach Umgebungshelligkeit und Helligkeit der Lichtquelle noch anpassen. |
| Aufgaben: |
1) |
|
![]() |
2) |
|
![]() |
3) |
|
4) |
|