Arduino - Feux tricolores

feux_tricolor


Je vous propose la création d'un feu tricolore piloté avec un Arduino Uno

Nous utiliserons les broches Digitales de l'Arduino

Matériel:

  • Un Arduino Uno
  • Deux leds rouges
  • Deux leds oranges
  • Deux leds vertes
  • Six résistances de 220 Ohms
  • Une breadboard
  • Des câbles




Le Schéma

  • feux-tricolor-cablage
  • feux-tricolores-schema


Câblage:

  • Broche Digital 2 - Feu Vert 1
  • Broche Digital 3 - Feu Orange 1
  • Broche Digital 4 - Feu Rouge 1
  • Broche Digital 5 - Feu Vert 2
  • Broche Digital 6 - Feu Orange 2
  • Broche Digital 7 - Feu Rouge 2


Chaque Cathode des leds est reliée au GND
Chaque Anode des leds est reliée à une patte d'une résistance de 220 Ohms 
L'autre patte de la résistance est reliée à une Pin Digital comme indiquée ci-dessus


Le Code

feux-tricolore-code


void setup()
{
  pinMode(2, OUTPUT);  // vert1
  pinMode(3, OUTPUT);  // orange1
  pinMode(4, OUTPUT);  // rouge1
  pinMode(5, OUTPUT);  // vert2
  pinMode(6, OUTPUT);  // orange2
  pinMode(7, OUTPUT);  // rouge2
}
void loop()
{
  digitalWrite(2, 1);  // vert1
  digitalWrite(3, 0);  // orange1
  digitalWrite(4, 0);  // rouge1
  digitalWrite(5, 0);  // vert2
  digitalWrite(6, 0);  // orange2
  digitalWrite(7, 1);  // rouge2
  delay(2000);
  
  digitalWrite(2, 0);  // vert1
  digitalWrite(3, 1);  // orange1
  digitalWrite(4, 0);  // rouge1
  digitalWrite(5, 0);  // vert2
  digitalWrite(6, 0);  // orange2
  digitalWrite(7, 1);  // rouge2
  delay(2000);
  
  digitalWrite(2, 0);  // vert1
  digitalWrite(3, 0);  // orange1
  digitalWrite(4, 1);  // rouge1
  digitalWrite(5, 1);  // vert2
  digitalWrite(6, 0);  // orange2
  digitalWrite(7, 0);  // rouge2
  delay(2000);
  
  digitalWrite(2, 0);  // vert1
  digitalWrite(3, 0);  // orange1
  digitalWrite(4, 1);  // rouge1
  digitalWrite(5, 0);  // vert2
  digitalWrite(6, 1);  // orange2
  digitalWrite(7, 0);  // rouge2
  delay(2000);
  
}




Amélioration du code

feu-tricolore


Nous allons améliorer le code :

  • Utilisation de constante pour les feux
  • Utilisation de temporisation entre chaque phase

A l'initialisation, les leds sont dans les états suivants:
  • Vert1 = allumé
  • Orange1 = éteint
  • Rouge1 = éteint
  • Vert2 = éteint
  • Orange2 = éteint
  • Rouge2 = allumé

Les étapes:
  • Phase 1 - Rouge1 éteint, Vert1 et Rouge2 allumés  // Début du cycle
  • Phase 2 - Temporisation
  • Phase 3 - Vert1 éteint , Orange1 et Rouge2 allumés
  • Phase 3 - Temporisation
  • Phase 4 - Orange1 éteint, Rouge1 et Rouge2 allumés  // les 2 feux rouges sont allumés = SECURITE
  • Phase 5 - Temporisation
  • Phase 6 - Rouge2 éteint, Rouge1 et Vert2 allumés
  • Phase 7 - Temporisation
  • Phase 8 - Vert2 éteint, Rouge1 et Orange2 allumés
  • Phase 9 - Temporisation
  • Phase 10 - Orange2 éteint, Rouge1 et Rouge2 allumés  // les 2 feux rouges sont allumés = SECURITE
  • Phase 11 - Temporisation
  • On boucle .... // Retour à la phase 1



Le code amélioré

feux-tricolore-code-amélioré

  // Initialisation des variables
    const byte Vert1 = 2 ;
    const byte Orange1 = 3 ;
    const byte Rouge1 = 4 ;
    const byte Vert2 = 5 ;
    const byte Orange2 = 6 ;
    const byte Rouge2 = 7 ;
     
    //Tempo
    const long TempoRougeSeul = 2000;  // Tempo feu rouge seul
    const long TempoVert = 2000;  // Tempo feu vert
    const long TempoOrange = 2000;  // Tempo feu orange
     
    // Initialisation des pin 2 à  7 en OUTPUT
    void setup () {
      pinMode (Vert1, OUTPUT) ;
      pinMode (Orange1, OUTPUT) ;
      pinMode (Rouge1, OUTPUT) ;
      pinMode (Vert2, OUTPUT) ;
      pinMode (Orange2, OUTPUT) ;
      pinMode (Rouge2, OUTPUT) ;
    }
     
    void loop () {
      // Etat des leds au départ
      digitalWrite (Vert1, 1) ;  // Si Vert1 = 0 et Rouge2 = 0, 
      digitalWrite (Orange1, 0) ;  // ajouter les deux lignes
      digitalWrite (Rouge1, 0) ;  // Allumage de Vert1 et Rouge2
      digitalWrite (Vert2, 0) ;
      digitalWrite (Orange2, 0) ;
      digitalWrite (Rouge2, 1) ;  // .........
      
      // Allumage de Vert1 et Rouge2
      //digitalWrite (Vert1, 1) ;
      //digitalWrite (Rouge2, 1) ;

     
      // Début du cycle
      // Feu n°1
      delay (TempoVert) ; // Tempo
      digitalWrite (Vert1, 0) ; // Vert1 éteint
      digitalWrite (Orange1, 1) ; // Orange1 allumé
      delay (TempoOrange) ;  // Tempo
      digitalWrite (Orange1, 0) ; // Orange1 éteint
      digitalWrite (Rouge1, 1) ; // Rouge1 allumé
      delay (TempoRougeSeul) ; // Tempo
     
      // Feu n°2
      digitalWrite (Rouge2, 0) ; // Rouge2 éteint
      digitalWrite (Vert2, 1) ; // Vert2 allumé
      delay (TempoVert) ; // Tempo
      digitalWrite (Vert2, 0) ; // Vert2 éteint
      digitalWrite (Orange2, 1) ; // Orange2 allumé
      delay (TempoOrange) ; // Tempo
      digitalWrite (Orange2, 0) ; // Orange2 éteint
      digitalWrite (Rouge2, 1) ; // Rouge2 allumé
      delay (TempoRougeSeul) ; // Tempo
      digitalWrite (Vert1, 1) ; // Vert1 allumé
     
      // On boucle ....
    }