SunuMake
Tous les projets
Intermédiaire45 minKit Découverte

Le cadenas à code

Un seul bouton, mais une combinaison secrète faite d'appuis courts et longs. Le bon code déverrouille, le mauvais déclenche l'alarme.

Le principe du morse détourné en serrure. Avec un seul bouton, tu obtiens autant de combinaisons qu'avec un clavier.

Tu auras besoin du

SunuMake Découverte

Tes premiers pas avec Arduino - 8 composants inclus.

7 500 FCFAVoir le kit
Matériel

Ce qu'il faut sortir du kit

Prépare tout avant de commencer : c'est plus agréable que de fouiller la boîte au milieu du câblage.

  • 1Carte Arduino UNO
  • 1Plaque d'essai (breadboard)
  • 1Bouton poussoir
  • 2LEDune verte (ouvert) et une rouge (refusé)
  • 2Résistances 220 Ω
  • 1Buzzer piezo
  • 6Fils de connexion
Câblage

Le schéma des branchements

Débranche toujours l'USB avant de modifier un câblage, et vérifie ce tableau ligne par ligne avant de rebrancher.

On relieàen passant par
Bouton — patte 1Broche 7Aucune résistance : INPUT_PULLUP
Bouton — patte 2GNDRail bleu (−)
LED verte — patte longueBroche 8Résistance 220 Ω
LED rouge — patte longueBroche 9Résistance 220 Ω
Buzzer — patte +Broche 11Direct
Pattes courtes LED + 2e patte buzzerGNDRail bleu (−)
Pas à pas

Les étapes

  1. 1

    Matériel

    1 bouton poussoir, 2 LED (une verte, une rouge), 2 résistances 220 Ω, 1 buzzer, des fils.

  2. 2

    Câble le bouton

    Une patte à la broche 7, l'autre à GND. On réutilise `INPUT_PULLUP`, donc pas de résistance externe.

  3. 3

    Câble les LED et le buzzer

    LED verte → broche 8 (via résistance), LED rouge → broche 9 (via résistance), buzzer → broche 11. Toutes les pattes courtes et la seconde patte du buzzer vont au rail bleu (−), relié à GND.

  4. 4

    Apprends le code secret

    Le code par défaut est : **court, court, long, court**. Un appui de moins d'une demi-seconde compte comme court ; au-delà, comme long. La LED verte clignote à chaque appui enregistré.

  5. 5

    Téléverse et essaie

    Entre la bonne séquence : la LED verte reste allumée deux secondes et un joli bip retentit. Trompe-toi volontairement : la LED rouge s'allume et le buzzer grogne. Ensuite, change le code dans la ligne `const bool CODE[]`.

Code Arduino

Le programme à téléverser

Copie ce code dans l'IDE Arduino, branche ta carte en USB et clique sur le bouton « Téléverser » (la flèche en haut à gauche).

sketch.ino
// Le cadenas à code - SunuMake
// Le code est une suite d'appuis COURTS (false) et LONGS (true).
const int BOUTON = 7;
const int LED_OK = 8;
const int LED_KO = 9;
const int BUZZER = 11;
const bool CODE[] = {false, false, true, false}; // court, court, long, court
const int TAILLE = 4;
const int SEUIL_LONG = 500; // au-delà de 500 ms, l'appui est « long »
bool saisie[TAILLE];
int position = 0;
void setup() {
pinMode(BOUTON, INPUT_PULLUP);
pinMode(LED_OK, OUTPUT);
pinMode(LED_KO, OUTPUT);
}
void loop() {
if (digitalRead(BOUTON) == LOW) { // appui détecté
unsigned long debut = millis();
while (digitalRead(BOUTON) == LOW) { } // on attend le relâchement
unsigned long duree = millis() - debut;
saisie[position] = (duree > SEUIL_LONG); // true si appui long
position++;
// Retour visuel : la verte confirme la prise en compte.
digitalWrite(LED_OK, HIGH); delay(80); digitalWrite(LED_OK, LOW);
if (position == TAILLE) {
verifier();
position = 0;
}
delay(200); // petite pause anti-rebond
}
}
void verifier() {
bool correct = true;
for (int i = 0; i < TAILLE; i++) {
if (saisie[i] != CODE[i]) correct = false;
}
if (correct) {
digitalWrite(LED_OK, HIGH);
tone(BUZZER, 880, 150); delay(200);
tone(BUZZER, 1320, 300); delay(400);
digitalWrite(LED_OK, LOW);
} else {
digitalWrite(LED_KO, HIGH);
tone(BUZZER, 150, 600);
delay(800);
digitalWrite(LED_KO, LOW);
}
}
Mini-cours

Comment ça marche ?

Le cœur de ce projet, c'est la mesure de durée. millis() renvoie le nombre de millisecondes écoulées depuis l'allumage de la carte. En notant l'instant du début de l'appui puis celui du relâchement, la soustraction donne la durée exacte - et donc si l'appui était court ou long.

Contrairement à delay(), qui bloque tout le programme, millis() permet de mesurer le temps sans jamais s'arrêter. C'est la technique qu'on utilise dès qu'un projet doit faire deux choses en même temps.

La boucle while (digitalRead(BOUTON) == LOW) { } est vide exprès : elle ne fait qu'attendre que le doigt se lève. Ça s'appelle une attente active.

Enfin, saisie[] et CODE[] sont deux tableaux de la même taille : vérifier revient à les comparer case par case. Dès qu'une case diffère, correct bascule à false et ne redeviendra jamais vrai - c'est le principe du « ET » logique appliqué à toute une série.

Idée d'amélioration : après trois échecs, bloque le cadenas pendant 10 secondes. C'est ce que fait ton téléphone.

Continuer

D'autres projets à essayer