Umdrehungs-Labor
Du hast ein Rad mit Schlitzen und einen Sensor. Zusammen zählen sie, wie oft sich das Rad gedreht hat. Hier spielst du zuerst mit einer virtuellen Scheibe. Danach bringst du dem echten Roboter bei, geradeaus zu fahren und genau anzuhalten.
Code gibt es hier nur wenig: nur das, was du unbedingt brauchst. Den Rest schreibst du selbst. Wenn du feststeckst, klick auf „Hinweis“. Die Hinweise öffnen sich einzeln, vom leichtesten zum stärksten. Denk erst selbst nach, bevor du den nächsten öffnest.
Was ist ein Schlitz?
Die Gabel-Lichtschranke schaut durch die Scheibe. Ein Schlitz lässt Licht durch, und das Signal am Ausgang des Sensors wird HIGH. Der massive Teil der Scheibe blockiert das Licht, und das Signal wird LOW. Der Arduino zählt, wie oft das Signal HIGH wird. Das sind die Impulse.
Virtuelle Scheibe und Sensor
Merke: Umdrehungen = Impulse ÷ Anzahl der Schlitze. Der Sensor zählt nur Schlitze. Aus welcher Richtung sie kommen, weiß er nicht.
Antworten: 60 Impulse; 3 Umdrehungen; beim Rückwärtsdrehen zählt der Zähler ebenfalls hoch. Das ist in Mission 7 wichtig: Mit einem Sensor kennt nur das Programm die Fahrtrichtung.
Impuls am echten Roboter fangen
Jetzt dasselbe an der Hardware. Fang mit einem Sensor an, dem linken. Motoren brauchst du noch nicht: Du drehst das Rad mit der Hand.
Was kommt wohin? Am Sensor sind drei Anschlüsse: VCC an 5V, GND an GND, OUT an Pin D2 (linker Sensor) oder D3 (rechter). Warum gerade 2 und 3? Der Arduino Uno kann Interrupts nur an diesen beiden Pins. Was Interrupts sind, erfährst du in der nächsten Mission.
Hier ist die Vorlage für das Programm. Trag das Fehlende ein und klick auf „Prüfen“.
Typische Fehler: OUT an einem anderen Pin (nicht 2 oder 3), volatile vergessen, counter ohne Kopie bei ausgeschalteten Interrupts ausgegeben. Die Schlitzzahl ist bei jedem anders: Die Kinder sollen sie zählen und mit dem Serial Monitor vergleichen.
Warum loop() blind wird
Es gibt zwei Wege zu erfahren, dass ein Schlitz am Sensor vorbeigekommen ist. Der erste heißt Abfrage (Polling): Der Arduino schaut in loop() immer wieder auf den Pin. Das ist, als würdest du ständig zur Tür rennen, um zu schauen, ob ein Gast da ist. Der zweite heißt Interrupt: Der Arduino macht sein Ding, und wenn ein Schlitz vorbeigeht, klingelt der Sensor von selbst. Der Arduino lässt kurz alles stehen, macht counter++ und geht zurück. Probier aus, welcher Weg zuverlässiger ist.
Abfrage gegen Interrupt, 3 Sekunden Laufzeit
Merke: Solange loop() beschäftigt ist (delay, Ausgabe, Motorsteuerung), ist die Abfrage blind. Der Interrupt verpasst keinen Schlitz, deshalb baut man Umdrehungszähler immer mit Interrupts.
Im Simulator ist ein Schlitz die halbe Periode lang offen. Bei 300 U/min und 20 Schlitzen sind das 5 ms, also lautet die Antwort 4 oder 5 ms. Akzeptiert werden Werte von 3 bis 5.
Geschwindigkeits-Labor
Der Motor bekommt eine Zahl von 0 bis 255. Das kennst du vom letzten Mal. Jetzt hat der Motor einen „Tacho“: den Impulszähler. Finde heraus, wie die Geschwindigkeit von der Zahl in analogWrite abhängt. Jeder hat seinen eigenen virtuellen Motor: Die Anlaufschwelle ist bei deinem Roboter anders als beim Nachbarn.
Messungen am Motor
| PWM | Impulse/s | Umdrehungen/s |
|---|
Jetzt dasselbe am echten Roboter. Vorlage für die Messfunktion:
Die Anlaufschwelle ist im Simulator bei jedem Kind anders (60–90), Abschreiben geht also nicht. Oberhalb der Schwelle ist der Zusammenhang linear. Bei echten Motoren hängt die Schwelle von Batterie und Last ab.
Genau anhalten
Wenn du den Motor ausschaltest, steht das Rad nicht sofort still: Es dreht sich noch ein Stück weiter. Das nennt man Nachlauf. Wegen des Nachlaufs schießt der Roboter übers Ziel hinaus. Triff das Ziel mit höchstens einem Schlitz Fehler.
Fahrbahn bis zum Ziel
Jetzt ins Programm des Roboters. Ergänze das Fehlende: Trag ein, wie viele Schlitze gezählt werden müssen.
Der Nachlauf ist im Simulator proportional zur Geschwindigkeit: Ein fester „Vorhalt“ passt deshalb nur für eine Geschwindigkeit. Lösungen: am Ende langsamer fahren oder den Motor bremsen. Echte Nachlaufwerte sind bei jedem Roboter anders.
Zwei Motoren, zwei Charaktere
Zwei gleiche Motoren sind in Wirklichkeit nicht gleich. Einer ist etwas schneller, der andere etwas langsamer. Gib beiden dieselbe PWM und schau, wohin der Roboter fährt. Die Zähler zeigen, wer vorne liegt.
Eine nützliche Zahl. Bei diesem Roboter ist das Rad 6,5 cm groß, es gibt 20 Schlitze, und die Räder stehen 12 cm auseinander. Ein Schlitz Unterschied zwischen linkem und rechtem Zähler dreht den Roboter um etwa 5°.
Ansicht von oben, 100 Schlitze fahren
Bei jedem Kind ist zufällig ein anderer Motor schwächer, die Korrektur ist also verschieden. Eine schwache Batterie verschlechtert den schwachen Motor stärker: Die Handjustierung bricht zusammen. Das motiviert die nächste Mission.
Roboter lenkt selbst nach
Wer am Steuer sitzt, schaut auf die Straße und lenkt nach. Ein Roboter kann anhand der Zähler nachlenken: Wer vorausgelaufen ist, wird gebremst, wer zurückliegt, bekommt mehr Gas. Das nennt man Rückkopplung (Regelung). Setz zuerst die Logik aus Zeilen zusammen, dann stell sie im Simulator ein.
Setz den Schleifenkörper zusammen
Bring die Zeilen mit den Pfeiltasten in die richtige Reihenfolge. Manche Zeilen darfst du vertauschen.
Regler im Simulator
Die Korrektur ist proportional zur Zählerdifferenz: Je weiter ein Rad vorausläuft, desto stärker wird sein Motor gebremst. Ein zu großes KP zusammen mit langem delay lässt den Roboter schaukeln. Weil in Schlitzen gezählt wird, sind 5–10° Kursabweichung normal.
Zentimeter und Drehungen
Bisher haben wir Schlitze gezählt. In Projekten braucht man aber Zentimeter und Grad. Die Formeln leitest du selbst her. Unten steht eine Aufgabenkarte mit Zufallszahlen: Bei jedem sind sie anders.
Aufgabenkarte
Rechner für deinen Roboter
Trag deine Maße ein und bekomm die Zahlen für dein Programm.
Jetzt packen wir alles in drei Funktionen für deine Projekte. Hier stehen nur ihre Namen:
Formeln: Schlitze für eine Strecke = D × N ÷ (π × d); Schlitze für eine Drehung auf der Stelle = N × W × Winkel ÷ (360 × d). Am echten Roboter rutschen die Räder, die Zahl muss man also durch Ausprobieren anpassen.
Test und Projekt
Beantworte die Fragen. Wenn du mindestens sechs von acht richtig hast, bekommst du den Profi-Titel. Danach such dir ein Projekt aus und zeig, was du kannst.
Umdrehungszähler-Profi
Such dir ein Projekt aus
Quadrat ohne Abweichung
Fahr ein Quadrat mit 50 cm Seitenlänge und komm zum Startpunkt zurück.
ErfolgAbweichung am Ziel höchstens 5 cm.
Garage einparken
Fahr rückwärts in eine Garage aus zwei Kartons und halt an der Wand an.
ErfolgDu berührst die Wand nicht, der Abstand beträgt höchstens 2 cm.
Rennen über 2 Meter
Fahr genau 2 Meter so schnell wie möglich und halt an.
ErfolgStopp höchstens 3 cm von der Markierung entfernt, Zeit notiert.
Eigene Strecke
Denk dir eine Strecke mit Kurven aus: einen Buchstaben, ein Labyrinth aus Kartons oder etwas Eigenes.
ErfolgDu kannst erklären, wie jede Funktion den Zähler benutzt.
Spickzettel: Das kannst du in deinen Projekten nutzen
- Umdrehungen = Impulse ÷
SLOTS. - Strecke in Zentimetern = Umdrehungen × π × Raddurchmesser.
- Drehung auf der Stelle: Schlitze =
SLOTS× W × Winkel ÷ (360 × Raddurchmesser). - Der Zähler ist immer
volatile, lies ihn bei ausgeschalteten Interrupts. - Interrupt-Pins am Arduino Uno: D2 und D3.
- Der Nachlauf hängt von der Geschwindigkeit ab: Bremse rechtzeitig oder fahr am Ende langsamer.
- Ein Schlitz Unterschied zwischen den Rädern sind etwa 5° Kursabweichung. Beobachte die Differenz der Zähler.
- Ein Sensor kennt die Richtung nicht: Das weiß dein Programm.
Antworten zum Test: 1) 3 Umdrehungen; 2) der Interrupt ändert die Variable, ohne dass das Hauptprogramm es merkt; 3) er reagiert sofort; 4) der Zähler zählt hoch; 5) der rechte Motor ist schwächer; 6) etwa 46 Schlitze; 7) der Roboter schaukelt; 8) Nachlauf.