Zum Inhalt springen
BetaEN
Lektion 2 von 5Robotik mit fischertechnik

Robotik mit fischertechnik · Lektion 2 · 30 Minuten

XS-Motoren steuern

Das lernst du

  • Einen XS-Motor mit setSpeed() vorwärts und rückwärts laufen lassen
  • Mit setDistance() eine genaue Strecke in Encoder-Impulsen fahren
  • Mit finished() warten, bis eine Bewegung fertig ist

Der Code in dieser Lektion stammt aus dem Buch „Python für Roboter“, Kapitel 3.2, und läuft hier unverändert im Simulator. Zum Buch bei Amazon ↗

Kraft für Förderbänder und Schranken

Aktoren sind alle Bauteile, die etwas tun: drehen, bewegen, leuchten. Beim TXT 4.0 sind das vor allem die XS-Motoren an M1 bis M4 und die Lampen an O1 bis O8.

Geschwindigkeit einstellen

Mit setSpeed(...) gibst du eine Zahl von -512 (volle Kraft rückwärts) bis 512 (volle Kraft vorwärts) an. 0 hält den Motor an. Schau beim Ausführen auf das Rad im Schaltpult:

import ftrobopy
from time import sleep

txt = ftrobopy.ftrobopy("localhost", 65000)

# Motor am Ausgang M1 erstellen
foerderband_motor = txt.motor(1)

# Motor mit halber Kraft vorwaerts laufen lassen
foerderband_motor.setSpeed(256)
sleep(2)

# Motor anhalten
foerderband_motor.setSpeed(0)

# Motor rueckwaerts laufen lassen
foerderband_motor.setSpeed(-256)
sleep(2)
foerderband_motor.setSpeed(0)

Eine genaue Strecke fahren

Die M-Ausgänge haben Encoder. Sie zählen, wie weit sich der Motor gedreht hat – in Impulsen. Deshalb kannst du eine genaue Strecke vorgeben. Zuerst die Geschwindigkeit mit setSpeed(...), dann das Ziel mit setDistance(...). So schlägt im Sortiermaschinen-Projekt aus dem Buch (Kapitel 3.6) die Weiche aus und stellt sich wieder zurück:

import ftrobopy
from time import sleep

txt = ftrobopy.ftrobopy("localhost", 65000)
weiche = txt.motor(2)              # Motor an M2

def weiche_umlenken():
    # Weiche kurz ausschlagen lassen und wieder zurueckstellen
    weiche.setSpeed(400)
    weiche.setDistance(90)
    while not weiche.finished():
        pass
    sleep(0.3)
    weiche.setSpeed(-400)
    weiche.setDistance(90)
    while not weiche.finished():
        pass


weiche_umlenken()
print("Weiche ist wieder zurück.")

Die Schleife while not ....finished(): pass wartet, bis der Motor angekommen ist. pass heißt: „Hier passiert nichts – einfach nochmal prüfen.“

Achtung, Reihenfolge: setDistance(...) nimmt die zuletzt mit setSpeed(...) eingestellte Geschwindigkeit. Fehlt setSpeed(...), ist die Geschwindigkeit 0 – und der Motor bewegt sich gar nicht. Dann wartet finished() für immer. Probier es aus: Lösch im Beispiel oben die erste Zeile mit setSpeed(400) und drück danach auf Stopp.

Deine Aufgabe

Jetzt bist du dran

Eine Schranke an M2 soll auf- und wieder zugehen. Fahr den Motor mit Geschwindigkeit 400 genau 180 Impulse weit und warte, bis er fertig ist. Dann eine Sekunde Pause. Danach mit -400 wieder 180 Impulse zurück – und wieder warten. Am Ende gibst du Schranke fertig aus.

import ftrobopy
from time import sleep

txt = ftrobopy.ftrobopy("localhost", 65000)
schranke = txt.motor(2)

# 1. Auf: 180 Impulse mit Geschwindigkeit 400

# 2. Eine Sekunde Pause

# 3. Zu: 180 Impulse mit Geschwindigkeit -400

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:

import ftrobopy
from time import sleep

txt = ftrobopy.ftrobopy("localhost", 65000)
schranke = txt.motor(2)

schranke.setSpeed(400)
schranke.setDistance(180)
while not schranke.finished():
    pass

sleep(1)

schranke.setSpeed(-400)
schranke.setDistance(180)
while not schranke.finished():
    pass

print("Schranke fertig")