Lektion 3 von 8Robotik mit LEGO SPIKE
Robotik mit LEGO SPIKE · Lektion 3 · 30 Minuten
Sensoren – Farbe, Abstand, Kraft
Das lernst du
- Farbsensor, Ultraschallsensor und Kraftsensor auslesen
- Das Muster „messen, prüfen, reagieren“ anwenden
- Fahren und Messen kombinieren
Der Code in dieser Lektion stammt aus dem Buch „Python für Roboter“, Kapitel 2.6, und läuft hier unverändert im Simulator. Zum Buch bei Amazon ↗
Der Roboter bekommt Sinne
Motoren allein machen noch keinen klugen Roboter. Erst mit Sensoren kann er auf seine Umgebung reagieren. Im Buch lernst du drei kennen – und alle drei funktionieren nach demselben Muster: messen, prüfen, reagieren.
Der Farbsensor
Der Farbsensor schaut von unten auf den Boden. color() liefert eine Farbe, reflection() die Helligkeit von 0 (schwarz) bis 100 (weiß). Im Simulator steht der Sensor gerade auf einem roten Feld:
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import ColorSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
hub = PrimeHub()
farbsensor = ColorSensor(Port.C)
for _ in range(10):
erkannte_farbe = farbsensor.color() # z.B. Color.RED, Color.BLUE ...
helligkeit = farbsensor.reflection() # 0 (dunkel) bis 100 (hell)
print(f"Farbe: {erkannte_farbe}, Reflexion: {helligkeit}%")
if erkannte_farbe == Color.RED:
print("Rote Linie erkannt - Stopp!")
wait(300)Der Ultraschallsensor
Der Ultraschallsensor misst den Abstand nach vorne in Millimetern. Im Simulator siehst du seinen Strahl als türkise Linie:
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import UltrasonicSensor
from pybricks.parameters import Port
from pybricks.tools import wait
hub = PrimeHub()
abstandssensor = UltrasonicSensor(Port.D)
while True:
abstand_mm = abstandssensor.distance() # Abstand in Millimetern
print(f"Abstand: {abstand_mm} mm")
if abstand_mm < 100:
print("Achtung, Hindernis ganz nah!")
break # Schleife verlassen
wait(200)Der Roboter steht still, deshalb misst er immer denselben Abstand. Drück auf Stopp, um das Programm zu beenden – oder lies weiter, wie du Fahren und Messen kombinierst.
Der Kraftsensor
Der Kraftsensor ist ein Taster mit Gefühl: force() misst die Kraft in Newton, pressed() sagt dir einfach Ja oder Nein. Im Simulator drückst du ihn mit dem Knopf Kraftsensor drücken rechts am Hub – oder der Roboter fährt mit der Stoßstange gegen ein Hindernis.
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import ForceSensor
from pybricks.parameters import Port
from pybricks.tools import wait
hub = PrimeHub()
kraftsensor = ForceSensor(Port.E)
while True:
kraft_newton = kraftsensor.force() # Kraft in Newton
gedrueckt = kraftsensor.pressed() # True/False - ueber Schwellwert?
print(f"Kraft: {kraft_newton} N, gedrueckt: {gedrueckt}")
if gedrueckt:
print("Kontakt! Reagiere jetzt.")
break
wait(100)Merke: Sensor-Objekt am passenden Port erstellen, dann in einer Schleife regelmäßig auslesen und mit
ifreagieren. Dieses Muster steckt in fast jedem Roboterprogramm.
Deine Aufgabe
Jetzt bist du dran
Lass den Roboter mit antrieb.drive(200, 0) losfahren. Miss in einer Schleife immer wieder den Abstand und halte mit antrieb.stop() an, sobald das Hindernis näher als 100 mm ist. Gib danach Hindernis! Angehalten. aus. Der Roboter darf das Hindernis nicht berühren.
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, UltrasonicSensor
from pybricks.parameters import Port, Direction
from pybricks.robotics import DriveBase
from pybricks.tools import wait
hub = PrimeHub()
linker_motor = Motor(Port.A, positive_direction=Direction.COUNTERCLOCKWISE)
rechter_motor = Motor(Port.B, positive_direction=Direction.CLOCKWISE)
antrieb = DriveBase(linker_motor, rechter_motor, wheel_diameter=56, axle_track=114)
abstandssensor = UltrasonicSensor(Port.C)
# Losfahren, messen, rechtzeitig anhalten:- Denkanstoß
Starte die Fahrt mit
antrieb.drive(200, 0). - Welcher Befehl hilft?
Prüfe in einer
while-Schleifeabstandssensor.distance()>100 und rufe danachantrieb.stop()auf. - Lückencode – ergänze die ___
from pybricks.hubs import PrimeHub from pybricks.pupdevices import Motor, UltrasonicSensor from pybricks.parameters import Port, Direction from pybricks.robotics import DriveBase from pybricks.tools import wait hub = PrimeHub() linker_motor = Motor(Port.A, positive_direction=Direction.COUNTERCLOCKWISE) rechter_motor = Motor(Port.B, positive_direction=Direction.CLOCKWISE) antrieb = DriveBase(linker_motor, rechter_motor, wheel_diameter=56, axle_track=114) abstandssensor = UltrasonicSensor(Port.C) antrieb.drive(___) while ___: wait(___) antrieb.stop() print(___)
Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.
Lösung anzeigen🔒 Erst nach allen Hinweisen oder 2 Prüf-Versuchen
Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, UltrasonicSensor
from pybricks.parameters import Port, Direction
from pybricks.robotics import DriveBase
from pybricks.tools import wait
hub = PrimeHub()
linker_motor = Motor(Port.A, positive_direction=Direction.COUNTERCLOCKWISE)
rechter_motor = Motor(Port.B, positive_direction=Direction.CLOCKWISE)
antrieb = DriveBase(linker_motor, rechter_motor, wheel_diameter=56, axle_track=114)
abstandssensor = UltrasonicSensor(Port.C)
antrieb.drive(200, 0)
while abstandssensor.distance() > 100:
wait(10)
antrieb.stop()
print("Hindernis! Angehalten.")