Sciencexp : le site des Sciences Expérimentales

Mesures scientifiques et ordinateur : mesurer, figurer, comparer

Micro:bit

Comme Arduino, Micro:bit est une petite carte à microcontrôleur, connectable à un ordinateur par une prise USB, et permettant de faire des mesures ou de commander des actionneurs (lampes, moteurs, relais...).

Son encombrement est encore moindre que celui d’Arduino : environ la moitié de la taille d’une carte bancaire. Il a moins de connecteurs facilement utilisables qu’Arduino, mais il a cinq connecteurs au format « prise banane », connectables avec des câbles standards.

Contrairement à Arduino, dont le langage de programmation est une variant de C, Micro:bit est programmable en Python (et quelques autres langages). Ceci peut permettre de l’utiliser en lycée, où le langage de programmation habituel est Python.

Enfin, Micro:bit a plusieurs capteurs intégrés, dont les plus faciles à utiliser sont les capteurs de lumière et de température, ainsi que l’accéléromètre à 3 axes. Il a aussi une matrice de diodes lumineuses, pouvant permettre l'affichage de lettres ou de dessins.

Le capteur de lumière est dans les diodes lumineuses. Le capteur de température donne des valeurs en degrés Celsius, mais mesure en fait la température du microprocesseur : elle est assez voisine de la température ambiante, mais un peu plus élevée.

Des détails sur les caractéristiques physiques de Microbit peuvent être trouvées sur le site de David Thérincourt. On y trouve en particulier une formule de correction pour les entrées analogiques en volts

[JPG] 2019MicrobitConnexionOrdinateur

Illustration 1: Micro:bit connecté par un câble (blanc) à une prise USB d'ordinateur portable

Micro:bit est le petit rectangle noir à gauche de la photo ci-dessus. Il existe aussi un capteur magnétique (« boussole »), mais qui est un peu plus compliqué à utiliser.

 

Comment programmer Micro:bit

Sur Internet, la méthode la plus fréquemment utilisée est la programmation par blocs par une application Internet (MakeCode, pour Windows, Macintosh et Linux).

On peut aussi programmer Micro:bit en Python. Une première possibilité est la programmation par blocs (https://app.edublocks.org/#MicroBit) qui donne ensuite un programme en Python. Une autre possibilité est une application Internet (https://python.microbit.org/v/2.0) qui permet une programmation Python par des lignes de programme. Enfin, il existe un logiciel à installer, Mu editor (https://codewith.mu/, pour Windows, Mac et Linux) sur son ordinateur et qui permet la programmation directe en Python d’un Micro:bit relié à cet ordinateur : c’est la manière qui sera développée ici.

[JPG] 2019MicrobitPythonEditeurMu


Illustration 2: Editeur Mu pour Python et Micro:bit



Communication en série entre Micro:bit et l’ordinateur

Pour les versions de Windows antérieures à Windows 10 (Windows 8, 7 et antérieurs), il faut installer un pilote (driver) qui permettra à Micro:bit d’être reconnu comme un port série (http://os.mbed.com/media/downloads/drivers/mbedWinSerial_16466.exe).

Ensuite, tous les logiciels de communication par voie série pourront échanger des données avec Micro:bit, à condition que cet appareil ait été programmé correctement.

Le programme ci-dessous initialise la liaison à 115200 bits/seconde (le maximum possible), affiche « o » sur la matrice de diodes lumineuses (simplement pour vérifier que le programme a bien été injecté), puis envoie le résultat d’une mesure en fonction du caractère reçu à partir de l’ordinateur (« 0 » envoie la mesure lue sur le connecteur 0, « 1 » envoie la mesure lue sur le connecteur 1, etc).

from microbit import *

uart.init(baudrate=115200)

display.scroll("o")

while True:

     if uart.any():

     lignelue = str(uart.read())

     if lignelue.find("0")>-1:

         uart.write(str(pin0.read_analog())+"\n\r")

     elif lignelue.find("1")>-1:uart.write(str(pin1.read_analog())+"\n\r")

     elif lignelue.find("2")>-1:uart.write(str(pin2.read_analog())+"\n\r")

     elif lignelue.find("L")>-1:

         uart.write(str(display.read_light_level()) + "\n\r")

     elif lignelue.find("X")>-1:

         uart.write(str(accelerometer.get_x())+"\n\r")

     elif lignelue.find("Y")>-1:

         uart.write(str(accelerometer.get_y())+"\n\r")

     elif lignelue.find("Z")>-1:

         uart.write(str(accelerometer.get_z())+"\n\r")

     pass

Pour communiquer avec Micro:bit, il faudra un programme de communication sur l’ordinateur, réalisable avec tous les langages normaux de programmation. Le programme en question devra envoyer un caractère en fonction de la voie qu’on souhaite lire (« 0 » pour la broche 0, « 1 » pour la broche 1, etc), et recevoir une chaîne de caractères correspondant à la mesure effectuée.

 

Un pilote Mensura en PureBasic pour Micro:bit

Initialisation de la voie série avec les bons paramètres

Port$ = "COM6" ; (ou un autre numéro, variable selon les ordinateurs)

vitesse=115200

OpenSerialPort(0, Port$,vitesse, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)

Fonctions de mesure (nead et ead)

On définit 7 voies de mesure : les trois entrées numérotées 0 à 2, la mesure de lumière, et les trois axes de l’accéléromètre.

ProcedureDLL .s nead(n .w)

Select n

     Case 0 : nead$="EA0"

     Case 1 : nead$="EA1"

     Case 2 : nead$="EA2"

     Case 3 : nead$="lum"

     Case 4 : nead$="Accel X"

     Case 5: nead$="Accel Y"

     Case 6: nead$="Accel Z"

     Default

         nead$=""

EndSelect

ProcedureReturn(chaineascii(nead$))

EndProcedure



ProcedureDLL .d ead(n .w)

chloc$=chainemesures$

valloc=999

delai=20 ; il faut un délai pour que Micro:bit fasse la mesure et la renvoie (au moins 10ms)

While AvailableSerialPortInput(0)>0

     If ReadSerialPortData(0,@buffer,1) ; on vide le tampon des caractères reçus

         text$=Chr(buffer)

     EndIf

Wend

Select n

     Case 0 : WriteSerialPortString(0,"0", #PB_Ascii) : Delay(delai)

     Case 1 : WriteSerialPortString(0,"1", #PB_Ascii) : Delay(delai)

     Case 2 : WriteSerialPortString(0,"2", #PB_Ascii) : Delay(delai)

     Case 3 : WriteSerialPortString(0,"L", #PB_Ascii) : Delay(delai*3)

; la mesure de la lumière prend plus de temps ==> il faut un délai plus long

     Case 4 : WriteSerialPortString(0,"X", #PB_Ascii) : Delay(delai)

     Case 5 : WriteSerialPortString(0,"Y", #PB_Ascii) : Delay(delai)

     Case 6 : WriteSerialPortString(0,"Z", #PB_Ascii) : Delay(delai)

EndSelect

text$=""

While AvailableSerialPortInput(0)>0

     If ReadSerialPortData(0,@buffer,1)

         text$=text$+Chr(buffer) ; on lit les caractères reçus de Micro:bit

     EndIf

Wend

If Len(text$)>0 : valloc=Val(text$):EndIf

ProcedureReturn(valloc)

EndProcedure


A télécharger ici :

Pilote (dll) pour Windows, en PureBasic, avec recherche des ports de communication

 

Nouveauté d'octobre 2023 : prise en compte du capteur de température et du capteur de magnétisme.

Comme il a été dit précédemment, le capteur de température ne donne pas tout à fait la température ambiante, mais la température du microprocesseur.

Le fichier Microbit2023.zip contient un programme Python à injecter dans Microbit, et un pilote avec sa source en PureBasic. Cet ensemble peut utiliser le capteur de température et le capteur de magnétisme (en plus des 3 entrées analogiques et des capteurs de lumière et d'accélération).

 

Kit de démarrage pour Windows, avec le pilote précédent, et le logiciel Mensura-LZ configuré pour charger automatiquement le pilote.

(les pilotes pour Linux devraient venir prochainement)

Fichier pdf correspondant à ce document, avec l'expérience du pendule (voir page spéciale ici)










Dernière modification le 22/10/2023

Site motorisé par ZitePLUS 0.9.1