28 Avr2016
Feu tricolore et feu piéton
Objectif :
- Interfacer Arduino avec des capteurs numériques
Énoncé :
Dans cet exercice on demande de réaliser un feu tricolore accompagné d'un feu "piéton" bicolore (rouge et vert). Le montage devra également avoir un bouton pour piétons qui viendra passer le feu au orange puis au rouge tout en passant le feu piéton au vert (un peu comme dans la vraie vie finalement).
Consignes du TP
Fonctionnement normal :
Feu tricolore :
- Une LED orange (branchée sur la broche 11) allumée pendant 1 seconde
- Une LED rouge (branchée sur la broche 12) allumée pendant 3 secondes
- Une LED verte (branchée sur la broche 10) allumée pendant 3 secondes
Feu bicolore (piéton)
- Le feu piéton est constamment rouge (rouge→9 et vert→8) tant que le bouton (broche 2) n'est pas appuyé.
Si le bouton est maintenu appuyé pendant que le feu voiture est au vert, alors le feu tricolore passe au orange allumé pendant 1 seconde puis rouge pendant 5 secondes durant lesquelles le feu vert piéton passe au vert.
Après ces 5 secondes, le feu piéton repasse au rouge et le fonctionnement normal reprend.
Montage électronique
Pour réaliser ce montage, vous avez besoin de :
- Un Arduino
- Une platine de prototypage
- Un câble USB
- Cinq résistances de 220Ω
- Des fils de prototypage
- deux LED verte
- Une LED orange
- Deux LED rouge
- Un bouton poussoir
Code Source
// Initialisation des constantes pour les LED const int ledRouge = 12; const int ledOrange = 11; const int ledVerte = 10; const int ledRougePieton = 9; const int ledVertePieton = 8; // Numéro de la broche à laquelle est connecté le bouton poussoir const int boutonPin = 2; // Déclaration des variables : int boutonState = 0; // le code dans cette fonction est exécuté une fois au début void setup() { // indique que les broches des LED // sont des sorties : pinMode(ledRouge, OUTPUT); pinMode(ledOrange, OUTPUT); pinMode(ledVerte, OUTPUT); pinMode(ledRougePieton, OUTPUT); pinMode(ledVertePieton, OUTPUT); // indique que la broche bouton est une entrée : pinMode(boutonPin, INPUT); } // le code dans cette fonction est exécuté en boucle void loop() { // Dans le fonctionnement normal, le feu piéton est toujours rouge digitalWrite(ledRougePieton, HIGH); // Fonctionnement normal du feu voiture digitalWrite(ledVerte, HIGH); delay(3000); digitalWrite(ledVerte, LOW); // lit l'état du bouton et stocke le résultat // dans etatBouton : boutonState = digitalRead(boutonPin); // Si boutonState est égal à HIGH // c'est que le bouton est appuyé if (boutonState == HIGH) { digitalWrite(ledOrange, HIGH); delay(1000); digitalWrite(ledOrange, LOW); digitalWrite(ledRouge, HIGH); // Le feu piéton passe au vert pendant 5s digitalWrite(ledRougePieton, LOW); digitalWrite(ledVertePieton, HIGH); delay(5000); // On remet le feu piéton au rouge digitalWrite(ledRougePieton, HIGH); digitalWrite(ledVertePieton, LOW); // Puis on remet le feu au rouge digitalWrite(ledRouge, LOW); }else { // Fonctionnement normal du feu voiture digitalWrite(ledOrange, HIGH); delay(1000); digitalWrite(ledOrange, LOW); digitalWrite(ledRouge, HIGH); delay(3000); digitalWrite(ledRouge, LOW); } }