Comment faire un feu de signalisation tricolore avec Arduino.
Voici un classique dans les projets d’ Arduino: simuler un feu tricolore simple, un feu de signalisation automatisé pour voitures et piétons et, finalement, un feu avec bouton poussoir.
Table de matières:
Feu tricolore simple.
Il est nécessaire:
- Arduino Uno ou équivalent.
- Une plaque d’essai ou breadboard.
- 4 fils.
- 3 led: rouge, jaune et verte.
- 3 résistances de 220 Ω.
Pour le cablage on positionne les trois diodes sur la breadboard, les reliant aux broches 10, 9, 8 de la plaque Arduino Uno. Il faudra vérifier que la patte longue soit connectée positif et la patte courte soit reliée à la résistance.
Le code es simple: on introduit une variable où noter le temps d’attente. Dans la fonction setup() on indique que les pins 10, 9, 8 seront les voies de sortie.
Après, on allumera la led concernée avec la valeur HIGH, et on l’éteindra changeant la valeur à LOW. D’abord, la couleur rouge sera allumé, quand le feu passera à vert, la diode rouge s’éteindra; avant de revenir sur le rouge, la couleur jaune s’allumera et la diode verte sera éteinte.
Code:
// Feu tricolore simple avec Arduino
int tempsAttente = 5000;
void setup(){
pinMode(10, OUTPUT); // Rouge
pinMode(9, OUTPUT); // Jaune
pinMode(8, OUTPUT); // Verte
}
void loop() {
digitalWrite(10, HIGH); // rouge allumée
delay(tempsAttente);
digitalWrite(8, HIGH); // verte allumée
digitalWrite(10, LOW); // rouge éteinte
delay(tempsAttente);
digitalWrite(9, HIGH); // jaune allumée
digitalWrite(8, LOW); // verte éteinte
delay(1000);
digitalWrite(9, LOW); // jaune éteinte
}
Feu automatisé pour voitures et piétons.
Il est nécessaire:
- Arduino Uno ou équivalent.
- Une breadboard.
- 6 fils.
- 5 led: 2 rouges, 1 jaune, 2 vertes.
- 5 résistances de 220 Ω.
Le code est similaire, simplement on ajoute deux diodes supplémentaires. Tenons compte que le feu pour voitures doit être rouge pour que celui des piétons soit vert.
Code:
// Feu pour voitures et piétons avec Arduino
int tempsVoitures = 5000;
int tempsPietons = 3000;
void setup(){
// Feu voitures
pinMode(10, OUTPUT); // Rouge
pinMode(9, OUTPUT); // Jaune
pinMode(8, OUTPUT); // Vert
// Feu piétons
pinMode(3, OUTPUT); // Rouge
pinMode(2, OUTPUT); // Vert
}
void loop() {
digitalWrite(10, HIGH); // rouge allumé
digitalWrite(2, HIGH); // vert piétons allumé
digitalWrite(3, LOW); // rouge piétons éteint
delay(tempsVoitures);
digitalWrite(8, HIGH); // vert allumé
digitalWrite(10, LOW); // rouge éteint
digitalWrite(2, LOW); // vert piétons éteint
digitalWrite(3, HIGH); // rouge piétons allumé
delay(tempsPietons);
digitalWrite(9, HIGH); // jaune allumé
digitalWrite(8, LOW); // vert éteint
delay(1000);
digitalWrite(9, LOW); // jaune éteint
}
Feu avec bouton-poussoir pour voitures et piétons.
Il est nécessaire:
- Arduino Uno ou équivalent.
- Une plaque d’essai ou breadboard.
- 9 fils.
- 5 led: 2 rouges, 1 jaune, 2 vertes.
- 5 résistances de 220 Ω et 1 de 10 KΩ.
- 1 bouton-poussoir.
Le cablage se complique un peu puisque on va insérer un pulsateur qu’ activera le changement de couleur du feu afin de permettre le passage des piétons.
Pour commencer, le feu pour voitures est vert, donc celui des piétons doit être rouge. Nous allons créer la fonction changeCouleur(), à laquelle on appellera si l’état du bouton-poussoir change.
Code:
int tempsTraverse = 5000;
unsigned long tempsChange = 0;
void setup(){
// feu voitures
pinMode(10, OUTPUT); // rouge
pinMode(9, OUTPUT); // jaune
pinMode(8, OUTPUT); // vert
// feu piétons
pinMode(3, OUTPUT); // rouge
pinMode(2, OUTPUT); // vert
pinMode(6, INPUT); // bouton-poussoir, changement couleur
digitalWrite(8, HIGH); // vert allumé, voitures
digitalWrite(3, HIGH); // rouge allumé, piétons
}
void loop() {
int etat = digitalRead(6);
if (etat == LOW && (millis() - tempsChange) > 5000 ){
changeCouleur();
}
}
void changeCouleur() {
digitalWrite(8,LOW); // vert éteint, voitures
digitalWrite(9, HIGH); // jaune allumé, voitures
delay(2000);
digitalWrite(9, LOW); // jaune éteint, voitures
digitalWrite(10, HIGH); // rouge allumé, voitures
delay(1000);
digitalWrite(3, LOW); // rouge éteint, piétons
digitalWrite(2, HIGH); // vert allumé, piétons
delay(tempsTraverse);
// clignotement de la diode verte pour piétons
for (int x=0; x<10; x++) {
digitalWrite(2, HIGH);
delay(250);
digitalWrite(2, LOW);
delay(250);
}
digitalWrite(3, HIGH); // rouge allumé, piétons
delay(500);
digitalWrite(10, LOW); // rouge éteint, voiture
digitalWrite(8, HIGH); // vert allumé, voiture
tempsChange = millis();
}