Les feux de chantier

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 Stop:Bit et un feu imprimé en 3D

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…

Publicité

2 réflexions sur “Les feux de chantier

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

    Aimé par 1 personne

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s