MODE 5 — SECRET CODE
Medium · 1h · Fast kostenlos
Ziel & Anwendung
Ein Schloss das sich nur mit dem richtigen Morse-Code öffnet: touch1 kurz antippen = kurz, touch1 lang halten (>500ms) = lang. Die Geheim-Sequenz (z.B. kurz-lang-kurz = 0-1-0) muss exakt stimmen — S2 öffnet den Servo-Riegel, S1 zeigt den Eingabe-Fortschritt, S3 die Live-Berührung.
- Morse-Code-Eingabe durch Dauer-Messung von touch1 (>500ms = lang, <500ms = kurz) implementieren.
- Bitweise Kombinationsprüfung gegen Secret Code (0b010 = kurz-lang-kurz) realisieren.
- S1 Eingabe-Fortschrittszeiger und S2 Servo-Riegel als Öffnungs-Output synchronisieren.
Anschluss & Funktion
Motoren am Board
| Anschluss | Motor | Aufgabe |
|---|---|---|
| S1 | 180°-Servo | Zeigt den Eingabe-Fortschritt (0 bis 3 Zeichen) |
| S2 | 180°-Servo | Riegel — öffnet nur bei korrektem Code |
| S3 | 180°-Servo | Zeigt live, ob gerade berührt wird |
| S4 | 360°-Servo | Kurzer Dreh-Ausschlag als Klick-Feedback bei jeder Eingabe |
| S5 | 360°-Servo | Dreht gegenläufig zu S4 als zweiter Eingabe-Indikator |
| S6 | 180°-Servo | Zweiter Fortschrittszeiger, synchron zu S1 |
| DC | DC-Motor | Kurze Vibration bei jeder Eingabe |
Materialliste
- Kleines Schloss-Gehäuse aus Karton ca. 12 × 8 cm
- Karton-Riegel ca. 8 × 2 cm für S2-Servo
- Fortschrittsbalken-Skala (3 Felder: kurz/lang/kurz) aus Papier
- Optionaler Schloss-Look: Karton-Bügel über Riegel
- Klebeband und Heißkleber
Step-by-Step Tutorial
Schloss-Gehäuse und S2-Riegel aufbauen
Karton-Schloss-Gehäuse (12 × 8 cm). S2 innen, Riegel-Arm auf Plastik-Horn. In Ruhe (1000 µs): Riegel blockiert Klappe. Öffnung (2000 µs): Arm dreht 90° — Klappe frei. 3-Felder-Skala auf Gehäuse-Vorderseite für S1-Fortschrittsanzeige. S4 und S5 geben bei jeder Eingabe einen kurzen gegenläufigen Dreh-Klick, S6 läuft als zweiter Fortschrittszeiger synchron zu S1, der DC-Motor vibriert kurz mit.
Check: S2 bei 1000 µs: Riegel geschlossen. Bei 2000 µs: Riegel offen. Klappe kann öffnen.
Tipp: Einfacher Riegel: Karton-Arm (8 × 2 cm) auf S2-Horn, liegt qür vor Klappe. Dreht weg bei 2000 µs.
Morse-Eingabe verstehen: kurz vs. lang
touch1 drücken: touchStartTime = millis(). touch1 loslassen: Dauer messen. < 500ms = kurz (Bit = 0). > 500ms = lang (Bit = 1). Jede Eingabe wird in inputBits[] gespeichert. S1 zeigt Fortschritt: 0/3, 1/3, 2/3, 3/3. S3 = live touch1-Status.
Check: touch1 kurz antippen (< 500ms): kurz. touch1 lang halten (> 500ms): lang. S3 zeigt Live-Zustand.
Tipp: touchStartTime = millis() bei touch1 Start. Bei Loslassen: if(millis()-touchStartTime > 500) → lang (1), sonst kurz (0).
Geheim-Code definieren und prüfen
Nach 3 Eingaben: inputCode mit SECRET_CODE vergleichen. Korrekt: S2 = 2000 µs (Riegel öffnet), Buzzer HEARTBEAT. Falsch: LONG_BLINK, inputBits zurücksetzen, wieder von vorne. touch2: sofortiger Reset ohne Prüfung.
Check: SECRET_CODE = 0b010 (kurz-lang-kurz). Bei 3 Eingaben: Prüfung. Korrekt → S2 öffnet.
Tipp: 0b010 binär = dezimal 2. Bit 0 (kurz), Bit 1 (lang), Bit 2 (kurz). Eigene Kombination: 0b100 = lang-kurz-kurz. 0b111 = lang-lang-lang.
Leichtgängigkeits-Test ohne Strom
S2 von Hand auf 1000 µs: Riegel blockiert Klappe? Klappe versuchen zu öffnen: blockiert. S2 auf 2000 µs: Klappe öffnet? S1 von Hand auf 1000, 1500, 2000: frei? S3 frei? Erst dann einschalten.
Check: S1 dreht frei auf Fortschritts-Skala. S2 Riegel dreht frei. S3 dreht frei.
Tipp: S2-Riegel muss ohne Strom frei beweglich sein — Riegel nicht zu straff gegen Klappe.
MODE 5 aktivieren — Geheim-Code eingeben
Safe-Einbruch → MODE 5. touch1 kurz antippen: S1 auf 1/3. touch1 über 1 Sekunde halten (lang): S1 auf 2/3. touch1 kurz: S1 auf 3/3 → Prüfung. Bei Erfolg: Buzzer HEARTBEAT, S2 öffnet. Falsch: LONG_BLINK, von vorne. touch2: Reset.
Check: touch1 kurz→lang→kurz eingeben (0-1-0). S1 steigt nach jeder Eingabe. S2 öffnet bei Erfolg.
Tipp: Übung: Erst langsam — kurz antippen, dann über 1 Sekunde halten, dann kurz antippen. S3 zeigt ob touch1 gerade aktiv ist.
Eigene Kombination festlegen
Im Code: const uint8_t SECRET_CODE = 0b101 (lang-kurz-lang). Flashen. Testen: lang halten, kurz, lang → öffnet. Alle anderen: LONG_BLINK. Kombination auswendig lernen und niemandem zeigen. 3-Bit erlaubt 8 verschiedene Kombinationen.
Check: SECRET_CODE im Code ändern. Neue Kombination testen.
Tipp: Eigene 3-Bit-Kombinationen: 0b000=kurz-kurz-kurz, 0b001=kurz-kurz-lang, 0b010=kurz-lang-kurz, 0b100=lang-kurz-kurz, 0b111=lang-lang-lang.
Troubleshooting
- Kurz und Lang werden nicht korrekt unterschieden — öffnet nie — 500ms Schwellwert prüfen. Zu kurze lange Eingaben: Schwellwert auf 300ms senken. Zu lange kurze Eingaben: Schwellwert auf 700ms erhöhen. Display-Ausgabe der Dauer beim Loslassen hilft beim Kalibrieren.
- Schloss öffnet bei falscher Kombination — inputBits-Bit-Reihenfolge prüfen. Bit 0 = erste Eingabe, Bit 1 = zweite, Bit 2 = dritte. SECRET_CODE = 0b010: Bit 0=0(kurz), Bit 1=1(lang), Bit 2=0(kurz). Eingaben und Bits müssen übereinstimmen.
Modifikationen & Sicherheit
- Pro-Tipp: Auf 4 oder 5 Bits erweitern — 16 oder 32 mögliche Kombinationen für mehr Sicherheit.
- Erweiterung: Fehlversuch-Zähler mit 3-Versuche-Sperre — nach 3 Fehlern 60 Sekunden warten.
- Sicherheit: Code nie als Kommentar im Script lassen wenn andere Zugriff auf den Code haben.
Wichtige Code-Teile
// Morse-Eingabe: Dauer von touch1 messen
if(touch1 && !lastTouch1State) touchStartTime = millis(); // Drücken
if(!touch1 && lastTouch1State) { // Loslassen
uint32_t duration = millis() - touchStartTime;
uint8_t bit = (duration > 500) ? 1 : 0; // Lang oder kurz
inputBits |= (bit << inputCount); // Bit speichern
inputCount++;
servocontroller.setServoPulse(1, map(inputCount, 0, 3, 1000, 2000));
}
lastTouch1State = touch1;
servocontroller.setServoPulse(3, touch1 ? 2000 : 1000); // S3: Live
// Nach 3 Eingaben: Prüfung
if(inputCount >= 3) {
if(inputBits == SECRET_CODE) {
servocontroller.setServoPulse(2, 2000); // S2: Riegel öffnen
Buzzer.setMode(HEARTBEAT);
} else {
Buzzer.setMode(LONG_BLINK);
inputBits = 0; inputCount = 0; // Reset
}
}Ähnliche Projekte
- MODE 3 — SAFE COMBO — Ein echtes Kombinationsschloss aus Encoder und drei Ziffern: nur wenn alle drei Encoder-Werte exakt die geheime Kombination treffen (z.B. 5, -3, 7), öffnet S3 den Servo-Riegel. touch1 bestätigt jede Ziffer, touch2 setzt alles zurück — präzises Knacken wie bei einem echten Tresor.
- MODE 1 — LASER TRAP — Eine echte Lichtschranke aus Laser-Pointer und LDR: sobald der Laserstrahl unterbrochen wird, schlägt der Alarm an — S1 hebt die Alarm-Fahne, S2 verriegelt einen Servo-Riegel, der Stepper dreht die Alarm-Fläche und der DC-Motor surrt. Perfekt als Diebstahlsicherung für die Schreibtischschublade oder als Einbruch-Spielzeug.
- MODE 7 — COIN THIEF — Eine automatische Münzgreif-Maschine: sobald der Ultraschall-Sensor eine Münze näher als eine Handbreit erkennt, fährt S1 als Greifarm aus, der DC-Motor zieht die Münze ein und der Arm fährt zurück, während eine Klappe den Schacht abdeckt. Vier Zustands-Phasen sorgen für präzise Koordination — kein manuelles Eingreifen nötig.