Exaktes Fahren – Präzise Steuerung mit Radgeschwindigkeit

Der Arduino Alvik ist ein Schulungsroboter, der sehr präzise gesteuert werden kann. Während move() für einfache Fahraufgaben ausreicht, ermöglicht die direkte Steuerung der Radgeschwindigkeit eine feinere Kontrolle über Bewegungen und Zeitabläufe.

Direkte Radgeschwindigkeitssteuerung

💡 Wichtiger Befehl:
alvik.set_wheels_speed(links, rechts)
Die Werte werden in Umdrehungen pro Minute (RPM) angegeben.

Mit diesem Befehl steuerst du die Geschwindigkeit jedes Rades einzeln. Das ermöglicht:

Wie weit fährt der Alvik pro Radumdrehung?

Frage:
Wie weit fährt der Alvik in einer Minute bei einer bestimmten Radgeschwindigkeit?

Um diese Frage zu beantworten, müssen wir zuerst den Radumfang berechnen.

Berechnung des Radumfangs

Gegebene Werte:

Formel für den Umfang (U):

U = π × d

U = 3,14 × 34 mm

U = 106,8 mm

Wichtige Erkenntnis: Eine vollständige Radumdrehung (360°) bewegt den Roboter etwa 106,8 mm (≈ 10,7 cm) vorwärts.

Fahrtstrecke berechnen

Wenn die Räder mit 10 Umdrehungen pro Minute (RPM) drehen:

Beispiel 1: Kontinuierliches Fahren

Der Alvik fährt mit konstanter Geschwindigkeit ohne Zeitbegrenzung:

from arduino_alvik import ArduinoAlvik
from time import sleep_ms

alvik = ArduinoAlvik()
alvik.begin()

# Beide Räder mit 10 Umdrehungen pro Minute
alvik.set_wheels_speed(10, 10)

# Der Alvik fährt jetzt dauerhaft mit dieser Geschwindigkeit
# Um zu stoppen, muss man explizit alvik.stop() aufrufen

Beispiel 2: Exaktes Fahren mit Zeitsteuerung

Der Alvik soll genau 60 Sekunden fahren und dann automatisch stoppen. Dafür verwenden wir ticks_ms() zur Zeitmessung.

from arduino_alvik import ArduinoAlvik
from time import sleep_ms, ticks_ms

alvik = ArduinoAlvik()
alvik.begin()

# Startzeit merken
startzeit = ticks_ms()

while True:
    # Räder mit 10 RPM drehen
    alvik.set_wheels_speed(10, 10)
    
    # Aktuelle Zeit prüfen
    aktuelle_zeit = ticks_ms()
    
    # Nach 60 Sekunden (60.000 Millisekunden) stoppen
    if aktuelle_zeit - startzeit >= 60000:
        alvik.stop()
        break

# Berechne die gefahrene Strecke:
# 10 RPM × 106,8 mm × 1 Minute = 1.068 mm ≈ 1,07 Meter

Analyse: Wie weit ist der Alvik gefahren?

Bei 10 Umdrehungen pro Minute für 60 Sekunden:

Was ist ticks_ms() und warum brauchen wir es?

Stell dir vor, dein Roboter hat eine Stoppuhr, die automatisch startet, sobald du ihn einschaltest. ticks_ms() zeigt dir, wie viele Millisekunden (Tausendstel Sekunden) seit dem Einschalten vergangen sind.

Warum nicht einfach time.sleep() verwenden?

Der Unterschied ist entscheidend:

Merke:
ticks_ms() ermöglicht Multitasking – der Roboter kann mehrere Aufgaben gleichzeitig ausführen, während die Zeit läuft.

Beispiel 3: Zeitmessung mit ticks_diff()

Eine elegantere Methode zur Zeitdifferenz-Berechnung:

from time import ticks_ms, ticks_diff
from arduino_alvik import ArduinoAlvik

alvik = ArduinoAlvik()
alvik.begin()

# Startzeit merken
start_zeit = ticks_ms()

while True:
    # Prüfe, ob 2 Sekunden vergangen sind
    if ticks_diff(ticks_ms(), start_zeit) > 2000:  # 2000 ms = 2 Sekunden
        print("2 Sekunden sind um!")
        start_zeit = ticks_ms()  # Zeitmessung neu starten
    
    # Hier kann der Roboter trotzdem andere Dinge machen:
    # - Sensoren auslesen
    # - LEDs blinken lassen
    # - Hindernissen ausweichen
    # - etc.
    
    alvik.set_wheels_speed(10, 10)

Vorteile von ticks_ms() und ticks_diff()

Praktische Anwendungen

Beispiel: Exakte Fahrtstrecke

Du möchtest, dass der Alvik genau 2 Meter fährt:

from arduino_alvik import ArduinoAlvik
from time import ticks_ms, ticks_diff

alvik = ArduinoAlvik()
alvik.begin()

# Fahre 112 Sekunden mit 10 RPM für ca. 2 Meter
start = ticks_ms()

while ticks_diff(ticks_ms(), start) < 112000:  # 112 Sekunden
    alvik.set_wheels_speed(10, 10)

alvik.stop()
print("2 Meter gefahren!")

Vergleich: move() vs. set_wheels_speed()

Eigenschaft move() set_wheels_speed()
Verwendung Einfache Fahrbefehle Präzise Steuerung
Eingabe Entfernung in cm Geschwindigkeit in RPM
Blockierend Ja (wartet bis fertig) Nein (läuft kontinuierlich)
Zeitkontrolle Automatisch Manuell mit ticks_ms()
Multitasking Schwierig Einfach möglich

Tipps für präzises Fahren

Zusammenfassung

Für exaktes Fahren kombinierst du:

  1. Radumfang-Berechnung: Wissen, wie weit eine Radumdrehung fährt (106,8 mm)
  2. Geschwindigkeitssteuerung: set_wheels_speed() für kontinuierliche Bewegung
  3. Zeitmessung: ticks_ms() und ticks_diff() für präzise Zeitsteuerung
  4. Mathematik: RPM × Radumfang × Zeit = Gefahrene Strecke
🎯

Challenge: Präzisions-Fahrt

Meistere exakte Geschwindigkeiten und Zeitsteuerung!

🧠 Wissens-Check

1. Was gibt die Radgeschwindigkeit bei set_wheels_speed() an?

2. Wie weit fährt der Alvik mit einer Radumdrehung (ca. 34 mm Durchmesser)?

3. Was ist der Vorteil von ticks_ms() gegenüber sleep()?

💻 Programmier-Challenge

📝 Präzisions-Parcours: Exakt 1 Meter in 10 Sekunden

Programmiere den Alvik so, dass er in genau 10 Sekunden genau 1 Meter fährt.

💡 Anforderungen:
  • Berechne die richtige RPM-Geschwindigkeit
  • Verwende ticks_ms() zur Zeitsteuerung
  • Nach 10 Sekunden exakt stoppen
  • Gib die Startzeit in der Konsole aus

Selbsttest: Das kann ich jetzt!

Hake ab, was du verstanden hast:

0/4

Punkte verstanden