Capteurs internes
Accéléromètre
Le micro:bit est équipé d’un accéléromètre. Il est non seulement capable de détecter la modification de son inclinaison, mais également des secousses ou une chute. Sa précision est de 2G.
MakeCode
Choisissez l’événement lorsque secouer (volet Entrées) et modifiez-le éventuellement, en fonction de l’action (geste) que vous voulez détecter.
L’événement "lorsque secouer"
Si vous reproduisez cet exemple de code et tournez le micro:bit dans tous les sens, vous constaterez que la flèche pointe toujours vers le haut.
La flèche pointe automatiquement vers le haut
Vous pouvez aussi vous amuser à fabriquer un podomètre rudimentaire. Le principe est très simple ; à chaque secousse, le compteur s’incrémente. Le bouton A permet de remettre à zéro le nombre de pas.
Le programme est très simple : créez une variable (volet Variable) pour stocker le nombre de pas et ajoutez les événements lorsque secouer et lorsque le bouton A est pressé. N’hésitez pas à vous inspirer de cet exemple et à le personnaliser pour créer votre podomètre.
Code du podomètre
Puis fixez-le sur votre jambe et faites quelques pas...
Test du podomètre
MicroPython
La fonction...
Jeux de hasard
L’introduction d’une petite touche de hasard permet de créer de nombreux jeux. En voici quelques exemples, mais n’hésitez pas à les adapter à vos besoins.
1. Pile ou Face
Pour jouer à pile ou face, il faut lancer une pièce. Elle tombe soit sur "Pile" (la valeur de la pièce), soit sur "Face" (une image). Vous pouvez simuler le lancement de la pièce en appuyant sur un bouton (A ou B) ou avec l’accéléromètre (secouer le micro:bit). Comme il n’y a qu’une chance sur deux, il est très fréquent que la pièce tombe plusieurs fois de suite sur la même face.
Pour montrer que le résultat à l’écran est bien issu d’un nouveau tirage, vous pouvez éteindre l’écran pendant quelques secondes ou créer une petite animation pour évoquer le coté incertain d’une pièce qui tourne sur elle-même (ou qui roule sur la table), avant de tomber sur un côté.
MakeCode
Le bloc choisir au hasard de ... à ... (volet Maths), permet d’obtenir un nombre aléatoire compris dans une fourchette. Vous pouvez choisir un nombre entre 0 et 1, entre 1 et 2, ou même entre 7 et 8. Cela n’a pas d’importance, puisqu’il suffit simplement d’obtenir deux nombres tirés au sort et de déterminer ensuite un affichage différent pour chacun.
Dans l’exemple suivant, le côté Face est représenté par l’image HAPPY et Pile par le texte "1", qui correspond à la "valeur" de la pièce. Rien n’empêche de s’exprimer en créant d’autres faces personnalisées.
Pile ou Face
MicroPython
La fonction random.randint, qui fournit le nombre aléatoire compris entre 0 et 1, n’est pas incluse dans la bibliothèque microbit. Pour s’en servir, il faut obligatoirement appeler la bibliothèque random.
Si le hasard désigne le chiffre 0, le micro:bit affiche l’Image.HAPPY et si c’est le chiffre 1, la chaîne de caractères "1" apparaît à l’écran.
Attention, il ne faut surtout pas confondre l’opérateur de comparaison == (composé de deux signes égaux), qui est utilisé...
Magnétomètre
Le micro:bit intègre un capteur sensible aux champs magnétiques. Avant de l’utiliser, il faut le calibrer (à chaque mise sous tension de la carte). Il s’agit de tourner la carte dans tous les sens, pour allumer tous les pixels de la matrice. Ce n’est pas forcément facile au début, mais une fois que l’on a compris le principe, c’est un jeu d’enfant.
1. Boussole
Le magnétomètre est capable de fournir une valeur comprise entre 0 et 359 degrés. Il s’agit de l’angle entre le nord magnétique et la position actuelle du micro:bit.
Vous pouvez donc utiliser cette information pour fabriquer une boussole. Tournez le micro:bit dans n’importe quelle direction, avec ce programme, la flèche indiquera toujours le nord.
MakeCode
Lancez une calibration de la boussole au démarrage de la carte (volet Entrées - plus). Puis, dans la boucle infinie, créez une variable (volet Variables) pour stocker la valeur du bloc direction de la boussole (°) (volet Entrées). Ensuite, suivant l’angle détecté par le magnétomètre, le programme lance les fonctions d’affichage : nord, est, sud et ouest. Ajoutez le bloc ou (volet Logique - Booléen) pour créer une double condition avec l’opérateur logique OU (le code est exécuté si l’une des deux conditions est remplie).
Boussole
MicroPython
L’opérateur logique OU s’écrit or en MicroPython. Comme avec MakeCode, le code est exécuté si et seulement si l’une des conditions est vraie.
# boussole1.py
# Appel de la bibliothèque microbit
from microbit import...
Mesure de température
Le micro:bit possède aussi un capteur de température. Il est intégré au microcontrôleur, mais comme celui-ci ne chauffe quasiment pas (contrairement au microprocesseur de votre ordinateur), la température relevée correspond à la température ambiante.
Attention, ce capteur n’est pas forcément très fiable, il est parfois possible de constater des écarts de température allant jusqu’à 5 degrés entre deux modèles micro:bit.
MakeCode
Le programme ne présente pas de difficulté particulière. Il suffit simplement d’afficher le bloc température (°c) (volet Entrées).
Thermomètre
MicroPython
L’instruction temperature, permet d’obtenir la température détectée (directement en degrés Celsius).
# ThermometreInterne.py
# Appel de la bibliothèque microbit
from microbit import *
# Boucle infinie
while True :
# Affichage de la température
display.scroll(temperature())
# Pause
sleep(1000)
Mesure de luminosité
La matrice de LED peut aussi servir de capteur rudimentaire pour mesurer la luminosité ambiante. Elle permet d’obtenir une valeur comprise entre 0 et 255 (255 représente la luminosité maximum).
MakeCode
Dans cet exemple, la matrice de LED est utilisée à la fois comme capteur et comme périphérique de sortie (pour afficher le résultat). Il est donc important d’effacer l’écran pendant un instant (2/10 de seconde), pour éviter que la matrice de LED ne détecte sa propre luminosité (ce qui fausserait le résultat).
Le bloc niveau d’intensité lumineuse est disponible dans le volet Entrées.
Mesure de luminosité
MicroPython
L’instruction display.read_light_level, permet d’obtenir la luminosité détectée (entre 0 et 255).
# LuminositeInterne.py
# Appel de la bibliothèque microbit
from microbit import *
# Boucle infinie
while True :
# Détection de la luminosite
luminosite = display.read_light_level()
# Affichage de la luminosite
display.scroll(luminosite)
# Pause
sleep(200)
# Extinction de l'écran
display.clear()
Capteurs sensitifs
Le micro:bit est capable de détecter le contact d’un doigt sur les ports P0, P1 et P2. Pour que cela fonctionne correctement, il est recommandé de toucher en même temps la masse (GND).
Les 3 ports sensitifs du micro:bit
MakeCode
Pour tester les capteurs sensitifs du micro:bit, utilisez simplement l’événement lorsque la broche ... est activée, de l’onglet Entrées.
Utilisation des ports sensitifs
MicroPython
L’instruction pinX.is_touched permet d’activer les capteurs sensitifs.
# CapteurSensitif
# Appel de la bibliothèque microbit
from microbit import *
# Boucle infinie
while True:
# Si le port 0 est touché
if pin0.is_touched():
# Affiche "0"
display.show("0")
# Sinon et si le port 1 est touché
elif pin1.is_touched():
# Affiche "1"
display.show("1")
# Sinon et si le port 2 est touché
elif pin2.is_touched():
# Affiche "2"
display.show("2")
sleep(10)
Radio
Les micro:bit sont capables d’échanger entre eux des informations par radio.
Les messages envoyés ont une longueur maximale par défaut de 32 octets, mais il est possible de configurer une taille plus grande (jusqu’à 251 octets). Les messages reçus sont stockés dans la mémoire vive (RAM) du micro:bit, dans une file d’attente. Par défaut, le nombre maximum de messages est de 3, mais il est possible d’augmenter la taille de la file d’attente (plus elle est grande, plus la mémoire utilisée est importante). La lecture d’un message l’efface de la file d’attente, mais lorsqu’elle est pleine, les nouveaux messages sont ignorés. Les messages sont classés par adresse et par groupe.
Il est possible d’augmenter la puissance d’émission, cela augmente la portée, mais aussi la consommation.
Lorsqu’un micro:bit envoie un message par radio, toutes les cartes aux alentours sont susceptibles de le recevoir. Pour éviter les erreurs de transmission dans les lieux accueillant de nombreux appareils (comme une salle de classe), il est possible d’indiquer un groupe (de 0 à 255), qui correspond au nom du destinataire. C’est un peu comme écrire le nom du destinataire sur une enveloppe, mais cela n’empêche pas les autres micro:bit d’écouter, d’intercepter...
Envoi de caractères
Le même programme est flashé dans plusieurs micro:bit (qui peuvent être émetteurs ou récepteurs). Au démarrage, ils se positionnent automatiquement dans le même groupe. L’appui sur les boutons A, B et A+B déclenche l’envoi d’un message aux autres appareils. En même temps, le programme regarde si un nouveau message est reçu ; si c’est le cas, il s’affiche pendant une seconde.
MakeCode
Les blocs envoyer la chaîne ... par radio, radio définir groupe... et l’événement Quand une donnée est reçue par radio receivedString sont disponibles dans le volet Radio.
Vous pouvez bien sûr choisir d’autres chaînes de caractères à envoyer.
Transmission des chaînes de caractères "a", "b" et "c"
MicroPython
Vous avez besoin d’appeler le module (ou bibliothèque) radio pour utiliser les instructions de gestion de la radio. Comme avec MakeCode, il faut choisir un groupe commun à l’émetteur et aux récepteurs (de 0 à 255). Ensuite, il est nécessaire d’activer la radio (qui par défaut est désactivée).
Si l’on appuie sur les boutons A, B ou A+B, l’instruction radio.send envoie une chaîne de caractères. Le texte peut être délimité par des guillemets ou des apostrophes. Vous pouvez par exemple écrire :
radio.send("Hello les amis")
ou :
radio.send('Hello les amis')
Contrairement au programme réalisé sous MakeCode (qui gère les boutons de façon différente), il est nécessaire d’ajouter une pause de 300 millisecondes (environ) pour empêcher que plusieurs messages ne soient envoyés à la suite. Le microcontrôleur est beaucoup plus rapide que l’être humain, il a donc le temps de faire plusieurs boucles pendant que l’on presse le bouton.
Comme nous l’avons déjà vu dans le précédent chapitre, il existe d’autres solutions pour éviter une multiple détection de l’appui sur un bouton (cf. chapitre Premiers programmes - Boutons - Compteur manuel).
Mais, dans cet exemple, il n’est pas nécessaire de compter avec précision...
Communication série
Comme pour le moniteur série de l’IDE Arduino, la carte doit rester branchée en USB à l’ordinateur et le programme doit préciser les données envoyées par la communication série.
Avec Windows 10, vous n’avez pas besoin de drivers spécifiques, mais pour les versions antérieures, vous devrez télécharger et installer les pilotes suivants : https://os.mbed.com/docs/mbed-os/v5.14/tutorials/windows-serial-driver.html
La communication série offre plus de confort que la matrice de LED pour afficher des informations volumineuses. Mais elle permet aussi de déboguer plus facilement un programme, en vérifiant par exemple que la valeur d’une variable est bien incrémentée au cours du traitement.
MakeCode
Seule la version Windows 10 App de MakeCode (provenant du Microsoft Store) permet de recevoir les informations du micro:bit. Les autres, pour l’instant, ne possèdent qu’un simulateur de communication série.
Vous trouverez les blocs nécessaires dans le volet Communication série. Dans cet exemple, nous allons utiliser le bloc série écrire ligne " " et y ajouter le bloc température (° C), avec une petite pause pour ne par envoyer les données en continu (ce qui mobiliserait inutilement la liaison série).
Code permettant la communication...
Stockage
La mémoire interne du micro:bit dispose d’un espace de stockage d’environ 30 ko (30 000 caractères). Cela permet de sauvegarder des données, même après extinction de la carte.
Pour créer un fichier, utilisez l’instruction with open suivie du nom du fichier (entre guillemets), du paramètre w pour écrire dans le fichier (r, pour lire) et du nom de l’objet (par exemple, monfichier). L’instruction monFichier.write indique ce qui est écrit : dans cet exemple, il s’agit d’une chaîne de caractère, puis de la température (convertie en chaîne de caractère avec l’instruction str).
La mise à jour du fichier ne doit pas se déclencher automatiquement au démarrage de la carte, car le fichier précédemment enregistré serait automatiquement écrasé au moment où l’on connecte le micro:bit à l’ordinateur (avant d’avoir pu accéder aux données). C’est pour cela qu’il faut, dans les exemples de code ci-dessous, appuyer sur le bouton A, pour enregistrer la température.
Ce programme se comporte un peu comme un appareil photo. Lorsque vous appuyez sur le bouton A, le micro:bit mesure la température et l’enregistre dans un fichier nommé temperature.txt.
# StockageDonnees1.py
# Appel de la bibliothèque...