MODE 5 — COUNTER

Easy · 45 min · Fast kostenlos

Ziel & Anwendung

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.

  • Ereigniszähler mit PIR- und Touch-Eingang aufbauen, der Treffer akkumuliert.
  • Fortschrittszeiger (S1) mit map() zwischen 0 und Zielwert anzeigen.
  • Zielflagge (S2) und Alarm bei erreichtem Zielwert implementieren.

Anschluss & Funktion

Motoren am Board

AnschlussMotorAufgabe
S1180°-ServoFortschrittszeiger
S2180°-ServoZielflagge, klappt bei Zielerreichung aus
S3180°-ServoSieges-Fähnchen, schwingt bei erreichtem Ziel
S4360°-ServoDreht kurz bei jedem gezählten Treffer
S5360°-ServoGegenläufig zu S4 bei jedem Treffer
S6180°-ServoKonfetti-Klappe öffnet beim Zielerreichen
STEPPERSchrittmotorMechanisches Backup-Zählwerk je Treffer
DCDC-MotorSieges-Vibration bei erreichtem Ziel

Materialliste

  • Kartonstreifen ca. 10 × 2 cm als Fortschrittszeiger
  • Roter Karton-Fähnchen ca. 6 × 4 cm als Zielflagge
  • Halbkreis-Skala Ø 12 cm mit 0–100-Einteilung
  • Filzstift für Zifferblatt-Einteilung
  • Klebeband und Heißkleber

Step-by-Step Tutorial

  1. Fortschrittsanzeige aufbauen

    Halbkreis-Skala (Ø 12 cm) mit gleichmäßiger Einteilung aufkleben. S1 mit Plastik-Horn bestücken und Karton-Zeiger (10 × 2 cm) auf das Horn kleben. S2 daneben mit roter Karton-Fahne: eingeklappt bei 1200 µs, ausgeklappt bei 2000 µs als Ziel-Signal.

    Check: S1-Zeiger dreht von 1000 µs (0 Treffer) bis 2000 µs (Ziel erreicht)

    Tipp: Halbkreis-Skala beschriften: links = 0, rechts = Zielwert. Je nach eingestelltem Ziel passt der Zeiger automatisch — kein Nachjustieren nötig.

  2. Zielwert per Encoder einstellen

    Encoder drehen: targetHits wird zwischen 1 und 99 begrenzt (constrain). Display zeigt Zielwert links, aktuelle Treffer rechts. Zielwert kann jederzeit verändert werden — auch während des Zählens.

    Check: Encoder-Drehung ändert Zielwert (1–99) sichtbar. Display zeigt aktuellen Zielwert.

    Tipp: Jeder Encoder-Klick = ±1 Treffer. Für 10 Wiederholungen: 10 Klicks. Display zeigt 'Tgt:' und 'Hit:' nebeneinander.

  3. PIR und Touch als Zähl-Eingänge vorbereiten

    PIR als Bewegungs-Eingang (Besucher, Vorbeigehende). Kapazitiver Touch als manueller Zähl-Eingang (jede Berührung = +1 Treffer). isButtonPressed() verhindert Mehrfachzählung. touch1+touch2 gleichzeitig: hits = 0 Reset.

    Check: PIR-Trigger erhöht hits. Touch-Berührung erhöht hits. touch1+touch2 gleichzeitig: Reset auf 0.

    Tipp: PIR erkennt Bewegung im Raum (Besucherzählung). Touch zählt manuelle Berührungen (Fitness-Wiederholungen). Beide Eingänge addieren sich.

  4. Leichtgängigkeits-Test ohne Strom

    S1 von Hand auf 1000 und 2000 µs drehen: frei? S2 von Hand klappen: Fahne klappt auf ohne Blockade? S3 von Hand drehen: keine Reibung? S4/S5-Rädchen und Stepper-Backup-Zähler ebenfalls von Hand prüfen. Erst dann einschalten.

    Check: S1, S2 und S3 drehen frei durch vollen Hub. S4/S5-Rädchen und Stepper drehen leicht.

    Tipp: S2-Fahne darf nicht am Gehäuse schaben. S1-Zeiger muss den vollen Halbkreis frei durchlaufen — kein Klemmen am Zifferblatt-Rand.

  5. MODE 5 aktivieren — Zählen starten

    Timer → MODE 5. Encoder auf Zielwert stellen. Dann: Touch antippen oder vor PIR gehen — jeder Treffer verschiebt S1-Zeiger. Bei Ziel: S2-Fahne klappt auf, HEARTBEAT-Buzzer, DC-Motor 60% Geschwindigkeit. touch1+touch2: Reset und neues Spiel.

    Check: PIR oder Touch zählt Treffer. S1 steigt. Bei Ziel: S2 klappt, HEARTBEAT, DC dreht.

    Tipp: Test: Encoder auf 5 setzen, dann 5× Touch antippen. Bei Hit 5: S2 klappt aus, Buzzer HEARTBEAT, DC-Motor dreht als Siegessignal.

  6. S3 Sinuswellen-Siegesanzeige beobachten

    Wenn reached: S3 schwingt sanft hin und her (1100–1900 µs). Kleines Fähnchen auf S3-Horn: sieht wie ein wedelndes Sieges-Fähnchen aus. Bei touch1+touch2: S3 zurück auf 1500 µs (Neutral).

    Check: Bei erreichtem Ziel schwingt S3 langsam hin und her (sin-Wave). Bei Reset: S3 zurück auf 1500.

    Tipp: S3 schwingt mit sin(millis()×0.02)×400: ca. 3 Sekunden pro Vollschwingung. Gut sichtbarer Sieger-Effekt.

  7. S4/S5-Drehimpuls und Stepper-Backup-Zähler montieren

    S4 und S5 mit kleinen Papprädchen bestücken: bei jedem Treffer drehen sie kurz gegenläufig an, dann wieder Stillstand. Der Stepper zählt zusätzlich rein mechanisch mit — ein kleines Rädchen dreht bei jedem Treffer einen winzigen Schritt weiter, als Backup-Anzeige unabhängig vom Servo-Zeiger. S6-Konfetti-Klappe öffnet sich nur beim Erreichen des Zielwerts.

    Check: S4 und S5 drehen kurz gegenläufig bei jedem einzelnen Treffer. Stepper-Rädchen dreht ein kleines Stück mit.

    Tipp: S4/S5-Impuls dauert nur einen Wimpernschlag — kleine Papprädchen genügen für den sichtbaren Kick.

Troubleshooting

  • PIR zählt mehrfach bei einer einzigen Bewegung — isButtonPressed() erkennt nur die steigende Flanke (Low→High). PIR-Modul hat eigene Haltezeit (typisch 2–3 s). Wenn PIR-Modul zu empfindlich: Potentiometer am PIR-Modul auf kürzere Haltezeit drehen.
  • S2-Fahne klappt nicht aus, obwohl Ziel erreicht — reached = (hits >= targetHits). Wenn hits == targetHits aber S2 bleibt bei 1200: map()-Aufruf für S2 prüfen. Bei reached muss setServoPulse(2, 2000) ausgeführt werden — nicht setServoPulse(2, map(...)).

Modifikationen & Sicherheit

  • Pro-Tipp: Zielwert und bisherigen Höchstwert im EEPROM speichern — Bestleistung bleibt nach Neustart erhalten.
  • Erweiterung: Zwei getrennte Zähler für PIR und Touch — Vergleich zwischen automatischer und manueller Zählung.
  • Sicherheit: PIR-Reichweite ggf. mit Karton abschirmen, wenn nur ein kleiner Bereich gezählt werden soll.

Wichtige Code-Teile

// Ereigniszähler mit PIR und Touch
bool pirHit = isButtonPressed(RemotePIR, lastPIR4);
bool capHit = isButtonPressed(RemoteCapTouch, lastCap4);
if(pirHit) hits++;
if(capHit) hits++;
bool anyHit = pirHit || capHit;
if(touch1 && touch2) hits = 0;  // Reset
bool reached = (hits >= targetHits);
// S1: Fortschrittszeiger
servocontroller.setServoPulse(1, map(constrain(hits, 0, targetHits), 0, targetHits, 1000, 2000));
// S2: Zielflagge
servocontroller.setServoPulse(2, reached ? 2000 : 1200);
// S3: Sieges-Sinuswelle bei Ziel
if(reached) {
    servocontroller.setServoPulse(3, 1500 + (int)(sin(millis() * 0.02) * 400));
    Buzzer.setMode(HEARTBEAT);
    setMotorspeed(60);
}
// S4/S5: kurzer Drehimpuls bei jedem Treffer
if(anyHit) hitSpinUntil = millis() + 200;
bool spinning = millis() < hitSpinUntil;
servocontroller.setServoPulse(4, spinning ? 1700 : 1500);
servocontroller.setServoPulse(5, spinning ? 1300 : 1500);
// S6: Konfetti-Klappe bei Ziel, Stepper: mechanisches Backup-Zählwerk
servocontroller.setServoPulse(6, reached ? 2000 : 1000);
if(anyHit) stepper.move(10);

Ähnliche Projekte

  • MODE 4 — CHAOS — Ein völlig unvorhersehbarer Timer: zufällige Aktuatoren (S1, S2, S3, DC-Motor, Stepper oder — selten — S4/S5) werden in zufälligen Abständen (0,5–4 Sekunden) für zufällige Dauer (200–1500 ms) aktiviert. Niemand weiß was als nächstes passiert — ideal als Haustier-Überraschungsbox oder interaktives Kunstobjekt.
  • MODE 1 — COUNTDOWN — Ein mechanischer Countdown-Timer: S1 zeigt die verbleibende Zeit als Zeiger, S2 dreht sich gegenläufig wie eine visülle Sanduhr. Encoder stellt die Zeit (5–600 Sekunden), JoystickButton startet oder stoppt. Bei Ablauf: S3 fährt auf Alarm-Fahne, Stepper vibriert als mechanischer Alarm und Buzzer ertönt dauerhaft.
  • MODE 6 — METRONOM — Ein mechanisches Metronom aus Servo und Karton: S1 schwingt als Pendel im einstellbaren Tempo (20–240 BPM), S2 gibt den Hauptschlag als kurzen Impuls, S3 markiert den Halbschlag. Der Encoder stellt das Tempo, der DC-Motor surrt taktgenau mit — perfekt zum Üben von Rhythmusgefühl.