Dans le précédent article, nous avons vu comment programmer un feu tricolore. Et si nous compliquions un peu les choses. Vous connaissez les feux de chantier ?
Ce sont des feux mobiles qui sont mis en place en cas de circulation alternée, à cause de travaux. Il sont synchronisés et communiquent par radio. Je vous propose donc d’utiliser 2 Micro:Bit synchronisés en Bluetooth pour simuler des feux de chantier.

Le branchement est exactement le même, mais avec 2 Micro:Bit.

Le code des 2 Micro:Bit sera différent car il faut forcement que l’un des 2 gère la séquence d’allumage (Vert, Orange, Rouge) et envoie les instructions à l’autre feu pour qu’il puisse afficher la séquence correspondante. Je vous conseille donc (si possible) d’utiliser des Micro:Bit de couleurs différentes pour mieux les différencier. Voila la séquence d’allumage des feux.
- Feu 1 vert, Feu 2 rouge (5 secondes)
- Feu 1 orange, Feu 2 rouge (1 seconde)
- Feu 1 rouge, Feu 2 vert (5 secondes)
- Feu 1 rouge, Feu 2 orange (1seconde)
Micro:Bit n°1 (l’émetteur)

# Appel de la bibliothèque "microbit"
from microbit import *
import radio
# Fonctions
def Eteindre_tout():
pin0.write_digital(0)
pin1.write_digital(0)
pin2.write_digital(0)
def Feu_rouge():
Eteindre_tout()
pin0.write_digital(1)
def Feu_orange():
Eteindre_tout()
pin1.write_digital(1)
def Feu_vert():
Eteindre_tout()
pin2.write_digital(1)
# Programme
radio.config(group=1)
radio.on()
# Boucle infinie
while True:
# Feu 1 vert
Feu_vert()
# Feu 2 rouge
radio.send('0')
# Attends 5 secondes
sleep(5000)
# Feu 1 orange
Feu_orange()
# Attends 1 seconde
sleep(1000)
# Feu 1 rouge
Feu_rouge()
# Feu 2 vert
radio.send('2')
# Attends 5 secondes
sleep(5000)
# Feu 2 orange
radio.send('1')
sleep(1000)
Micro:Bit n°2 (le récepteur)

# Appel de la bibliothèque "microbit"
from microbit import *
import radio
# Fonctions
def Eteindre_tout():
pin0.write_digital(0)
pin1.write_digital(0)
pin2.write_digital(0)
def Feu_rouge():
Eteindre_tout()
pin0.write_digital(1)
def Feu_orange():
Eteindre_tout()
pin1.write_digital(1)
def Feu_vert():
Eteindre_tout()
pin2.write_digital(1)
# Programme
radio.config(group=1)
radio.on()
# Boucle infinie
while True:
# Réception des messages
message = radio.receive()
# interpretation du message
if message == '0':
# Feu 2 rouge
Feu_rouge()
elif message == '1':
# Feu 2 orange
Feu_orange()
elif message == '2':
# Feu 2 vert
Feu_vert()
Exercice bonus
Souvent, sur les vrais feux de chantier, il y a en plus un compte à rebours pour faire patienter l’automobiliste en lui indiquant dans combien de temps le feu passera au vert. Si vous souhaitez aller plus loin, vous pouvez utiliser la matrice de LED pour indiquer sur chaque Micro:Bit, le nombre de secondes avant qu’il passe au vert. Amusez-vous bien…
Sur de vrais feux, c’est un poil plus compliqué. Avec notamment des sécurités logicielles et matérielles pour éviter par exemple d’avoir plusieurs feux laissant passer les voitures simultanément. Une mesure de courant pour détecter si le rouge est grillé. Une sécu anti-plantage qui remet à zéro en permanence un compteur hard, si ce zéro est atteint les système passe au rouge clignotant matériel. J’ai débuté l’informatique par la programmation de ce genre de système en 1977 avec des 8080 puis des 8085 en assembleur. Passé à autre chose depuis longtemps mais nostalgie.
J’aimeAimé par 1 personne
Merci pour ce commentaire, c’est très intéressant de savoir comment ça se passe « en vrai » et ça donne des pistes pour compliquer un peu l’exercice.
J’aimeJ’aime