MODE 2 — DOSIER-STOPP

Easy · 45 min · Fast kostenlos

Ziel & Anwendung

Der Stepper dreht mit konstanter Geschwindigkeit auf eine Zielposition zu — touch1 stoppt ihn. Je näher man am Ziel stoppt, desto besser der Score. Encoder setzt die Zielposition (100–1000 Schritte), JoystickButton startet die Fahrt. S1 zeigt Stepper-Position, S2 die Ziel-Markierung, S3 den Score-Zeiger (kleiner Wert = besser).

  • Stepper als bewegliches Zielobjekt mit exakt steuerbarer Geschwindigkeit und Stoppfunktion aufbauen.
  • Encoder als Zielposition-Einsteller (100–1000 Schritte) implementieren.
  • Score-Berechnung aus Stepper-Stoppposition vs. Zielposition als Servo-Zeiger visualisieren.

Anschluss & Funktion

Motoren am Board

AnschlussMotorAufgabe
S1180°-ServoPositions-Zeiger, folgt der Stepper-Fahrt
S2180°-ServoZiel-Markierung, per Encoder verschiebbar
S3180°-ServoScore-Zeiger, zeigt die Stopp-Genauigkeit
S4360°-ServoDreht während der Stepper-Fahrt als Lauf-Anzeige
S5360°-ServoDreht gegenläufig zu S4 für stärkeren Dreheffekt
S6180°-ServoZeigt die Score-Zone (nah/mittel/weit)
STEPPERSchrittmotorFährt kontinuierlich auf die Zielposition zu, wird per Touch gestoppt
DCDC-MotorLeichte Vibration während der Fahrt, verstärkter Impuls bei Präzisionsstopp

Materialliste

  • Kartonstreifen je ca. 8 × 2 cm als Zeiger (3 Stück)
  • Lange Karton-Schiene ca. 20 × 3 cm mit Strich-Markierungen als Stepper-Skala
  • Kleiner Karton-Schieber (4 × 2 cm) der am Stepper befestigt wird
  • Filzstift für Ziel-Markierung auf Schiene
  • Klebeband und Heißkleber

Step-by-Step Tutorial

  1. Stepper-Schiene als lineares Anzeigeelement aufbauen

    Stepper-Mitnehmer mit Faden (20 cm) versehen. Faden an kleinen Karton-Schieber (4 × 2 cm) befestigen. Karton-Schiene (20 × 3 cm) mit 10 Teilstrichen beschriften. Schieber gleitet auf Schiene entlang — zeigt Stepper-Position sichtbar an.

    Check: Karton-Schieber bewegt sich entlang der Schiene sichtbar von einem Ende zum anderen

    Tipp: Stepper-Mitnehmer mit Faden verbinden der einen Karton-Schieber auf einer Schiene zieht — einfachste lineare Mechanik.

  2. Ziel-Markierung und Score-Anzeige bauen

    Kleinen Karton-Pfeil als Ziel-Markierung auf die Schiene stecken. Encoder dreht: Zielposition ändert sich. S2 zeigt Zielposition als Zeiger. S3-Score zeigt: kein Fehler = S3 ganz rechts (exakter Treffer), großer Fehler = S3 ganz links.

    Check: Verschiebbare Ziel-Markierung auf der Schiene — Encoder stellt Zielposition ein

    Tipp: Kleiner Karton-Pfeil als Ziel-Marker: kann auf die Schiene gesteckt und verschoben werden. Encoder-Wert bestimmt wo er idealerweise landet.

  3. Servo-Zeiger für Position und Score montieren

    S1, S2, S3 mit Plastik-Horn und Zeiger bestücken. S1 zeigt aktuelle Stepper-Position. S2 zeigt die Ziel-Position als feste Linie. S3 zeigt Score-Güte invertiert: Zeiger weit rechts = guter Score.

    Check: S1 folgt Stepper-Position. S2 zeigt Zielmarkierung. S3 zeigt Score (invertiert).

    Tipp: S3 fährt bei besserem Score weiter nach rechts — invertierte Skala, da ein kleiner Fehler besser ist.

  4. Leichtgängigkeits-Test ohne Strom

    Stepper von Hand drehen: Schieber bewegt sich auf Schiene? Kein Klemmen? Faden gespannt genug? Alle drei Servo-Zeiger von Hand drehen: frei? Erst dann einschalten.

    Check: Stepper dreht frei. Karton-Schieber gleitet leicht auf Schiene. Faden hat minimale Spannung.

    Tipp: Faden-Spannung: leicht durchhängen aber nicht so locker dass er abfällt. Schiene-Oberfläche glätten damit Schieber gleitet.

  5. MODE 2 aktivieren — Stopp-Spiel spielen

    Reaktionsspiele → MODE 2. Encoder: Zielposition einstellen. JoystickButton: Stepper startet. Schieber bewegt sich. touch1 drücken wenn Schieber die Ziel-Markierung erreicht. Abweichung wird als Score angezeigt. Sehr geringe Abweichung: Buzzer HEARTBEAT.

    Check: JoystickButton startet Stepper. touch1 stoppt ihn. Score-Anzeige erscheint. Nahe Treffer: Buzzer HEARTBEAT.

    Tipp: Stepper fährt konstant und zügig — für die Ziel-Strecke braucht er nur wenige Sekunden.

  6. Highscore-Runden spielen

    5 Runden spielen und besten Score beachten. S3 zeigt aktuelle Runde (kein Bestzeit-Speicher über Runden hinweg — nach jeder Runde Ziel neu einstellen). DC-Motor leichte Vibration während Stepper läuft als haptisches Timing-Feedback.

    Check: Kleine Abweichung = Profi-Niveau. Große Abweichung = zu langsam reagiert.

    Tipp: Antizipieren statt reagieren: schon kurz vor der Ziel-Markierung loslegen, um die eigene Reaktionszeit auszugleichen.

Troubleshooting

  • Stepper stoppt nicht wenn touch1 gedrückt wird — running1 muss true sein für touch1-Auswertung. Prüfen ob JoystickButton vorher gedrückt wurde. stepper.stop() erzeugt Schnellstopp — kurzes Zucken ist normal.
  • Score immer sehr hoch — Ziel wird nicht getroffen — Stepper-Geschwindigkeit ist hoch eingestellt. Niedrigere Maximalgeschwindigkeit setzen für langsamere Fahrt. Zielposition kleiner wählen.

Modifikationen & Sicherheit

  • Pro-Tipp: Stepper-Geschwindigkeit mit Encoder stufenlos anpassen für verschiedene Schwierigkeitsgrade.
  • Erweiterung: Ziel-Position zufällig generieren statt manuell einstellen.
  • Sicherheit: Faden-Mechanik am Stepper nicht überlasten — maximale Zugkraft 50 g, sonst Mitnehmer-Beschädigung.

Wichtige Code-Teile

// Encoder: Zielposition einstellen
stopTarget = constrain(stopTarget + (int)EncoderPos * 10, 100, 1000);
EncoderPos = 0;
// JoystickButton: Stepper starten
if(isButtonPressed(JoystickButton, lastJoyBtn1) && !running1) {
    stepper.setCurrentPosition(0);
    stepper.setMaxSpeed(300);
    running1 = true;
    stepper.move(5000); // Dreht bis gestoppt
}
// touch1: Stepper stoppen und Score berechnen
if(running1 && isButtonPressed(touch1, lastTouch1_1)) {
    stepper.stop();
    stopScore = abs(stepper.currentPosition() - stopTarget);
    running1 = false;
}
// S1: Position, S2: Ziel, S3: Score (invertiert = besser)
servocontroller.setServoPulse(1, map(constrain(stepper.currentPosition(), 0, 1000), 0, 1000, 1000, 2000));
servocontroller.setServoPulse(2, map(constrain(stopTarget, 100, 1000), 100, 1000, 1000, 2000));
servocontroller.setServoPulse(3, map(constrain(stopScore, 0, 500), 0, 500, 2000, 1000));
if(stopScore < 20 && !running1) Buzzer.setMode(HEARTBEAT);

Ähnliche Projekte

  • MODE 1 — LINKS/RECHTS — JoystickButton startet eine zufällige Verzögerung (1–4 Sekunden), dann zeigt entweder S1 oder S2 das Signal — der Spieler muss blitzschnell die richtige Seite drücken (touch1=links, touch2=rechts). Die Bestzeit bleibt als Schleppzeiger auf S3 stehen. Falsche Seite: Buzzer SHORT_BLINK als Strafe.
  • MODE 5 — SERVO FLASH — S1 schießt mit stetig wachsender Puls-Position durch den vollen Hub — eine zufällige Zielposition wird auf S2 vorher angezeigt. Der Spieler muss touch1 oder touch2 drücken wenn S1 die Zielposition trifft. Je geringer die Abweichung, desto besser der Score. DC-Motor gibt kurzen Rückstoß-Impuls bei Präzisionstreffer.
  • MODE 4 — STICK CATCH — Drei Servos halten gemeinsam einen Stab in der Luft. JoystickButton startet die Sequenz: 500 ms Vorwarnung (Buzzer), dann lassen alle drei gleichzeitig los. Der Spieler muss den fallenden Stab innerhalb von 800 ms mit touch1 oder touch2 fangen. Reaktionszeit wird gemessen und die Bestzeit gespeichert.