Programmer un micro:bit
Découvre l'informatique embarquée en programmant une carte micro:bit. Crée un dé électronique, un thermomètre, une boussole ou un jeu !
Objectifs pédagogiques
- Comprendre ce qu'est un système embarqué
- Découvrir les capteurs et actionneurs du micro:bit
- Programmer en Python ou en blocs (MakeCode)
- Lire des données de capteurs (température, accéléromètre, boussole)
- Afficher des informations sur la matrice LED
Prérequis
- Une carte micro:bit (ou le simulateur en ligne)
- Un câble micro-USB pour connecter le micro:bit
- L'éditeur MakeCode (makecode.microbit.org) ou Python Editor
- Aucune connaissance préalable requise (MakeCode) ou bases Python
Découvrir le micro:bit
Matrice LED 5x5
25 LEDs pour afficher des images, du texte défilant ou des animations.
Capteur de température
Mesure la température ambiante (approximative car proche du processeur).
Boussole (magnétomètre)
Détecte le champ magnétique terrestre pour indiquer le Nord.
Accéléromètre
Détecte les mouvements : secousses, inclinaison, chute libre.
Projet 1 : Dé électronique
Quand on secoue le micro:bit, il affiche un nombre aléatoire entre 1 et 6.
from microbit import *
import random
# Images pour chaque face du dé
faces = {
1: Image("00000:00000:00900:00000:00000"),
2: Image("90000:00000:00000:00000:00009"),
3: Image("90000:00000:00900:00000:00009"),
4: Image("90009:00000:00000:00000:90009"),
5: Image("90009:00000:00900:00000:90009"),
6: Image("90009:00000:90009:00000:90009")
}
# Boucle principale
while True:
# Détecter une secousse
if accelerometer.was_gesture("shake"):
# Animation de lancement
for i in range(10):
display.show(str(random.randint(1, 6)))
sleep(100)
# Résultat final
resultat = random.randint(1, 6)
display.show(faces[resultat])
sleep(50)Comment ça marche : L'accéléromètre détecte quand on secoue le micro:bit. On génère alors un nombre aléatoire et on affiche la face correspondante.
Projet 2 : Thermomètre
Affiche la température ambiante et change la couleur selon la chaleur.
from microbit import *
# Icônes de température
chaud = Image("09090:99999:99999:09990:00900") # Soleil
froid = Image("00900:09990:00900:09990:00900") # Flocon
while True:
# Lire la température
temp = temperature()
# Afficher la température
display.scroll(str(temp) + "C")
# Afficher une icône selon la température
if temp > 25:
display.show(chaud)
elif temp < 15:
display.show(froid)
else:
display.show(Image.HAPPY)
# Attendre 5 secondes avant la prochaine mesure
sleep(5000)Note : La température mesurée peut être plus élevée que la température réelle car le capteur est proche du processeur qui chauffe.
Projet 3 : Boussole
Affiche une flèche qui pointe toujours vers le Nord.
from microbit import *
# Calibrer la boussole au démarrage
compass.calibrate()
# Flèches pour chaque direction
fleches = {
"N": Image.ARROW_N,
"NE": Image.ARROW_NE,
"E": Image.ARROW_E,
"SE": Image.ARROW_SE,
"S": Image.ARROW_S,
"SW": Image.ARROW_SW,
"W": Image.ARROW_W,
"NW": Image.ARROW_NW
}
def get_direction(angle):
"""Convertit un angle en direction cardinale"""
directions = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]
index = round(angle / 45) % 8
return directions[index]
while True:
# Lire l'angle de la boussole (0-360°)
angle = compass.heading()
# Obtenir la direction
direction = get_direction(angle)
# Afficher la flèche correspondante
display.show(fleches[direction])
# Appuyer sur A pour voir l'angle exact
if button_a.was_pressed():
display.scroll(str(angle) + " deg")
sleep(100)Projet 4 : Compteur de pas
Compte les pas en détectant les secousses légères.
from microbit import *
pas = 0
dernier_z = accelerometer.get_z()
seuil = 500 # Sensibilité
while True:
# Lire l'accélération sur l'axe Z
z = accelerometer.get_z()
# Détecter un pas (changement brusque)
if abs(z - dernier_z) > seuil:
pas += 1
display.show(Image.HEART)
sleep(200)
display.clear()
dernier_z = z
# Bouton A : afficher le nombre de pas
if button_a.was_pressed():
display.scroll(str(pas) + " pas")
# Bouton B : réinitialiser
if button_b.was_pressed():
pas = 0
display.show(Image.YES)
sleep(500)
display.clear()
sleep(50)Projet 5 : Niveau à bulle
Affiche un point qui se déplace selon l'inclinaison du micro:bit.
from microbit import *
def map_value(value, in_min, in_max, out_min, out_max):
"""Convertit une valeur d'une plage à une autre"""
return (value - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
while True:
# Lire l'accélération sur X et Y
x = accelerometer.get_x()
y = accelerometer.get_y()
# Convertir en position sur l'écran (0-4)
pos_x = map_value(x, -1024, 1024, 0, 4)
pos_y = map_value(y, -1024, 1024, 0, 4)
# Limiter aux bords de l'écran
pos_x = max(0, min(4, pos_x))
pos_y = max(0, min(4, pos_y))
# Effacer et afficher le point
display.clear()
display.set_pixel(pos_x, pos_y, 9)
# Si centré, afficher en vert (OK)
if pos_x == 2 and pos_y == 2:
display.show(Image.YES)
sleep(500)
sleep(50)Critères d'évaluation
| Critère | Points |
|---|---|
| Programme fonctionnel sur micro:bit ou simulateur | 4 pts |
| Utilisation d'au moins un capteur | 3 pts |
| Affichage sur la matrice LED | 3 pts |
| Interaction utilisateur (boutons ou gestes) | 3 pts |
| Code commenté et structuré | 3 pts |
| Originalité et personnalisation | 4 pts |
| Total | 20 pts |
Pour aller plus loin
Variante 1 : Jeu Pierre-Feuille-Ciseaux
Deux micro:bits communiquent par radio pour jouer ensemble.
Variante 2 : Station météo
Ajoute un capteur externe (humidité, pression) avec des câbles.
Variante 3 : Robot
Connecte des servomoteurs pour créer un robot téléguidé.
Variante 4 : Instrument de musique
Crée un instrument qui joue des notes selon l'inclinaison.
