Feu tricolore et Micro:Bit

C’est un grand classique dans le monde des micro-contrôleurs de type Arduino, mais aussi des mini ordinateurs équipés de GPIO, comme le Raspberry Pi. C’est normal, puisse qu’en général, on débute en faisant clignoter une LED. Alors, apprendre à contrôler 3 LED à travers un exercice pratique, c’est souvent la suite logique.

Branchement

Je vous propose donc de reproduire le fonctionnement d’un feu tricolore tricolore avec le Micro:Bit. Pour ce branchement, vous avez besoin de 3 LED (rouge, orange et verte). Les plus petites pattes (des LED) sont reliées à une résistance de 220 Ω (environ) et à la borne GND. En ce qui concerne les grandes pattes, la LED rouge est reliée à la borne P0 du Micro:Bit, la LED orange à la borne P1 et la LED verte à la borne 2.

Un branchement très simple qui ne demande que quelques composants de base.

Si vous avez accès à une imprimante 3D, vous pouvez aussi fabriquer un feu tricolore un peu plus réaliste. Les fichiers sont disponibles sur Thingiverse.

Mais le feu tricolore est tellement courant qu’il existe maintenant des modules déjà tout fait.

Cependant, le module le plus adapté (au Micro:Bit) est certainement le « STOP:bit » de Kitronik. Il suffit de le fixer (avec les 5 vis fournies) et vous n’avez plus à vous en préoccuper. Aucun risque de mauvais branchement, de faux contacts ou de court-circuit. Ce qui est beaucoup plus pratique pour animer un atelier avec des enfants.

Ce modèle m’a gentiment été offert par Françoise et Dominique MEURISSE de la boutique MCHobby (et du blog du même nom). Alors, si vous voulez encourager une entreprise familiale qui n’exploite pas son personnel, faites vos achats chez eux. Surtout que vous pouvez bénéficier des conseils de Dominique, un vrai Maker qui teste et sélectionne avec soin les produits qu’il vend (comme mon livre par exemple).

Le feu à 3 états

C’est le système utilisé en France (mais également dans d’autres pays). Une seule couleur est affichée à la fois :

  • Feu vert, les voitures peuvent rouler.
  • Feu orange (ou jaune), les voitures doivent s’arrêter si c’est possible.
  • Feu rouge, les voitures doivent s’arrêter.

Le feu orange s’allume beaucoup moins longtemps que les feux vert et rouge. À part ça, vous pouvez choisir n’importe quelle durée. Mais pour vérifier rapidement le fonctionnement du programme, je vous conseille de ne pas dépasser les 10 secondes. Si vous savez déjà faire clignoter une LED ce programme ne devrait pas vous sembler très compliqué. Mais, il en existe plusieurs variantes :

Programme de base

A chaque étape, on indique l’état des 3 LED, c’est simple et efficace

# Appel de la bibliothèque "microbit"
from microbit import *
# Boucle infinie
while True:
    # Feu vert
    pin0.write_digital(0)
    pin1.write_digital(0)
    pin2.write_digital(1)
    # Attends 5 secondes
    sleep(5000)
    # Feu orange
    pin0.write_digital(0)
    pin1.write_digital(1)
    pin2.write_digital(0)
    # Attends 1 seconde
    sleep(1000)
    # Feu rouge
    pin0.write_digital(1)
    pin1.write_digital(0)
    pin2.write_digital(0)
    # Attends 5 secondes
    sleep(5000)

Version optimisée

Il est possible d’optimiser le code, en s’assurant (au début du programme) que toutes les LED sont éteintes et ensuite en ne modifiant que les LED qui doivent l’être. Ce code est certainement plus élégant, car il évite de demander inutilement l’extinction d’une LED déjà éteinte. Mais pour un programme aussi simple (par rapport à la puissance de calcul du Micro:Bit), ça n’apporte absolument rien.

# Appel de la bibliothèque "microbit"
from microbit import *
pin1.write_digital(0)
pin2.write_digital(0)
# Boucle infinie
while True:
    # Feu vert
    pin0.write_digital(0)
    pin2.write_digital(1)
    # Attends 5 secondes
    sleep(5000)
    # Feu orange
    pin2.write_digital(0)
    pin1.write_digital(1)
    # Attends 1 seconde
    sleep(1000)
    # Feu rouge
    pin1.write_digital(0)
    pin0.write_digital(1)
    # Attends 5 secondes
    sleep(5000)

Une fonction pour simplifier le programme

Une autre solution (d’une approche différente) est d’utiliser une fonction pour éteindre automatiquement toutes les LED et ensuite, allumer seulement la LED désirée.

Les fonctions sont très utiles pour alléger le programme principal et faciliter la lecture, la compréhension et la modification du code. Cela évite aussi de commettre des erreurs en recopiant machinalement des blocs d’instructions (ou des paragraphes).

# Appel de la bibliothèque "microbit"
from microbit import *
# Fonction "Eteindre_tout"
def Eteindre_tout():
    pin0.write_digital(0)
    pin1.write_digital(0)
    pin2.write_digital(0)
# Programme
# Boucle infinie
while True:
    # Feu vert
    Eteindre_tout()
    pin2.write_digital(1)
    # Attends 5 secondes
    sleep(5000)
    # Feu orange
    Eteindre_tout()
    pin1.write_digital(1)
    # Attends 1 seconde
    sleep(1000)
    # Feu rouge
    Eteindre_tout()
    pin0.write_digital(1)
    # Attends 5 secondes
    sleep(5000)

Encore plus de fonctions

Nous pouvons aller plus loin et créer une fonction pour chaque feu. Vous ne trouvez pas le programme beaucoup plus clair ?

# Appel de la bibliothèque "microbit"
from microbit import *
# 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
# Boucle infinie
while True:
    # Feu vert
    Feu_vert()
    # Attends 5 secondes
    sleep(5000)
    # Feu orange
    Feu_orange()
    # Attends 1 seconde
    sleep(1000)
    # Feu rouge
    Feu_rouge()
    # Attends 5 secondes
    sleep(5000)

Ce ne sont que quelques exemples. C’est à vous choisir votre style de code en fonction de votre logique de pensée. Le plus important est de réfléchir et de trouver une solution (qui fonctionne).

Le feu à 4 états

Dans certains pays (comme la Suisse, l’Allemagne ou le Royaume-uni), le feu tricolore passe par 4 étapes :

  • Feu vert, les voitures peuvent rouler.
  • Feu jaune (ou orange), les voitures doivent s’arrêter si c’est possible.
  • Feu rouge, les voitures doivent s’arrêter.
  • Feux rouge et orange (ou jaune) allumés en même temps, les voitures se préparent à démarrer.

Mais cette fois ci, je ne vais pas vous fournir le programme. Vous avez tous les éléments pour le faire vous-même. Alors à vous de jouer. Codez, testez, débuggez, améliorez et surtout amusez-vous bien…

Cet article a été publié en juillet 2019 dans le magazine Officiel PC – Raspberry Pi (N°11).


2 réflexions sur “Feu tricolore et Micro:Bit

Répondre

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 )

Photo Google

Vous commentez à l'aide de votre compte Google. 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