This shows you the differences between two versions of the page.
sde2:laboratoare:03_microbit_fr [2021/03/23 23:02] alexandra.state2607 [Introduction] |
sde2:laboratoare:03_microbit_fr [2021/03/30 18:08] (current) ioana_maria.culic [Exercices] |
||
---|---|---|---|
Line 27: | Line 27: | ||
===== LEDs ===== | ===== 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: | ||
- | =====Input devises ou butons ===== | + | * **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 66: | 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 90: | Line 123: | ||
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. | 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=== | + | [[https://microbit-micropython.readthedocs.io/en/v2-docs/compass.html|Fonctions]] utiles pour lire les valeurs de la boussole: |
- | 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. | + | |
+ | * **compass.calibrate()** - calibre la boussole | ||
+ | |||
+ | <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. | ||
+ | |||
+ | </note> | ||
+ | |||
+ | * **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. | ||
<code python> | <code python> | ||
from microbit import display, compass | from microbit import display, compass | ||
Line 111: | Line 154: | ||
</code> | </code> | ||
+ | |||
+ | =====Capteur tactile ===== | ||
+ | |||
+ | 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 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. | ||
+ | |||
+ | <code python> | ||
+ | from microbit import display, pin_logo | ||
+ | |||
+ | while True: | ||
+ | if pin_logo.is_touched(): | ||
+ | display.scroll("Hello") | ||
+ | else: | ||
+ | display.clear() #display stays empty | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== 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. | ||
+ | |||
+ | 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. | ||
+ | |||
+ | <code python> | ||
+ | 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() | ||
+ | </code> | ||
=====Le Microphone et le Speaker ===== | =====Le Microphone et le Speaker ===== | ||
Line 116: | Line 202: | ||
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. | 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 4=== | + | ===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. | 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. | ||
Line 151: | Line 237: | ||
- | =====Capteur tactile ===== | ||
- | 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 5 ==== | + | ===== Exercices ===== |
- | 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. | + | |
- | + | ||
- | <code python> | + | |
- | from microbit import display, pin_logo | + | |
- | + | ||
- | while True: | + | |
- | if pin_logo.is_touched(): | + | |
- | display.scroll("Hello") | + | |
- | else: | + | |
- | display.clear() #display stays empty | + | |
- | </code> | + | |
- | ===== Capteur de température et de lumière ===== | + | - **(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]]. |
- | + | - **(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]]. | |
- | 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 | + | - **(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. |
- | + | - **(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]] | |
- | ==== Exemple 6 ==== | + | - **(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. |
- | + | - **(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]]. | |
- | 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. | + | - **(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). | |
- | <code python> | + | - **(4p)** Créez un écran de dessin interactif à l'aide de points comme indiqué ci-dessous: |
- | from microbit import display, button_a, Image, temperature | + | * **(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 | |
- | while True: | + | * **(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 |
- | if button_a.was_pressed(): | + | * **Bonus**: |
- | display.scroll(temperature()) #displat the temperature | + | * **(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. |
- | elif display.read_light_level() > 100: #check the light level | + | * **(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. |
- | display.show(Image( #sun image | + | |
- | "90909:" | + | |
- | "09990:" | + | |
- | "99999:" | + | |
- | "09990:" | + | |
- | "90909")) | + | |
- | else: | + | |
- | display.clear() | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | ===== 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]]. | + | ====Solutions==== |
- | -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". | + | [[https://github.com/UPB-FILS-SdE2/Solutions|Solutions]] |
- | -É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]] | + | |
- | -É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.) | + | |
- | -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]]. | + | |