Zum Inhalt springen
BetaEN
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 if reagieren. 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:

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

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.")