Le feu piéton avec bouton d'appel
Un vrai carrefour : le feu voitures reste au vert, jusqu'à ce qu'un piéton appuie sur le bouton. Alors tout s'enchaîne dans le bon ordre.
C'est exactement la logique des carrefours de Dakar équipés d'un bouton piéton - et le premier vrai programme « qui prend des décisions » que tu écris.
SunuMake Découverte
Tes premiers pas avec Arduino - 8 composants inclus.
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)
- 3LED voitures— rouge, jaune, verte
- 2LED piétons— rouge et verte
- 5Résistances 220 Ω
- 1Bouton poussoir
- 8Fils de connexion
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 |
|---|---|---|
| LED rouge voitures | Broche 2 | Résistance 220 Ω |
| LED jaune voitures | Broche 3 | Résistance 220 Ω |
| LED verte voitures | Broche 4 | Résistance 220 Ω |
| LED rouge piétons | Broche 5 | Résistance 220 Ω |
| LED verte piétons | Broche 6 | Résistance 220 Ω |
| Bouton — patte 1 | Broche 7 | Aucune résistance : INPUT_PULLUP |
| Bouton — patte 2 | GND | Rail bleu (−) |
| Toutes les pattes courtes des LED | GND | Rail bleu (−) |
Les étapes
- 1
Matériel
5 LED (rouge, jaune, verte pour les voitures + rouge et verte pour les piétons), 5 résistances 220 Ω, 1 bouton poussoir, des fils.
- 2
Câble le feu voitures
Rouge → broche 2, jaune → broche 3, verte → broche 4. Chacune via sa résistance, pattes courtes au rail bleu (−).
- 3
Câble le feu piétons
Rouge piéton → broche 5, verte piéton → broche 6. Même principe. Place-les un peu à l'écart des trois autres pour bien distinguer les deux feux.
- 4
Câble le bouton
Une patte du bouton va à la broche 7, l'autre à GND. Pas besoin de résistance : on utilisera la résistance interne de l'Arduino (`INPUT_PULLUP`).
- 5
Téléverse et traverse
Au repos : vert voitures, rouge piétons. Appuie sur le bouton : le feu passe au jaune, puis au rouge, et le piéton passe au vert quelques secondes avant que tout revienne à l'état initial. Exactement comme dans la rue.
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).
// Feu piéton avec bouton d'appel - SunuMakeconst int V_ROUGE = 2, V_JAUNE = 3, V_VERT = 4; // feu voituresconst int P_ROUGE = 5, P_VERT = 6; // feu piétonsconst int BOUTON = 7;void setup() { pinMode(V_ROUGE, OUTPUT); pinMode(V_JAUNE, OUTPUT); pinMode(V_VERT, OUTPUT); pinMode(P_ROUGE, OUTPUT); pinMode(P_VERT, OUTPUT); pinMode(BOUTON, INPUT_PULLUP); // bouton relié à GND repos(); // état de départ}void loop() { // LOW = bouton appuyé (à cause du pull-up : au repos la broche est à HIGH). if (digitalRead(BOUTON) == LOW) { cycleTraversee(); repos(); }}// État par défaut : les voitures passent, les piétons attendent.void repos() { digitalWrite(V_ROUGE, LOW); digitalWrite(V_JAUNE, LOW); digitalWrite(V_VERT, HIGH); digitalWrite(P_ROUGE, HIGH); digitalWrite(P_VERT, LOW);}void cycleTraversee() { // 1. Les voitures sont prévenues. digitalWrite(V_VERT, LOW); digitalWrite(V_JAUNE, HIGH); delay(2000); // 2. Les voitures s'arrêtent. digitalWrite(V_JAUNE, LOW); digitalWrite(V_ROUGE, HIGH); delay(1000); // sécurité : tout le monde au rouge un instant // 3. Le piéton traverse. digitalWrite(P_ROUGE, LOW); digitalWrite(P_VERT, HIGH); delay(6000); // 4. Fin de traversée : la verte piéton clignote pour avertir. for (int i = 0; i < 5; i++) { digitalWrite(P_VERT, LOW); delay(300); digitalWrite(P_VERT, HIGH); delay(300); } digitalWrite(P_VERT, LOW); digitalWrite(P_ROUGE, HIGH); delay(1000);}Comment ça marche ?
Ce projet t'apprend deux choses importantes.
Le pull-up interne. Un bouton non appuyé laisse la broche « en l'air » : elle capte du bruit électrique et lit n'importe quoi. INPUT_PULLUP active une résistance à l'intérieur de l'Arduino qui maintient la broche à 5 V au repos. Appuyer sur le bouton la relie à GND, donc à 0 V. C'est pour ça qu'on teste == LOW : appuyé signifie 0, c'est contre-intuitif mais c'est la convention.
La machine à états. Ton programme n'a que deux états : *repos* (voitures au vert) et *traversée* (la séquence complète). loop() ne fait qu'une chose : surveiller le bouton, et déclencher la séquence si besoin. Toute la complexité est rangée dans des fonctions au nom explicite.
Regarde aussi la sécurité dans le code : entre le rouge voitures et le vert piéton, il y a une seconde où tout le monde est au rouge. Ce n'est pas un oubli - c'est ce qui laisse le temps à une voiture engagée de dégager le carrefour. Un vrai feu réel fait exactement pareil.