This shows you the differences between two versions of the page.
sde2:laboratoare:03_microbit_fr [2021/03/22 21:48] alexandra.state2607 [Le Microphone et le Speaker] |
sde2:laboratoare:03_microbit_fr [2021/03/30 18:08] (current) ioana_maria.culic [Exercices] |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== TP 04 - BBC micro:bit ====== | ||
- | =====Input devises ou butons ===== | + | ==== Ressources ==== |
+ | [[https://microbit-micropython.readthedocs.io/en/v2-docs/| Documentation BBC micro:bit MicroPython]] | ||
+ | |||
+ | ===== 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. | ||
+ | |||
+ | <note info> | ||
+ | Des détails en ce qui concerne tous les fonctions MicroPython qui peut être utilise pour Micro:bit, sont disponibles sur [[https://microbit-micropython.readthedocs.io/en/v2-docs/microbit_micropython_api.html|page de documentation]]. | ||
+ | </note> | ||
+ | |||
+ | Pour utiliser les fonctions d’interaction avec les périphériques on doit importer la bibliothèque microbit. | ||
+ | |||
+ | **Exemple:** | ||
+ | <code python> | ||
+ | from microbit import * | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== 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 [[https://microbit-micropython.readthedocs.io/en/v2-docs/display.html|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. | ||
+ | |||
+ | <code python> | ||
+ | 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) | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== Les butons ===== | ||
Dans le schéma du microcontrôleur présenté ci-dessus, on peut voir que le [[https://ocw.cs.pub.ro/courses/sde/laboratoare/02_microbit_fr?&#le_microphone_et_le_speaker|micro:bit]] a trois boutons. | Dans le schéma du microcontrôleur présenté ci-dessus, on peut voir que le [[https://ocw.cs.pub.ro/courses/sde/laboratoare/02_microbit_fr?&#le_microphone_et_le_speaker|micro:bit]] a trois boutons. | ||
Line 37: | Line 92: | ||
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. | 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. | ||
+ | |||
+ | [[https://microbit-micropython.readthedocs.io/en/v2-docs/accelerometer.html|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=== | ===Exemple 2=== | ||
Line 57: | Line 119: | ||
</code> | </code> | ||
- | =====Le Microphone et le Speaker ===== | + | =====Les direction. La boussole ===== |
- | 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 [[https://www.allaboutcircuits.com/technical-articles/what-is-a-printed-circuit-board-pcb/|PCB]] un un haut-parleur(speaker) magnétique d’où provient le son comme output. | + | Le capteur pour [[https://www.youtube.com/watch?v=a3P6LWwPBqM&feature=emb_logo| 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. |
- | ===Exemple 4=== | + | [[https://microbit-micropython.readthedocs.io/en/v2-docs/compass.html|Fonctions]] utiles pour lire les valeurs de la boussole: |
- | 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éthode//was_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. | + | * **compass.calibrate()** - calibre la boussole |
- | 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. | + | <note warning> |
+ | 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. | ||
- | <code python> | + | </note> |
- | from microbit import display, microphone, SoundEvent, Image, sleep | + | |
- | import random | + | |
- | lit = True | + | * **compass.heading()** - renvoie une valeur d'angle comprise entre 0 (N) et 360. |
- | + | ||
- | 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() | + | |
- | </code> | + | |
- | + | ||
- | =====Les direction. La boussole ===== | + | |
- | + | ||
- | Le capteur pour [[https://www.youtube.com/watch?v=a3P6LWwPBqM&feature=emb_logo| 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. | + | |
===Exemple 3=== | ===Exemple 3=== | ||
- | Dans cet exemple on va voir comme le micro:bit peut-être utilise comme une boussole. __Attention__: 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. | + | Dans cet exemple on va voir comme le micro:bit peut-être utilise comme une boussole. |
<code python> | <code python> | ||
from microbit import display, compass | from microbit import display, compass | ||
Line 119: | Line 153: | ||
display.show(' ') | display.show(' ') | ||
</code> | </code> | ||
+ | |||
=====Capteur tactile ===== | =====Capteur tactile ===== | ||
Line 124: | Line 159: | ||
Micro:bit a un capteur tactile mis sur [[https://www.youtube.com/watch?v=spFD3SxxxHQ&feature=emb_logo|logo]], qui est utilise comme input. Il peut interagir avec l'utilisateur comme en utilisant bouton. | Micro:bit a un capteur tactile mis sur [[https://www.youtube.com/watch?v=spFD3SxxxHQ&feature=emb_logo|logo]], qui est utilise comme input. Il peut interagir avec l'utilisateur comme en utilisant bouton. | ||
- | ==== Exemple 6 ==== | + | ==== 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. | 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. | ||
Line 136: | Line 171: | ||
display.clear() #display stays empty | display.clear() #display stays empty | ||
</code> | </code> | ||
+ | |||
===== Capteur de température et de lumière ===== | ===== Capteur de température et de lumière ===== | ||
- | Le capteur de [[https://youtu.be/mrHn8eZ9eqg | température]] enregistre avec une approximation la température autour de micro:bit. Le capteur de [[https://youtu.be/ii0U_FMr-Z4|lumière]] peut enregistrer le niveau de lumière par les LED | + | Le capteur de [[https://youtu.be/mrHn8eZ9eqg | température]] enregistre avec une approximation la température autour de micro:bit. Le capteur de [[https://youtu.be/ii0U_FMr-Z4|lumière]] peut enregistrer le niveau de lumière par les LED. |
- | ==== Exemple 7 ==== | + | Fonctions utiles: |
- | 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 de soleil. 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. | + | * ** 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. | ||
<code python> | <code python> | ||
- | from microbit import display, button_a, Image, temperature | + | from microbit import * |
while True: | while True: | ||
if button_a.was_pressed(): | if button_a.was_pressed(): | ||
- | display.scroll(temperature()) #displat the temperature | + | display.scroll(temperature()) #display the temperature |
elif display.read_light_level() > 100: #check the light level | elif display.read_light_level() > 100: #check the light level | ||
- | display.show(Image( #sun image | + | display.show(Image.DIAMOND) |
- | "90909:" | + | else: |
+ | display.clear() | ||
+ | </code> | ||
+ | |||
+ | =====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 [[https://www.allaboutcircuits.com/technical-articles/what-is-a-printed-circuit-board-pcb/|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éthode//was_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. | ||
+ | |||
+ | <code python> | ||
+ | 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:" | ||
- | "99999:" | ||
"09990:" | "09990:" | ||
- | "90909")) | + | "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: | else: | ||
display.clear() | display.clear() | ||
</code> | </code> | ||
+ | |||
+ | |||
===== Exercices ===== | ===== Exercices ===== | ||
- | - É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 [[https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/images.html|documentation]]. | + | - **(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 [[https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/images.html|documentation]]. |
- | -Modifier l’exercice antérieur tel que en appuyant le bouton A va afficher sur l’écran la lettre "A" et en appuyant le bouton B va afficher sur l’écran la lettre "B". | + | - **(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 [[https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/images.html|documentation]]. |
- | -É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. | + | - **(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. |
- | -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 [[https://microbit-micropython.readthedocs.io/en/v1.0.1/microbit.html#microbit.sleep|sleep]] | + | - **(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 [[https://microbit-micropython.readthedocs.io/en/v1.0.1/microbit.html#microbit.sleep|sleep]] |
- | -É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. | + | - **(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. |
- | -Écrivez un programme qui, lors de l’enregistrement d’un son, affichera une image sur l’écran et parlera avec la parole "ON". Si aucun son n’est pas enregistré, l’affichage reste vide. Affichez le niveau sonore pour une action a votre choix (appui sur un bouton, logo tactile, inclinaison, etc.) | + | - **(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 [[https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/music.html|documentation]]. |
- | -Changer le code de [[https://ocw.cs.pub.ro/courses/sde/laboratoare/02_microbit_ro?&#senzorul_de_temperatura_si_de_lumina|exemple 7]] 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 [[https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/music.html|documentation]]. | + | - **(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) |
+ | - **(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). | ||
+ | - **(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==== | ||
+ | [[https://github.com/UPB-FILS-SdE2/Solutions|Solutions]] | ||