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 ....
    }


Personnaliser

Google Analytics

Google Analytics est un service utilisé sur notre site Web qui permet de suivre, de signaler le trafic et de mesurer la manière dont les utilisateurs interagissent avec le contenu de notre site Web afin de l’améliorer et de fournir de meilleurs services.

Facebook

Notre site Web vous permet d’aimer ou de partager son contenu sur le réseau social Facebook. En l'utilisant, vous acceptez les règles de confidentialité de Facebook: https://www.facebook.com/policy/cookies/

Twitter

Les tweets intégrés et les services de partage de Twitter sont utilisés sur notre site Web. En activant et utilisant ceux-ci, vous acceptez la politique de confidentialité de Twitter: https://help.twitter.com/fr/rules-and-policies/twitter-cookies