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
| Anschluss | Motor | Aufgabe |
|---|---|---|
| S1 | 180°-Servo | Fortschrittszeiger |
| S2 | 180°-Servo | Zielflagge, klappt bei Zielerreichung aus |
| S3 | 180°-Servo | Sieges-Fähnchen, schwingt bei erreichtem Ziel |
| S4 | 360°-Servo | Dreht kurz bei jedem gezählten Treffer |
| S5 | 360°-Servo | Gegenläufig zu S4 bei jedem Treffer |
| S6 | 180°-Servo | Konfetti-Klappe öffnet beim Zielerreichen |
| STEPPER | Schrittmotor | Mechanisches Backup-Zählwerk je Treffer |
| DC | DC-Motor | Sieges-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
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.
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.
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.
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.
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.
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.
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.