Le TCS34725 est un capteur de couleur. Sur la compétition Rescue Line, il sert principalement à :
suivre la ligne noire
repérer les carrés verts pour savoir quand tourner à droite ou à gauche
Comment “voit” le capteur ?
Il éclaire le sol
Le capteur possède quatre petites LEDs blanches.
Elle éclaire le sol juste en dessous du robot
La lumière rebondit sur le sol et revient vers le capteur
Un sol clair renvoie beaucoup de lumière
Un sol foncé (ligne noire) renvoie peu de lumière
Il sépare la lumière en couleurs
À l’intérieur du capteur, il y a 4 détecteurs :
🔴 Rouge (R)
🟢 Vert (G)
🔵 Bleu (B)
⚪ Luminosité totale (Clear)
Pour chaque couleur, le capteur donne un nombre.
Ces nombres sont envoyés au microcontrôleur (ex : Raspberry Pico, mBot, etc.).
Le multiplexeur I2C
Pourquoi on en a besoin avec plusieurs capteurs de couleur ?
Rappel : c’est quoi le bus I2C ?
Le bus I2C, c’est comme une route avec quatres fils :
SDA : pour envoyer et recevoir les données
SCL : pour donner le rythme (l’horloge)
Tous les capteurs sont branchés sur la même route et parlent avec le microcontrôleur.
Avec un bus I2C ont peut dialoguer avec plusieurs dispositifs sur le même bus.
Chaque capteur a une adresse
Sur cette route, chaque capteur a une adresse, comme un numéro de maison.
Exemple :
Capteur température : adresse 0x48
Capteur distance : adresse 0x29
Capteur couleur TCS34725 : adresse 0x29
Quand le microcontrôleur veut parler à un capteur, il dit :
« Je parle au capteur numéro 0x29 »
Le problème avec plusieurs capteurs identiques
Dans notre robot, on utilise plusieurs capteurs de couleur identiques :
gauche
centre
droite
Et ils ont tous la même adresse I2C
Résultat :
Le microcontrôleur dit : « Capteur 0x29, réponds ! »
Tous répondent en même temps
Ça crée un conflit → le bus ne fonctionne plus
La solution : le multiplexeur I2C
Un multiplexeur I2C (ex : TCA9548A) est comme :
un aiguillage ou un feu de circulation pour le bus I2C
Il permet de choisir quel capteur est connecté au bus à un instant donné.
Comment fonctionne le multiplexeur ?
Le multiplexeur est lui-même un appareil I2C
Il a sa propre adresse
Le microcontrôleur peut lui parler
Il possède plusieurs “canaux” de 1 à 8 canaux
Par exemple :
canal 0
canal 1
canal 2
…
jusqu’à 8 canaux
Chaque canal peut avoir :
un capteur
ou même plusieurs capteurs (s’ils ont des adresses différentes)
On ouvre un canal à la fois
Le microcontrôleur dit au multiplexeur :
« Ouvre le canal 2 »
Résultat :
Seul le capteur branché sur le canal 2 est visible
Les autres sont déconnectés temporairement
Pour programmer, le capteur TCS34725 utilise la librairie class tcs34725.py à télécharger sur le microcontroleur :
Dans ton programme importe ces bibliothèques :
from machine import I2C
import time
from tcs34725 import TCS34725
Recherche les adresses sur le bus i2c :
from machine import I2C
import time
from tcs34725 import TCS34725
print("Initialisation I2C...")
i2c = I2C(0)
print("Scan I2C en cours...")
devices = i2c.scan()
print("Adresses trouvées:", [hex(d) for d in devices])
0x29 : capteur de couleur
0x72 : multiplexeur i2c
Exemple d’un programme de test pour lire les valeurs de deux capteurs sur les port 0 et 1 :
from machine import I2C
import time
from tcs34725 import TCS34725
print("Initialisation I2C...")
i2c = I2C(0)
print("Scan I2C en cours...")
devices = i2c.scan()
print("Adresses trouvées:", [hex(d) for d in devices])
# Initialisation du capteur
# Si vous n'utilisez PAS de multiplexeur, laissez multiplexer_addr=None
# Si vous en utilisez un, changez multiplexer_addr=0x70 (ou autre) et le port=0-7
ADDRESS_MULTIPLEXER = const(0x72)
try:
print("Initialisation TCS34725...")
#sensor = TCS34725(i2c)
# Pour un multiplexeur:
sensor01 = TCS34725(i2c, ADDRESS_MULTIPLEXER, 0)
sensor02 = TCS34725(i2c, ADDRESS_MULTIPLEXER, 1)
print("Capteur trouvé !")
# Configuration optionnelle
sensor01.integration_time(50) # 50ms (plus rapide mais moins précis que 2.4ms * n)
sensor01.gain(4) # Gain 4x (1, 4, 16, 60)
sensor02.integration_time(50)
sensor02.gain(4)
while True:
# Lecture brute
r, g, b, c = sensor01.read(raw=True)
# Lecture interprétée
temp, lux = sensor01.read(raw=False) # Note: refait une lecture
print(f"R:{r} G:{g} B:{b} C:{c} | Temp:{temp}K Lux:{lux}")
gray01 = sensor01.read_grayscale()
gray02 = sensor02.read_grayscale()
print("Read Gray : ", gray01)
# Détection simple couleur
if sensor01.is_red():
print(" >> ROUGE détecté !")
elif sensor01.is_green():
print(" >> VERT détecté !")
elif sensor01.is_blue():
print(" >> BLEU détecté !")
time.sleep(1)
except RuntimeError as e:
print("ERREUR FATALE:", e)
except Exception as e:
print("Erreur inattendue:", e)
Exemple initialisation capteur de couleur en direct sans le multiplexeur :
sensor = TCS34725(i2c)
Exemple initialisation capteurs couleur via le multiplexeur :
Sur la Raspberry Pi Pico, il y a une petite LED intégrée à la carte.
Cette LED est reliée à une broche spéciale.
Quand on met cette broche :
à 1 (ON) → la LED s’allume
à 0 (OFF) → la LED s’éteint
Comment la Pico contrôle la LED ?
La Pico utilise une sortie numérique.
C’est comme un interrupteur :
ON = courant qui passe
OFF = courant coupé
En MicroPython, on utilise la classe Pin.
Allumer la LED
from machine import Pin
led = Pin("LED",Pin.OUT) # LED sur la carte
led.on() # Allumer la LED
La LED s’allume
Eteindre la LED
led.off() # Éteindre la LED
La LED s’éteint
Faire clignoter la LED
from machine import Pin
from time import sleep
led = Pin("LED", Pin.OUT)
while True:
led.on() # LED allumée
sleep(1) # attendre 1 seconde
led.off() # LED éteinte
sleep(1) # attendre 1 seconde
Résultat :
la LED s’allume 1 seconde
puis s’éteint 1 seconde
et recommence en boucle
Une autre façon
from machine import Pin, Timer
# led de la carte
led=Pin("LED",Pin.OUT)
timerLed=Timer() # déclare un objet timer
def loopLed(timerLed):
led.toggle()
timerLed.init(freq=5, callback=loopLed)
La LED clignote toute seule, sans bloquer le programme.
C’est comme une alarme tous les x secondes :
tu règles l’heure
et il sonne tout seul
même si tu fais autre chose
Création du timer
Timer → pour créer un minuteur automatique
timerLed = Timer()
On crée un minuteur qui appellera une fonction tout seul.
Démarrage du timer
timerLed.init(freq=5, callback=loopLed)
freq=5 → 5 fois par seconde
callback=loopLed → appelle la fonction loopLed
La fonction appelée par le timer
def loopLed(timerLed): led.toggle()
Cette fonction :
est appelée automatiquement par le timer
change l’état de la LED à chaque appel (allumée, éteinte)
Faire clignoter une LED sur le PIN GP2
Installe une LED de couleur bleue sur le port GP2 :
from machine import Pin, Timer
# led de la carte
ledBlue=Pin(2,Pin.OUT)
timerLedBlue=Timer() # déclare un objet timer
def loopLedBlue(timerLedBlue):
ledBlue.toggle()
timerLedBlue.init(freq=1, callback=loopLedBlue)
Faire clignoter une LED bleue avec un Timer
(sans boucle while)
La LED clignote toute seule,
une fois par seconde,
sans bloquer le programme.
C’est comme un réveil :
tu règles le rythme
et il déclenche la LED tout seul
pendant que le programme fait autre chose
La LED
ledBlue = Pin(2, Pin.OUT)
La LED est branchée sur la broche 2 C’est une sortie (ON / OFF)
Allumer / éteindre une LED avec un bouton poussoir (interruption)
Quand on appuie sur le bouton poussoir :
la LED change d’état
allumée → éteinte
éteinte → allumée
Installe une LED de couleur bleue sur le port GP2 et un bouton poussoir sur GP3 :
Le code complet
from machine import Pin, Timer
# led de la carte
ledBlue = Pin(2, Pin.OUT)
button1 = Pin(3, Pin.IN, Pin.PULL_UP)
ledBlue.off()
button1.irq(
#définition de l'interruption sur la broche
handler = lambda btn1: ledBlue.toggle(),
# mode de déclenchement IRQ_RISING IRQ_FALLING
trigger = button1.IRQ_FALLING
)
Explication ligne par ligne
Importation
from machine import Pin, Timer
On utilise :
Pin → pour la LED et le bouton
La LED bleue sur GP2
ledBlue = Pin(2, Pin.OUT)
La LED est branchée sur la broche 2 C’est une sortie (ON / OFF)
Le bouton poussoir sur GP3
button1 = Pin(3, Pin.IN, Pin.PULL_UP)
Le bouton est :
sur la broche 3
configuré en entrée
avec une résistance pull-up interne
Pull-up, ça veut dire :
sans appui → niveau 1
bouton appuyé → niveau 0
Éteindre la LED au départ
ledBlue.off()
On commence avec la LED éteinte État connu = pas de surprise
Un écran OLED SSD1306 est un petit écran que l’on branche à un microcontrôleur (comme une Raspberry Pi Pico) pour afficher du texte ou des dessins sur un port I2C.
OLED, ça veut dire quoi ?
Chaque pixel s’allume tout seul
Pas besoin de rétroéclairage
Noir = pixel éteint → économie d’énergie
Taille courante :
128 × 64 pixels
128 × 32 pixels
Comment la Pico communique avec l’écran ?
La Pico communique avec l’écran grâce au bus I²C.
C’est comme une conversation :
La Pico = celui qui parle
L’écran = celui qui écoute
Les 2 fils importants du bus i2c
Fil
Rôle
SDA
Données envoyées à l’écran
SCL
Cadence (rythme de communication)
L’écran a une adresse (souvent 0x3C) pour qu’on sache à qui on parle.
Tu as déjà appris les bases de Python et tu veux aller plus loin ? Avec la micro:bit, tu vas coder des jeux, des calculatrices, des capteurs, et bien plus encore. Tu vas manipuler des boucles, des fonctions, des événements, et même des conversions de bases (binaire, hexadécimal, etc.) — des compétences utiles pour le lycée, les études, et même dans le monde professionnel. La micro:bit interagit avec le monde réel grâce à ses boutons, ses capteurs et son écran LED. Tu pourras voir le résultat de ton code en temps réel !
Partie 01 : Découverte des tables en Python
Apprendre à utiliser et manipuler des tables (ou listes) en Python, en affichant une séquence de chiffres ou d’images sur l’écran de la micro:bit.
Une table en Python s’écrit entre crochets : [ ].
Les éléments sont séparés par des virgules.
Pour afficher une image, utilise Image.NOM_DE_L_IMAGE (ex : Image.SMILE).
from microbit import *
while True:
all_images = [str(1), str(2), str(3)]
display.show(all_images, delay=300)
Modifie le programme suivant pour qu’il affiche, dans l’ordre, les chiffres de 1 à 5 sur l’écran de la micro:bit, avec un délai de 300 ms entre chaque chiffre.
Comprendre la table all_images Actuellement, la table all_images contient les chaînes de caractères "1", "2" et "3". Question : Comment faire pour qu’elle contienne les chiffres de 1 à 5 ?
Modifier la table Ajoute les chiffres manquants ("4" et "5") dans la table all_images.
Tester le programme Télécharge ton programme sur la micro:bit et vérifie que les chiffres défilent bien de 1 à 5.
Personnalisation (défis bonus !)
Défi 1 : Fais défiler les chiffres de 5 à 1.
Défi 2 : Crée ta propre table avec des motifs ou des lettres (ex : "A", "B", "C").
Défi 3 : Remplace les chiffres par des images (ex : Image.HAPPY, Image.SAD, Image.HEART).
Partie 02 : Chronomètre avec la micro:bit – booléens et gestion du temps
Découvrir le fonctionnement d’une variable booléenne (True/False) et la gestion du temps en Python, en créant un chronomètre qui se lance et s’arrête quand on touche le logo de la micro:bit
from microbit import *
import time
start = 0
triggered = False
while True:
if pin_logo.is_touched():
triggered = not triggered
while pin_logo.is_touched():
start = time.ticks_ms()
else:
if triggered :
display.scroll(int((time.ticks_ms() - start)/1000))
else:
display.show(Image.HEART)
Comprendre la variable booléenne triggered
triggered vaut False au début : le chronomètre est arrêté.
Quand on touche le logo, triggered devient True (chronomètre lancé), et redevient False si on retouche le logo (chronomètre arrêté).
Question : Que fait l’instruction triggered = not triggered ?
Lancer et arrêter le chronomètre
Si triggered est True, le chronomètre doit compter les secondes.
Si triggered est False, le chronomètre doit s’arrêter.
Afficher le temps écoulé
Utilise time.ticks_ms() pour mesurer le temps en millisecondes.
Convertis ce temps en secondes et affiche-le sur l’écran.
Tester le programme
Télécharge ton programme sur la micro:bit.
Vérifie que le chronomètre se lance et s’arrête bien en touchant le logo.
Chronomètre lancé :
Défis bonus
Défi 1 : Ajoute un bouton pour remettre le chronomètre à zéro.
Défi 2 : Lance une musique toutes les secondes.
Défi 3 : Lance une musique toutes les 10 secondes.
from microbit import *
import time
import music
start = 0
triggered = False
while True:
if pin_logo.is_touched():
triggered = not triggered
while pin_logo.is_touched():
start = time.ticks_ms()
elif button_a.is_pressed():
while button_a.is_pressed() :
start = time.ticks_ms()
else:
if triggered :
duration = int((time.ticks_ms() - start)/1000)
music.pitch(200, 50)
if (duration % 10) == 0:
music.pitch(300, 80)
display.scroll(duration)
else:
display.show(Image.HEART)
Partie 01 : Convertisseur décimal
Consigne : Écrire un programme Python qui demande à l’utilisateur de saisir un nombre entier décimal, puis affiche sa représentation en base dans une base de 2 à 36.
Exemple : Pour une conversion en base 16 (hexadécimal), si l’utilisateur saisit 10, le programme doit afficher E.
Indices pour réussir l’exercice
Comprendre par exemple pour la base 16 : En hexadécimal, on utilise les chiffres de 0 à 9 et les lettres A à F pour représenter les valeurs de 10 à 15.
Méthode de conversion : Pour convertir un nombre décimal en hexadécimal, on divise successivement le nombre par 16 et on garde le reste de chaque division.
Utilisation des restes : Chaque reste correspond à un chiffre hexadécimal, mais il faut les lire à l’envers à la fin.
Gestion des lettres : Si un reste est égal à 10, 11, 12, 13, 14 ou 15, il faut le remplacer par A, B, C, D, E ou F.
Exemple de programme :
from microbit import display, Image, button_a, pin_logo
# base donnée (2 ≤ base ≤ 36)
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
base = 16
def decimal_to_base_n(decimal_num, base):
"""
Convertit un nombre décimal (int) dans une base donnée (2 ≤ base ≤ 36).
Retourne une chaîne représentant le nombre dans la base souhaitée.
"""
if base < 2 or base > 36:
raise ValueError("La base doit être comprise entre 2 et 36.")
result = []
if decimal_num == 0:
return "0"
decimal_num = abs(decimal_num)
while decimal_num > 0:
# Obtenir le reste de la division entière du nombre par la base
remainder = decimal_num % base
result.append(digits[remainder])
decimal_num = decimal_num // base
return ''.join(reversed(result))
# Addition de deux nombres
i = 0
display.show(Image.PACMAN)
while True:
# Résultat de l'addition
if pin_logo.is_touched():
display.show("=" + decimal_to_base_n(i, base))
i = 0
while pin_logo.is_touched():
pass
# Choix d'un nombre avec le bouton A
elif button_a.is_pressed():
i = i+1
display.show(str(i))
while button_a.is_pressed() :
pass
Choisis avec le bouton A le chiffre 10 :
Convertis le chiffre 10 en décimal en base 16 avec la zone sensitive :
Partie 02 : Calculette de programmeur
Tu vas programmer une micro:bit pour qu’elle fonctionne comme une calculette permettant d’additionner deux nombres dans une base choisie (entre 2 et 36). Par exemple, si la base est 16, tu pourras additionner deux chiffres hexadécimaux (comme A + 5 = F).
Consignes
Reprend la Fonction de conversion de l’exercice précédent decimal_to_base_n(decimal_num, base) qui convertit un nombre décimal en une chaîne de caractères représentant ce nombre dans la base choisie.
Exemple : decimal_to_base_n(15, 16) doit retourner "F".
Choix de la base La variable base est déjà initialisée à 16, mais tu pourras la changer pour tester d’autres bases (entre 2 et 36).
Sélection des nombres
Appuie sur le bouton A pour incrémenter le premier nombre (i) et l’afficher.
Appuie sur le bouton B pour incrémenter le deuxième nombre (j) et l’afficher.
Les nombres doivent rester inférieurs à la base choisie.
Affichage du résultat
Touche le logo de la micro:bit pour afficher le résultat de l’addition i + j dans la base choisie, sous la forme =X (où X est le résultat de l’addition de i + J).
Réinitialisation Après chaque calcul, les nombres i et j doivent être remis à zéro.
from microbit import display, Image, button_a, button_b, pin_logo
# base donnée (2 ≤ base ≤ 36)
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
base = 16
def decimal_to_base_n(decimal_num, base):
"""
Convertit un nombre décimal (int) dans une base donnée (2 ≤ base ≤ 36).
Retourne une chaîne représentant le nombre dans la base souhaitée.
"""
if base < 2 or base > 36:
raise ValueError("La base doit être comprise entre 2 et 36.")
result = []
if decimal_num == 0:
return "0"
decimal_num = abs(decimal_num)
while decimal_num > 0:
# Obtenir le reste de la division entière du nombre par la base
remainder = decimal_num % base
result.append(digits[remainder])
decimal_num = decimal_num // base
return ''.join(reversed(result))
# Addition de deux nombres
i = 0
j = 0
display.show(Image.PACMAN)
while True:
# Résultat de l'addition
if pin_logo.is_touched():
display.show("=" + decimal_to_base_n(i+j, base))
i, j = 0, 0
while pin_logo.is_touched():
pass
# Choix d'un nombre avec le bouton A
elif button_a.is_pressed():
i = i+1 if i < base-1 else 0
display.show(digits[i])
while button_a.is_pressed() :
pass
# Choix du deuxième nombre par la touche B
elif button_b.is_pressed():
j = j+1 if j < base-1 else 0
display.show(digits[j])
while button_b.is_pressed() :
pass
Choix du premier nombre par la touche A :
Choix du deuxième nombre par la touche B :
Demande le résultat de la somme par la zone sensitive :
Bienvenue dans ce livret qui va te permettre de découvrir le monde passionnant de la programmation avec le langage Python et la carte micro:bit ! Tu vas t’amuser à apprendre les bases du codage tout en explorant les fonctionnalités géniales de la carte micro:bit. Python est un langage de programmation puissant, mais pas compliqué une fois qu’on le comprend bien. Avec lui, tu pourras créer des jeux, contrôler des robots, afficher des messages et bien plus encore sur ta carte micro:bit.
Contrôler la carte micro:bit en python :
Dans ce livret, tu vas découvrir pas à pas comment écrire des lignes de code en Python pour contrôler ta carte micro:bit. N’aie pas peur, on va commencer par les bases, et tu verras à quel point coder peut-être amusant et créatif ! Alors, prêt à plonger dans le monde magique de la programmation avec Python et la carte micro:bit ? C’est parti !
Editeur MU Python :
MU est choisi comme éditeur pour sa simplicité d’utilisation et sa convivialité, spécialement conçu pour les débutants en programmation. Son interface intuitive offre une plateforme idéale pour coder en Python pour la carte micro:bit. Avec ses fonctionnalités adaptées, MU facilite l’écriture, la modification et l’exécution du code, offrant ainsi une expérience d’apprentissage agréable et efficace dans le cadre de la robotique.
PARTIE 01 : Découverte de la MICRO:BIT et de PYTHON
Découverte de MU
Dans MU par le bouton Mode sélectionner BBC microbit :
Puis créé un nouveau fichier
Nouveau fichier
La première fonction, toute simple, de la carte micro:bit consiste à afficher un texte qui va défiler lettre par lettre sur l’écran :
from microbit import display
display.show('Bonjour comment vas-tu ?')
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? Le texte doit défilé sur la carte micro :bit.
Tu peux simuler ton code sur le site : https://create.withcode.uk/ Copie et colle ton programme Python Appuie ensuite sur les touches Ctrl+Entrée. Le simulateur démarre et affiche la carte micro:bit avec laquelle il est possible d’interagir.
PARTIE 02 : Afficher un dessin
Il est possible d’afficher des icônes sur l’écran composé d’une matrice de 5×5 LEDs en utilisant la commande display.show().
from microbit import display
display.show(Image.ANGRY)
Utilise l’icône « Vérifier » pour ton code : il te manque l’objet « Image »
from microbit import display, Image
display.show(Image.ANGRY)
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? L’icone s’affiche sur l’écran des 25 LEDs ?
Pour connaître toutes les images possibles deux solutions :
Solution 1 :
Solution 2 :
Utilise l’icône « REPL » et dans la fenêtre ouverte frappe les indications suivantes :
from microbit import *
dir(display)
dir(Image)
PARTIE 03 : Créer sa propre icône
Tu peux concevoir ta propre icône en spécifiant quelles LEDs doivent être allumées pour dessiner l’image désirée.
from microbit import display, Image
led_image = Image('00900:00900:99999:00900:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? A quoi correspond les 0 et les 9 de led_image ? Comment modifier led_image pour avoir ton icône ? Tu as la possibilité de contrôler l’intensité de chaque LED en ajustant la valeur de chacune sur une échelle de 1 à 9.
from microbit import display, Image
led_image = Image( '00900:00500:95959:00500:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? Vois-tu des différences d’intensité entre chaque LED ?
Pour créer un effet de clignotement d’une icône, tu dois afficher cette dernière pendant une durée déterminée, puis éteindre la matrice de LEDs.
from microbit import display,Image
import time
while True:
led_image = Image('00900:00900:99999:00900:00900')
display.show(led_image)
time.sleep(0.5)
display.clear()
time.sleep(0.5)
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? Comment peux-tu modifier pour un clignotement plus rapide ou plus lent ?
PARTIE 05 : Afficher un chronomètre en seconde
Afficher les aiguilles toutes les secondes.
from microbit import display,Image
import time
seconde=0
while True:
if seconde==0:
display.show(Image.CLOCK12)
if seconde==1:
display.show(Image.CLOCK1)
if seconde==2:
display.show(Image.CLOCK2)
if seconde==3:
display.show(Image.CLOCK3)
if seconde==4:
display.show(Image.CLOCK4)
if seconde==5:
display.show(Image.CLOCK5)
if seconde==6:
display.show(Image.CLOCK6)
if seconde==7:
display.show(Image.CLOCK7)
if seconde==8:
display.show(Image.CLOCK8)
if seconde==9:
display.show(Image.CLOCK9)
if seconde==10:
display.show(Image.CLOCK10)
if seconde==11:
display.show(Image.CLOCK11)
seconde=-1
time.sleep(1)
seconde+=1
Flasher pour tester puis bouton reset pour lancer
PARTIE 06 : Animer des images et jouer une note
La carte micro:bit dispose d’un buzzer. Programme le battement d’un cœur !
from microbit import *
import time
import music
# Buzzer on pin_speaker
while True:
display.show(Image.HEART)
time.sleep(1)
led_image = Image('00000:09090:09990:00900:00000')
display.show(led_image)
music.pitch(200, duration=500)
La carte micro:bit dispose de deux boutons permettant de déclencher des actions : le bouton A à gauche de la carte, le bouton B à droite. Programme en utilisant le bouton A :
from microbit import display, button_a, Image
import time
while True:
if button_a.is_pressed():
led_image = Image("40004:06060:00900:06060:40004")
display.show(led_image)
time.sleep(0.5)
display.clear()
time.sleep(0.5)
led_image = Image("33333:30003:30003:30003:33333")
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
Optimise ton code :
from microbit import display, button_a, Image
import time
led_image_a = Image("40004:06060:00900:06060:40004")
led_image = Image("33333:30003:30003:30003:33333")
while True:
if button_a.is_pressed():
display.show(led_image_a)
time.sleep(0.5)
display.clear()
time.sleep(0.5)
display.show(led_image)
Programme en utilisant le bouton A et le bouton B:
from microbit import display, button_a, button_b, Image
import time
led_image_a = Image("90009:09090:00900:09090:90009")
led_image_b = Image("99999:99999:99999:99999:99999")
led_image = Image("33333:30003:30003:30003:33333")
while True:
if button_a.is_pressed():
display.show(led_image_a)
time.sleep(0.5)
display.clear()
time.sleep(0.5)
if button_b.is_pressed():
display.show(led_image_b)
time.sleep(0.5)
display.clear()
time.sleep(0.5)
display.show(led_image)
from microbit import display, Image, pin_logo
import time
while True:
# Détection de la zone sensible
if pin_logo.is_touched():
led_image = Image('90009:09090:00900:09090:90009')
display.show(led_image)
# Affichage tant que la zone sensible est touchée
while pin_logo.is_touched():
pass
led_image = Image('00900:00900:99999:00900:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? Les LEDs changent quand tu passes ton doigt sur la zone sensitive ?
PARTIE 09 : Utiliser la touche sensitive et les boutons
Modifie ton programme sur le battement du cœur pour augmenter ou baisser la note par les touches A et B, activer ou éteindre le son avec la zone sensitive.
from microbit import display, Image, button_a, button_b, pin_logo
import time
import music
note = 200
on = True
start = time.time()
while True:
# Battement du coeur toutes les 1 seconde
if time.time() - start > 1:
start = time.time()
display.clear()
if on :
music.pitch(note, 200)
time.sleep(0.1)
else:
display.show(Image.HEART)
# Modification de la note avec la touche A
if button_a.is_pressed():
if note > 0 :
note -= 10
while button_a.is_pressed():
pass
on = True
# Modification de la note avec la touche B
if button_b.is_pressed():
if note < 600 :
note += 10
while button_b.is_pressed():
pass
on = True
# Activer ou non le battement du coeur
if pin_logo.is_touched():
if on :
on = False
else:
on = True
while pin_logo.is_touched() :
pass
Flasher pour tester puis bouton reset pour lancer
PARTIE 10 : Secouer les LEDs
Secouer la carte pour allumer les LEDs.
from microbit import display, Image, accelerometer
import time
while True:
if accelerometer.current_gesture() == 'shake' :
led_image = Image('90009:09090:00900:09090:90009')
display.show(led_image)
time.sleep(0.1)
led_image = Image('00900:00900:99999:00900:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? Tu peux essayer ces différentes possibilités :
from microbit import *
microphone.set_threshold(SoundEvent.LOUD, 80)
while True:
if microphone.current_event() == SoundEvent.LOUD:
led_image = Image('90009:09090:00900:09090:90009')
display.show(led_image)
led_image = Image('00900:00900:99999:00900:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
from microbit import *
import time
while True:
if microphone.sound_level() > 64:
led_image = Image('90009:09090:00900:09090:90009')
display.show(led_image)
time.sleep(0.3)
else:
led_image = Image('00900:00900:99999:00900:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
Que constates-tu après avoir téléversé le programme ? Essaye d’allumer les LEDs d’un claquement de mains, elles doivent rester allumer. Puis claque des mains pour les éteindre.
PARTIE 12 : Jouer de la musique
Joue différentes musiques en appuyant sur les boutons A et B et sur la zone sensitive.
from microbit import *
import random
import music
de_1 = Image('00000:00000:00900:00000:00000')
de_2 = Image('00009:00000:00000:00000:90000')
de_3 = Image('00009:00000:00900:00000:90000')
de_4 = Image('90009:00000:00000:00000:90009')
de_5 = Image('90009:00000:00900:00000:90009')
de_6 = Image('90009:00000:90009:00000:90009')
display.show('?')
nombre = 0
while True:
if accelerometer.current_gesture() == 'shake' :
nombre = random.randint(1, 6)
music.pitch(440, 50)
if nombre == 1:
display.show(de_1)
if nombre == 2:
display.show(de_2)
if nombre == 3:
display.show(de_3)
if nombre == 4:
display.show(de_4)
if nombre == 5:
display.show(de_5)
if nombre == 6:
display.show(de_6)
Votre objectif ? Couler les navires adverses et être le dernier joueur encore en lice ! Chaque micro:bit représente un champ de bataille : à vous de viser juste.
Comment ça marche ?
Un navire caché : Dès que vous allumez votre micro:bit, un navire apparaît aléatoirement sur la grille de LEDs (reconnaissable à sa lumière plus faible).
Un missile à guider : La LED la plus brillante, c’est votre missile ! Inclinez votre micro:bit (avant/arrière, gauche/droite) pour le déplacer et viser l’ennemi.
Prêt à tirer ?
Bouton A : Figez la position de votre missile pour ajuster votre tir.
Bouton B : FEU ! Envoyez votre missile vers les adversaires.
Touché ! Si votre missile atteint un navire, la micro:bit de la victime joue une musique de défaite… mais attention, elle reviendra en jeu après un délai ! À vous de la neutraliser à nouveau.
💻 À vous de coder ! Pour créer ce jeu, voici les fonctionnalités clés à programmer :
Communication radio : Envoyez et recevez les coordonnées (ligne/colonne) des tirs entre toutes les micro:bits du jeu.
Contrôle du missile : Utilisez l’accéléromètre pour déplacer le missile en inclinant la carte.
Gestion des tirs :
Bouton A : Verrouillez la position du missile.
Bouton B : Lancez le tir et transmettez les coordonnées aux autres joueurs.
Position aléatoire du navire : À chaque début de partie, le navire apparaît à un endroit aléatoire.
Détection de collision : Si un missile touche un navire, affichez une croix et déclenchez une musique de défaite.
Temps de réapparition : Un navire touché réapparaît après quelques secondes : soyez prêt à recommencer !
💡 Pourquoi c’est génial ?
Un jeu multijoueur : Affrontez vos amis en temps réel !
De la stratégie : Mémorisez les tirs et neutralisez vos adversaires.
Un projet complet : Codez la logique, l’affichage des LEDs, les sons et la communication entre cartes.
🛠️ Prêt à relever le défi ? Avec la micro:bit, vous allez apprendre à : ✔ Utiliser des capteurs (accéléromètre, boutons). ✔ Programmer l’affichage des LEDs et des sons. ✔ Faire communiquer plusieurs cartes entre elles.
À vos micro:bits ! Qui sera le dernier survivant ? 🎮💥
Le champ de bataille :
Ton navire : LED reconnaissable à sa lumière plus faible.
et 2Mo de Flash programme, ce qui veut dire un espace de stockage à minima intégré.
d’un microcontrôleur ARM M0 double coeur cadencé à 130 MHz,
de plus de 200 Ko de RAM
La carte propose l’écosystème C/C++ mais également celui du Micropython.
Pi Pico bénéficie des avantages de micro-python et on peut citer notamment :
le mode interpréteur qui permet d’interagir avec la carte « à la volée » ce qui est très pratique pour apprendre, faire des essais, etc.
une programmation « puissante », synthétique et facile à apprendre à la fois,
la programmation par fichiers (et non plus code compilé) ce qui rend la maintenance d’un projet très facile : sur la carte on dispose du code !
Sur une carte à microcontrôleur, on dispose :
Processeur ARM Cortex M0 à double cœur
Horloge 133 Mhz.
2 Mo de mémoire Flash.
264 ko de RAM.
2 interfaces UART.
2 interfaces SPI.
2 contrôleurs I2C.
16 canaux PWM.
3 ADC 12 bits.
Un module Wifi.
https://www.youtube.com/watch?v=o-tRJPCv0GA&t=29s
Le pico pi est vendu « vide », autrement dit, il ne dispose pas du Micropython et il faut le programmer sur la carte avant toute chose.
Vous pouvez voir Micropython comme une sorte de firmware, un micrologiciel, que l’on flashe dans la carte et qui va ajouter l’interpréteur Python à la carte
Appuyez sur le bouton BOOTSEL de votre pico et maintenez le enfoncé.
Connectez votre Pico au port USB de votre PC tout en maintenant le bouton enfoncé.
Attendez quelques secondes et relâchez le bouton BOOTSEL.
Le Pico doit apparaître comme un lecteur amovible baptisé RP2350 :
Copier le fichier sur le Pico. Lorsque la copie du Firmware, le pico se relance.
Lancer l’IDE Thonny :
Cliquer sur «Options » dans le menu « Outils».
Choisir l’interpréteur « MicroPython (Raspberry Pi Pico) »
et indiquer le port COM utilisé par la carte Raspberry PICO puis cliquer sur « OK ».
Ma présence du MicroPython du Pico apparaît dans la console.
Saisir ce code dans la console pour allumer la LED du Pico :
>>> from machine import Pin
>>> led=Pin("LED",Pin.OUT)
>>> led.on()
>>>
Saisie ce programme et demande son exécution sur la Pico :
from machine import Pin
import time
pin_led = Pin('LED', mode = Pin.OUT) # La broche de la LED built-in est placée en sortie
while True:
pin_led.value(True)
time.sleep(1)
pin_led.value(False)
time.sleep(1)
Si sous Thonny, vous rencontrez ce problème : Unable to connect to COM24: port not found