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 mitsetSpeed(...)eingestellte Geschwindigkeit. FehltsetSpeed(...), ist die Geschwindigkeit 0 – und der Motor bewegt sich gar nicht. Dann wartetfinished()für immer. Probier es aus: Lösch im Beispiel oben die erste Zeile mitsetSpeed(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- Denkanstoß
Zuerst
schranke.setSpeed(400), dannschranke.setDistance(180)– und für die Rückfahrt dasselbe mit -400. - Welcher Befehl hilft?
Nach jedem
setDistance():whilenotschranke.finished():pass– und dazwischensleep(1). - Lückencode – ergänze die ___
import ftrobopy from time import sleep txt = ftrobopy.ftrobopy("localhost", 65000) schranke = txt.motor(2) schranke.setSpeed(___) schranke.setDistance(___) while ___: pass sleep(___) schranke.setSpeed(___) schranke.setDistance(___) while ___: pass 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:
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")