Objectif du projet :
Programmer un feu tricolore intelligent avec bouton piéton qui :
- Fonctionne en cycle automatique (rouge → vert → orange)
- Réagit à l'appui sur le bouton piéton
- Intègre des temporisations réalistes
- Peut être étendu avec des fonctionnalités supplémentaires
1. Présentation du projet
Vidéo de présentation de la micro:bit et du feu tricolore
Vidéo tutorielle présentant le kit du du feu tricolore et de la carte micro:bit (source: La Digitale)
Composants utilisés
| Composant micro:bit | Rôle dans le projet |
|---|---|
| Matrice LED 5x5 | Affichage des feux (haut=rouge, milieu=orange, bas=vert) |
| Bouton A | Bouton d'appel piéton |
| Haut-parleur | Signal sonore lorsque le feu piéton passe au vert (optionnel) |
| Accéléromètre | Détection des secousses pour mode test (prolongement possible) |
2. Programme complet
Version de base
from microbit import *
# Définition des images pour les feux
feu_rouge = Image("99999:00000:00000:00000:00000")
feu_orange = Image("00000:99900:00000:00000:00000")
feu_vert = Image("00000:00000:00000:00000:99999")
# États possibles
ROUGE = 0
ORANGE = 1
VERT = 2
# Variables du programme
etat = ROUGE
demande_pieton = False
while True:
# 1. Vérification de l'appui sur le bouton piéton
if button_a.was_pressed():
demande_pieton = True
# 2. Machine à états du feu tricolore
if etat == ROUGE:
display.show(feu_rouge)
if demande_pieton:
sleep(3000) # Délai de sécurité
etat = ORANGE
demande_pieton = False
else:
sleep(2000) # Temps rouge normal
elif etat == ORANGE:
display.show(feu_orange)
sleep(1000) # Temps orange fixe
etat = VERT
elif etat == VERT:
display.show(feu_vert)
sleep(3000) # Temps vert
etat = ROUGE
Fonctionnement : Ce programme implémente une machine à états simple avec trois états (rouge, orange, vert) et une gestion du bouton piéton.
Version améliorée avec signal sonore
from microbit import *
import music
# Images personnalisées
feux = [
Image("99999:00000:00000:00000:00000"), # Rouge
Image("00000:99900:00000:00000:00000"), # Orange
Image("00000:00000:00000:00000:99999") # Vert
]
etat = 0 # Commence à rouge
attente_pieton = False
while True:
# Gestion du bouton piéton
if button_a.was_pressed() and not attente_pieton:
attente_pieton = True
# Machine à états
if etat == 0: # État rouge
display.show(feux[0])
if attente_pieton:
sleep(3000) # Délai sécurité véhicules
etat = 1 # Passer à orange
attente_pieton = False
else:
sleep(2000 + randint(0, 3000)) # Temps aléatoire
elif etat == 1: # État orange
display.show(feux[1])
sleep(1000)
etat = 2 # Passer à vert
elif etat == 2: # État vert
display.show(feux[2])
music.play(['C4:1'], wait=False) # Bip sonore
sleep(3000)
etat = 0 # Retour à rouge
Améliorations : Ajout d'un signal sonore, code plus structuré avec liste d'images, temps d'attente aléatoire en mode normal.
3. Explications détaillées
Concepts clés
Machine à états : Notre feu tricolore peut être dans 3 états distincts (rouge, orange, vert) avec des transitions bien définies entre eux.
Programmation événementielle : Le programme réagit à l'événement "appui sur le bouton" sans bloquer l'exécution principale.
Temporisation : Les délais entre les changements d'état sont gérés par la fonction sleep().
Fonctions importantes
| Fonction | Description | Exemple |
|---|---|---|
button_a.was_pressed() |
Détecte si le bouton A a été pressé | if button_a.was_pressed(): |
display.show() |
Affiche une image sur la matrice LED | display.show(feu_rouge) |
sleep() |
Pause l'exécution (en ms) | sleep(1000) # 1 seconde |
music.play() |
Joue un son ou une mélodie | music.play(['C4:1']) |
4. Prolongements possibles
Idées d'amélioration
- Compte à rebours : Afficher le temps restant avant changement d'état
- Mode nuit : Faire clignoter le feu orange entre minuit et 6h
- Feu piéton : Ajouter un deuxième feu avec bonhomme rouge/vert
- Connexion physique : Brancher de vrais feux LED via les broches GPIO
- Détection de panne : Simuler une panne aléatoire avec secousse
Exemple de code pour le compte à rebours
# À ajouter dans l'état VERT
for secondes in range(3, 0, -1):
display.show(str(secondes))
sleep(1000)
5. Ressources complémentaires
- Guide officiel micro:bit - Documentation complète
- MakeCode en ligne - Simulateur et tutoriels
- Introduction à la micro:bit - Page d'introduction du site
- Premiers pas en programmation - Bases de MakeCode
- Vidéo tutorielle - Présentation des fonctionnalités