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

AnschlussMotorAufgabe
S1180°-ServoAktion in Phase 0 und 1
S2180°-ServoAktion in Phase 0
S3180°-ServoAktion in Phase 1
S4360°-ServoRotiert in Phase 3
S5360°-ServoRotiert gegenläufig in Phase 4
S6180°-ServoZeigt, welche der fünf Phasen gerade aktiv ist
STEPPERSchrittmotorBewegt sich in Phase 2 mit
DCDC-MotorLä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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.