Le contrôleur de feux tricolores Arduino est un projet idéal et amusant pour les débutants, réalisable en moins d'une heure. Découvrez comment le construire étape par étape, avec une version basique et des variantes avancées.
Préférez une vidéo ? Consultez notre tutoriel vidéo dédié.
Outre une carte Arduino standard (comme l'Uno), vous aurez besoin de :
La plupart des cartes Arduino conviennent si elles disposent de suffisamment de broches numériques. Consultez notre guide d'achat Arduino si nécessaire. Ces composants sont souvent inclus dans un kit de démarrage Arduino.
Commencez par un circuit simple. Voici le schéma :

Connectez l'anode (patte longue) de chaque LED aux broches numériques 8, 9 et 10 (via une résistance de 220 ohms). Reliez les cathodes (patte courte) à la masse (GND) de l'Arduino.
Définissez des variables pour nommer les broches :
int rouge = 10;
int jaune = 9;
int vert = 8;
Dans la fonction setup(), configurez les broches en sortie :
void setup() {
pinMode(rouge, OUTPUT);
pinMode(jaune, OUTPUT);
pinMode(vert, OUTPUT);
}
Ajoutez ensuite la logique principale dans loop() et la fonction changeLights() :
void loop() {
changeLights();
delay(15000);
}
void changeLights() {
// Vert éteint, jaune allumé 3s
digitalWrite(vert, LOW);
digitalWrite(jaune, HIGH);
delay(3000);
// Jaune éteint, rouge allumé 5s
digitalWrite(jaune, LOW);
digitalWrite(rouge, HIGH);
delay(5000);
// Rouge + jaune 2s
digitalWrite(jaune, HIGH);
delay(2000);
// Rouge et jaune éteints, vert allumé
digitalWrite(jaune, LOW);
digitalWrite(rouge, LOW);
digitalWrite(vert, HIGH);
delay(3000);
}
Chargez ce code (sélectionnez la bonne carte et le port dans Outils > Carte et Outils > Port). Votre feu change toutes les 15 secondes. Voici une démo accélérée :

La fonction changeLights() simule un cycle réel : vert > jaune > rouge + jaune > vert. Appelée en boucle avec un délai de 15 secondes, elle tourne indéfiniment. Utilisez digitalWrite() pour allumer/éteindre (HIGH/LOW) et delay() pour les pauses.
Ajoutez un bouton-poussoir pour activer le changement manuellement :

Le circuit des feux reste identique. Connectez le bouton à la broche 12 avec une résistance pull-down de 10 kΩ pour éviter les états flottants et faux déclenchements.
Ajoutez la variable bouton :
int bouton = 12;
Dans setup() :
pinMode(bouton, INPUT);
digitalWrite(vert, HIGH); // État initial : vert
Remplacez loop() par (avec anti-rebond) :
void loop() {
if (digitalRead(bouton) == HIGH) {
delay(15); // Anti-rebond
if (digitalRead(bouton) == HIGH) {
changeLights();
delay(15000);
}
}
}
Démo accélérée :

Pour une intersection, dupliquez les feux sur les broches 11, 12, 13 :

Variables :
// Feux 1
int rouge1 = 10;
int jaune1 = 9;
int vert1 = 8;
// Feux 2
int rouge2 = 13;
int jaune2 = 12;
int vert2 = 11;
setup() :
void setup() {
pinMode(rouge1, OUTPUT); pinMode(jaune1, OUTPUT); pinMode(vert1, OUTPUT);
pinMode(rouge2, OUTPUT); pinMode(jaune2, OUTPUT); pinMode(vert2, OUTPUT);
}
loop() basique. Mettez à jour changeLights() pour alterner :
void changeLights() {
// Deux jaunes
digitalWrite(vert1, LOW); digitalWrite(jaune1, HIGH);
digitalWrite(jaune2, HIGH);
delay(5000);
// Feux 1 rouge, Feux 2 vert
digitalWrite(jaune1, LOW); digitalWrite(rouge1, HIGH);
digitalWrite(jaune2, LOW); digitalWrite(rouge2, LOW); digitalWrite(vert2, HIGH);
delay(5000);
// Deux jaunes
digitalWrite(jaune1, HIGH); digitalWrite(jaune2, HIGH);
digitalWrite(vert2, LOW);
delay(3000);
// Feux 1 vert, Feux 2 rouge
digitalWrite(vert1, HIGH); digitalWrite(jaune1, LOW); digitalWrite(rouge1, LOW);
digitalWrite(jaune2, LOW); digitalWrite(rouge2, HIGH);
delay(5000);
}
Démo accélérée :

Maîtrisez maintenant les LED et boutons ! Étendez à un carrefour à 4 voies ou ajoutez des feux piétons. Explorez notre contrôleur MIDI DIY, un robot Arduino avec Xod, ou le codage avec VS Code et PlatformIO.
Crédit image : androsvector/Shutterstock
[]