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

AnschlussMotorAufgabe
S1180°-ServoZeigt den Eingabe-Fortschritt (0 bis 3 Zeichen)
S2180°-ServoRiegel — öffnet nur bei korrektem Code
S3180°-ServoZeigt live, ob gerade berührt wird
S4360°-ServoKurzer Dreh-Ausschlag als Klick-Feedback bei jeder Eingabe
S5360°-ServoDreht gegenläufig zu S4 als zweiter Eingabe-Indikator
S6180°-ServoZweiter Fortschrittszeiger, synchron zu S1
DCDC-MotorKurze 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

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

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

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

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

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

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