Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. micro:bit
  3. Capteurs internes
Extrait - micro:bit Programmez la carte avec MakeCode et MicroPython
Extraits du livre
micro:bit Programmez la carte avec MakeCode et MicroPython
2 avis
Revenir à la page d'achat du livre

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.

images/03-01.png

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.

images/03-02.png

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.

images/03-03.png

Code du podomètre

Puis fixez-le sur votre jambe et faites quelques pas...

images/03-04.png

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. 

images/03-05.png

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).

images/03-09.png

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).

images/03-12.png

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.

images/03-13.png

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).

images/03-14.png

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.

images/03-15.png

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.

images/03-16.png

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).

images/03-27.png

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...