TP 04 - BBC micro:bit

Ressources

Objectif du TP

  • Utilisation de périphériques sur BBC micro:bit

Introduction

Pendant le TP, on va utiliser des fonctions MicroPython pour contrôler et lire les informations depuis les périphériques du dispositif Micro:bit.

En continuation, on va pressente les fonctions principales associe pour chaque périphérique intégrée et quelques exemples pour les utiliser.

Des détails en ce qui concerne tous les fonctions MicroPython qui peut être utilise pour Micro:bit, sont disponibles sur page de documentation.

Pour utiliser les fonctions d’interaction avec les périphériques on doit importer la bibliothèque microbit.

Exemple:

from microbit import *

LEDs

Le dispositif a une matrice de LEDs qui peut être contrôle individuellement ou tous ensemble pour pouvoir faire des dessins dur l'écran. Chaque LED de la matrice est caractérisé par deux coordonne qui représente la ligne et la colonne ou il se trouve.

En utilisant l'objet display, on peut appelle les fonctions suivantes:

  • display.get_pixel(x, y) - retourne une valeur du 0 a 9, représentant la luminosité du pixel à la coordonnée x, y (0 - le LED est complètement éteint, 9 - le LED est complètement éclairé);
  • display.set_pixel(x, y, val) - règle la luminosité de la LED des coordonnées x, y à la valeur wave dans la plage 0-9;
  • display.clear () -règle toutes les LED sur la luminosité 0;
  • display.show (value, delay = 400, wait = True, loop = False, clear = False) - affiche un nombre / texte / image à l'aide de LEDs.
  • value - la valeur qui sera affiché, si la valeur contient plus d'un caractère, chacun sera affiché à son tour
  • delay - le temps en millisecondes entre les caractères affichés; si le paramètre n'est pas spécifié, la valeur par défaut sera 400
  • wait - si il a la valeur True, le programme se bloquera jusqu'à ce que la fonction finisse d'afficher, pour la valeur Flase, le programme continuera son exécution; si le paramètre n'est pas spécifié, la valeur par défaut sera True
  • loop - si il a la valeur True, le texte sera affiché en continu, pour la valeur False, le texte sera affiché une fois; si le paramètre n'est pas spécifié, la valeur par défaut sera False
  • monospace - dimensionnement des lettres affichées.

Exemple

Dans l'exemple ci-dessous, on va faire vaciller le LED du centre de la matrice une fois par seconde.

from microbit import *
 
while True:
    display.set_pixel (2, 2, 9)
    sleep (1000) #sleep for 1000 milliseconds
    display.set_pixel (2, 2, 0)
    sleep (1000)

Les butons

Dans le schéma du microcontrôleur présenté ci-dessus, on peut voir que le micro:bit a trois boutons.

Le bouton au dos est pour reset. Si, ce bouton est appuie pour cinq secondes, le microcontrôleur arrêtera d’exécuter le programme chargé. En même temps, si le bouton de reset est pressé brièvement, le programme qui fait flash sur la carte sera réinitialisé.

Sur le devant du dispositif il y a deux butons A et B, qui peut-être accéder dans le code avec buton_a et button_b. Ces boutons ont une méthode is_pressed(), qui va retourne True si le bouton est appuyé, si non la méthode va retourne False.

Dans cet exemple on va utilise le conditionnel “if”.

Exemple 1

Le programme suivant va afficher sur l'écran du micro:bit la lettre “A” si le bouton A etre appuie, repsectivment la lettre “B” si le buton B va atre appuye. Si aucun button va etre appuye, sur l'ecran on va avoir une image avec un émoticône confuse.

Le programme suivant va afficher sur l'écran du micro:bit la lettre “A” si le bouton A été appuyé, respectivement la lettre “B” si le bouton B été appuyé. Si aucun bouton sera appuyé, sur l'écran on va avoir une image avec une émoticône confuse.

from microbit import display, button_a, button_b, Image 
 
while True:   #infinite looop
    if button_a.is_pressed(): #check if the button A is pressed
        display.scroll("A")
    elif button_b.is_pressed(): #check if the button B is pressed
        display.scroll("B")
    else:
        display.show(Image.CONFUSED)

L'accéléromètre. Des gestes

Micro:bit est capable de reconnaître des gestes comme l'inclination ou la secousse. Au dos du microcontrôleur, en bas, il a un chip petit, qui représenter l'accéléromètre, il s' appelle "Compass and Accelerometer”. Cela peut mesurer l'accélération dans toutes les trois dimensions, comme l'accélération gauche-droite, l'accélération avant-arrière et l'accélération haut-bas.

Qu'est-ce qu'un accéléromètre? Un accéléromètre a le but de mesurer et analyser des accélérations linaires et angulaires, par exemple, les voitures modernes utilisent un accéléromètre qui détecte un accident pour déployer des airbags.

Fontions pour lire les valuers du accéléromètre sont:

  • accelerometer.get_x() - renvoie l'accélération sur l'axe des x;
  • accelerometer.get_y() - renvoie l'accélération sur l'axe des y;
  • accelerometer.get_z() - renvoie l'accélération sur l'axe des z;
  • accelerometer.current_gesture() - renvoie une chaîne en représentant le geste du mouvement; les valeurs renvoyées peuvent être: up, down, left, right, face up, face down, freefall, 3g, 6g, 8g, shake

Exemple 2

Dans cet exemple on va utilise l'accéléromètre en affichant sur l'écran du micro:bit une carre s’il est incline vers gauche, un triangle s’il est incline vers droite et un diamant s’il il est mis face haut.

from microbit import display, accelerometer, Image
 
while True:
    if accelerometer.current_gesture() == "left":
        display.show(Image.SQUARE)
    elif accelerometer.current_gesture() == "right":
        display.show(Image.TRIANGLE)
    elif accelerometer.current_gesture() == "face up":
        display.show(Image.DIAMOND)
    else:
        display.clear()

Les direction. La boussole

Le capteur pour la boussole détecte les champs magnétiques de la Terre et est mis, aussi, au dos du micro:bit, comme l’accéléromètre. Cela est utilise pour détecter si un aimant est autotour de dispositif ou pour navigation, il peut montre les directions Nord, Sud, Est et Ouest.

Fonctions utiles pour lire les valeurs de la boussole:

  • compass.calibrate() - calibre la boussole

Immédiatement après ont eu chargé le code sur le dispositif, vous devez attendre un peu jusqu’à sur l’écran il va apparaitre le texte suivant “TITLING FILL”. Puis, une LED sera affichée à son tour, vous devez incliner le micro:bit jusqu’à l’écran se va allume complétement.

  • compass.heading() - renvoie une valeur d'angle comprise entre 0 (N) et 360.

Exemple 3

Dans cet exemple on va voir comme le micro:bit peut-être utilise comme une boussole.

from microbit import display, compass
compass.calibrate()
 
while True:
    degrees = compass.heading()
    if degrees < 45 or degrees > 315:
        display.show('N')
    elif degrees < 135:
        display.show("E")
    elif degrees < 225:
        display.show("S")
    elif degrees < 315:
        display.show("W")
    else:
        display.show(' ')

Capteur tactile

Micro:bit a un capteur tactile mis sur logo, qui est utilise comme input. Il peut interagir avec l'utilisateur comme en utilisant bouton.

Exemple 4

Dans cet exemple on vérifie si le senseur est touche, dans ce cas on va afficher le message “Hello”, si non, l’écran ne s’allumera pas.

from microbit import display, pin_logo
 
while True:
    if pin_logo.is_touched():
        display.scroll("Hello")
    else:
        display.clear() #display stays empty

Capteur de température et de lumière

Le capteur de température enregistre avec une approximation la température autour de micro:bit. Le capteur de lumière peut enregistrer le niveau de lumière par les LED.

Fonctions utiles:

  • temperature() - renvoie la température en degrés Celsius
  • display.read_light_level () - renvoie une valeur comprise entre 0 et 255 (0-sombre, 255 - lumière maximale)

Exemple 5

Dans l'exemple suivant on va afficher la température si le bouton A été appuyé. Si le micro:bit va enregistre la lumière fort sur l'écran va apparaitre une image du diamant. Pour tester le capteur de lumière, dans cet exemple vous pouvez prendre votre portable, allume la lampe de poche et mettre sa lumière vers le dispositif.

from microbit import *
 
while True:
    if button_a.was_pressed():
        display.scroll(temperature()) #display the temperature
    elif display.read_light_level() > 100: #check the light level
        display.show(Image.DIAMOND)
    else:
        display.clear()

Le Microphone et le Speaker

BBC micro:bit V2 a le microphone fixé à l'arrière et à la face, vous pouvez voir l'indicateur, qui s'allume lors de lui accès. Cela peut mesurer le niveau du son autotour de dispositif et il peut détecter les son haut ou plus bas. Aussi à l'arrière il y a sur PCB un un haut-parleur(speaker) magnétique d’où provient le son comme output.

Exemple 6

Cet exemple va simule une bougie. Après l’importation des bibliothèques, est déclaré un compteur nommé lit, qui a initialement la valeur True. Après, on vérifie s’il y a été enregistré un son fort en utilisant la méthodewas_event(), qui efface également l’historique des événements sonores avant de retour. Si la méthode va retourne True on va change la valeur du compteur lut. Dans le cas où la bougie est allumée une image simulant une bougie apparaîtra sur l’écran et qui va faire la flamme scintille à une position aléatoire de 1 à 3.

Pour créer une image il y a nécessaire de donner des valeurs pour chaque pixel de l'écran. La valeur 0 signifie que la LED est éteindre. Les valeurs 1 et 9(la valeur maximum) montre le niveau de luminosité du pixel. Pour représenter une ligne les valeurs sont entre ”” et elle se finit avec : . Dans cet exemple , on peut voir que chaque ligne du Image() représente la position des LED sur l'écran physique du micro:bit. Par conséquent, en analysant la première ligne, qui suggère la flamme, toutes les LED sont éteintes sauf celle en position 3, qui a le pixel réglé sur la luminosité maximale. Les autres lignes sont similaires pour former le reste de la bougie, les positions 1 et 5, le pixel est réglé sur 0 et le reste sur 9.

Pour créer le effet scintillement on utilise la méthode set_pixel(), qui a comme paramètres la ligne, la colonne et la valeur du pixel.

from microbit import display, microphone, SoundEvent, Image, sleep
import random
 
lit = True
 
while True:
    if microphone.was_event(SoundEvent.LOUD): #check if a loud sound was
        lit = not lit
        sleep(500)
    if lit:
        display.show(Image( #candle image
        "00900:"
        "09990:"
        "09990:"
        "09990:"
        "09990"))
        sleep(150)
        flicker = random.randint(1, 3)
        if flicker != 2:
            display.set_pixel(2,0,0)
            display.set_pixel(flicker,0,9)
        sleep(150)
    else:
        display.clear()

Exercices

  1. (0.5p) Écrivez un programme qui en appuyant simultanément les boutons A et B, va afficher une image qui représente “OUI”. Si pas de boutons est appuyé sur l'écran va affiche une image qui représente “NON” “NON”. Voir les image sur documentation.
  2. (0.5p) Modifier l’exercice antérieur tel que pour que deux images différentes s'affichent dans les deux cas. Voir les image sur documentation.
  3. (1p) Écrivez un programme qui affiche le nombre actuel de secousses sur l’écran. Lorsque le micro-bit enregistre 9 secousses, une image apparaît sur l’affichage.
  4. (1p) Créez un programme qui enregistre le nombre des inclinaisons à gauche et à droite. Chaque fois que le micro: bit est pointé dans l’un des deux côtés, il doit afficher sur l’écran le nombre actuel d’inclinaisons de ce côté. Hint: utilisez la méthode sleep
  5. (0.5p) Écrivez un programme qui en atteignant le logo (le capteur tactile) va faire toggle entre une image avec un diamant et une image avec un petit diamant.
  6. (0.5p)Changer le code de exemple 5 pour que le micro:bit détecte la lumière pour utiliser le haut-parleur pour lire de la musique JUMP_UP, et lorsque la lumière est éteinte pour lire de la musique JUMP_DOWN. Pour accéder à la bibliothèque “musique”, voir la documentation.
  7. (0.5p) Créer un programme qui, lorsqu'il est pressé à plusieurs reprises sur le logo, affichera sur l'écran LED les valeurs des paramètres environnementaux (température, luminosité, niveau de bruit)
  8. (1.5p) Créez un système d'éclairage intelligent: en fonction du niveau de luminosité, les lignes de LED s'allumeront progressivement (lumière forte → toutes les LED éteintes, foncées → toutes les LED allumées).
  9. (4p) Créez un écran de dessin interactif à l'aide de points comme indiqué ci-dessous:
    • (3p) Lorsque nous appuierons sur le logo (capteur tactile), une LED allumée sera générée dans le coin inférieur gauche. En utilisant le bouton A, nous pouvons “déplacer” la LED vers le haut sur la colonne sur laquelle elle se trouve actuellement. En utilisant le bouton B, nous pouvons “déplacer” la LED vers la droite sur la ligne où elle se trouve maintenant. Une fois que nous avons atteint la position où nous voulons laisser la LED allumée, nous appuyons à nouveau sur le logo. Pour générer une nouvelle “LED allumée”, on va appuye à nouveau sur le logo.
    • (0.5p) Les colonnes et les lignes sont considérées circulaires: une fois que nous atteignons la fin de la colonne / ligne, la LED retournera au début de la colonne / ligne
    • (0.5p) Nous ne pouvons pas avoir deux LED allumées dans la même position; lorsque on déplace une LED allumée sur une LED déjà allumée, il va “saute” à la première position libre dans le sens du mouvement
    • Bonus:
      • (1p) Si au moment de la génération du point, il y a déjà un point dans le coin inférieur gauche de l'écran, il sera généré sur la première position libre sur la première ligne. Si la ligne est complètement occupée, on va passer à la ligne suivante.
      • (1p) Éteindre une LED: Si un LED est déjà allumée à l'endroit où on a deplace un LED, elle s'allumera et s'éteindra à plusieurs reprises (une fois a toutes les 100 ms). L'utilisateur peux faire deux actions: soit appuyer sur le logo et le LED s'éteindra; soit appuyez sur l'un des deux boutons (A ou B) et la LED se déplacera vers la nouvelle position. Ainsi, la LED “précédemment superposée” restera allumée.

Solutions

sde2/laboratoare/03_microbit_fr.txt · Last modified: 2021/03/30 18:08 by ioana_maria.culic
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0