MODE 3 — PERIODIC
Easy · 45 min · Fast kostenlos
Ziel & Anwendung
Alle Aktuatoren bewegen sich in einem programmierbaren Rhythmus: Encoder stellt das Intervall (1–60 Sekunden), JoystickButton verlängert die Aktiv-Phase. Fünf rotierende Phasen wechseln sich ab — mal S1/S2, mal S1/S3, mal Stepper/DC-Motor, mal S4, mal S5. Der Rest setzt alle Servos in Mittelposition zurück.
- Periodischen Zeitgeber mit Encoder-einstellbarem Intervall (1–60 Sekunden) aufbauen.
- Fünf abwechselnde Aktions-Phasen mit verschiedenen Aktuatoren implementieren.
- Aktiv-Dauer unabhängig vom Intervall per JoystickButton verlängerbar machen.
Anschluss & Funktion
Motoren am Board
| Anschluss | Motor | Aufgabe |
|---|---|---|
| S1 | 180°-Servo | Aktion in Phase 0 und 1 |
| S2 | 180°-Servo | Aktion in Phase 0 |
| S3 | 180°-Servo | Aktion in Phase 1 |
| S4 | 360°-Servo | Rotiert in Phase 3 |
| S5 | 360°-Servo | Rotiert gegenläufig in Phase 4 |
| S6 | 180°-Servo | Zeigt, welche der fünf Phasen gerade aktiv ist |
| STEPPER | Schrittmotor | Bewegt sich in Phase 2 mit |
| DC | DC-Motor | Läuft in Phase 2 |
Materialliste
- Kartonstreifen je ca. 8 × 2 cm als Zeiger (3 Stück)
- Kleines Anzeige-Panel mit Intervall-Skala (1–60 s)
- Kleines Rad oder Rädchen für Stepper-Visualisierung
- Filzstift für Skaleneinteilung
- Klebeband und Heißkleber
Step-by-Step Tutorial
Intervall-Anzeige aufbauen
Kleines Anzeige-Panel aufbauen. Stepper mit Rädchen (Ø 3 cm) als Zyklus-Zähler: dreht bei jeder Phase-Änderung. S1, S2, S3 als Aktions-Anzeige: jede Phase aktiviert andere Kombination. Gehäuse-Basis stabil — DC-Motor kann in Phase 2 laufen.
Check: Encoder-Drehung ändert Intervall (1–60 s) sichtbar. Display zeigt Intv, Act und Next-Countdown.
Tipp: Einfache Skala: 0–60 s Halbkreis. Zeiger deutet auf aktuelle Intervall-Einstellung. Kein Servo-Zeiger nötig — Display reicht.
Fünf Aktions-Phasen verstehen
Phase 0 (aktiv): startMove(1, 2000, 400) und startMove(2, 1000, 400). Phase 1 (aktiv): startMove(1, 1000, 400) und startMove(3, 2000, 400). Phase 2 (aktiv): stepper.move(200) und setMotorspeed(50). Phase 3 (aktiv): S4 dreht durchgehend. Phase 4 (aktiv): S5 dreht gegenläufig. Pause: alle Servos zurück auf 1500 µs.
Check: Phase 0: S1 auf 2000, S2 auf 1000. Phase 1: S1 auf 1000, S3 auf 2000. Phase 2: Stepper + DC-Motor. Phase 3: S4 dreht. Phase 4: S5 dreht gegenläufig.
Tipp: Phasen wechseln alle intervalSec Sekunden reihum durch alle fünf Kombinationen. Jede Phase zeigt eine andere Aktuator-Kombination.
Aktiv-Dauer und Pause einstellen
JoystickButton während Betrieb: activeSec += 0,5 s (maximal intervalSec - 0,5 s). Sinnvoller Bereich: activeSec = 1–3 s, intervalSec = 5–30 s. Buzzer.setValue(80) während aktiver Phase als akustisches Signal.
Check: Aktiv-Dauer (activeSec) ist kleiner als Intervall. JoystickButton erhöht activeSec.
Tipp: Typisch: Intervall 5 s, Aktiv 1,5 s, Pause 3,5 s. Display zeigt 'Next:' als Countdown bis nächste Aktion.
Leichtgängigkeits-Test ohne Strom
S1, S2, S3 von Hand auf 1000 und 2000 µs: kein Klemmen? Stepper-Rädchen von Hand drehen: frei? DC-Motor-Welle von Hand drehen: frei? Erst dann einschalten.
Check: Alle drei Servo-Zeiger drehen frei. Stepper-Rädchen dreht leicht. DC-Motor dreht frei.
Tipp: DC-Motor läuft in Phase 2 — Propeller oder Rädchen auf Motor-Welle darf nicht klemmen.
MODE 3 aktivieren — Periodischen Mover beobachten
Timer → MODE 3. Encoder auf 5 s: alle 5 Sekunden Aktion. Phase 0: S1 und S2 bewegen. Phase 1: S1 und S3. Phase 2: Stepper und DC-Motor. Phase 3: S4 dreht. Phase 4: S5 dreht gegenläufig. Dazwischen: alle Servos auf 1500 µs (neutral). Buzzer bei Aktions-Phase. S6-Klappe zeigt jederzeit, welche Phase gerade läuft.
Check: Alle Aktuatoren bewegen sich in regelmäßigen Abständen. Drei Phasen wechseln sich ab.
Tipp: Encoder auf 5 Sekunden einstellen: kurzes Intervall für schnelles Testen. Bei 30 Sekunden: Geduldiger beobachten.
Anwendungsfall: Haustier-Spielzeug-Timer
Encoder auf 300 s drehen. Aktivphase 3 s. Haustier-Spielzeug-Servo befestigen: bewegt sich automatisch alle 5 Minuten für 3 Sekunden. DC-Motor treibt Spielzeug-Anhänger an. Stepper dreht Spielzeug-Rad. Alles automatisch ohne Aufsicht.
Check: Intervall auf 300 Sekunden (5 Minuten) einstellen für automatisches Haustier-Spielzeug
Tipp: Encoder 300 Klicks oder Encoder schnell drehen (EncoderPos wird akkumuliert). Display zeigt Intervall.
Troubleshooting
- Phase wechselt nicht — bleibt immer in Phase 0 — Phase wechselt reihum durch fünf Zustände. Bei intervalSec=5: nach 5000 ms → Phase 1, nach 10000 ms → Phase 2, usw. bis Phase 4, dann wieder 0. Intervall auf sehr kurze Zeit (1 s) einstellen zum Testen.
- Stepper und DC-Motor laufen ständig ohne Pause — !active muss alle Aktuatoren stoppen. setMotorspeed(0) und stepper.setSpeed(0) in der Pause-Phase prüfen. activeSec muss kleiner als intervalSec sein.
Modifikationen & Sicherheit
- Pro-Tipp: Intervall und Aktivzeit im EEPROM speichern für persistente Einstellungen nach Neustart.
- Erweiterung: Vier Phasen statt drei — vierte Phase alle Aktuatoren gleichzeitig für maximale Aktion.
- Sicherheit: DC-Motor in Phase 2 nicht dauerhaft laufen lassen — Aktivphase auf maximal 3 Sekunden begrenzen.
Wichtige Code-Teile
// Encoder: Intervall einstellen
intervalSec = constrain(intervalSec + EncoderPos * 0.5f, 1.0f, 60.0f);
EncoderPos = 0;
// Zyklus-Position
uint32_t cyclePos = millis() % (uint32_t)(intervalSec * 1000);
bool active = cyclePos < (uint32_t)(activeSec * 1000);
uint8_t phase = (millis() / (uint32_t)(intervalSec * 1000)) % 5;
if(active) {
switch(phase) {
case 0: if(!ismoving[1]) servocontroller.startMove(1, 2000, 400);
if(!ismoving[2]) servocontroller.startMove(2, 1000, 400); break;
case 1: if(!ismoving[1]) servocontroller.startMove(1, 1000, 400);
if(!ismoving[3]) servocontroller.startMove(3, 2000, 400); break;
case 2: stepper.move(200); setMotorspeed(50); break;
case 3: servocontroller.setServoPulse(4, 1700); break;
case 4: servocontroller.setServoPulse(5, 1300); break;
}
Buzzer.setValue(80);
} else {
// Pause: alle Servos in Mitte
if(!ismoving[1]) servocontroller.startMove(1, 1500, 600);
if(!ismoving[2]) servocontroller.startMove(2, 1500, 600);
if(!ismoving[3]) servocontroller.startMove(3, 1500, 600);
servocontroller.setServoPulse(4, 1500);
servocontroller.setServoPulse(5, 1500);
setMotorspeed(0); Buzzer.setValue(0);
}Ähnliche Projekte
- MODE 2 — STOPWATCH — Eine analoge Stoppuhr mit drei Servo-Zeigern: S1 zeigt Sekunden (0–60 s zyklisch), S2 Minuten (0–60 min) und S3 die gespeicherte Rundenzeit. JoystickButton startet/stoppt, EncoderButton speichert die Runden-Zeit. touch1 und touch2 gleichzeitig: Gesamt-Reset auf 0. Unbegrenzte Laufzeit.
- MODE 5 — COUNTER — Ein mechanischer Ereigniszähler: PIR-Sensor und kapazitiver Touch zählen jede Bewegung oder Berührung. S1 zeigt den Fortschritt als Zeiger, S2 klappt als Zielflagge aus wenn der einstellbare Zielwert erreicht ist. Perfekt als Fitness-Wiederholungszähler oder automatische Besucher-Zählung.
- MODE 8 — SCARY BOT — Ein unheimlicher Zufalls-Roboter: alle Servos ruhen in Neutral-Position bis eine zufällige Wartezeit (5–30 Sekunden) abläuft — dann zuckt einer der Servos oder der DC-Motor unerwartet auf. Perfekt als Grusel-Requisite, interaktive Kunstinstallation oder als Überraschungs-Objekt auf dem Schreibtisch.