Micro:bit

Maintenant que vous maitrisez, choisissez les mini-projets que vous voulez

Téléchargez la bibliothèque grove ici
puis 4disgits

Pour utiliser une bibliothèque, vous devez la placer sur la carte, voici comment faire:

Coller les fichiers décompressés ( ici micro_grove et 4digits) dans le répertoire mu_code de votre espace personnel :

    Pour le trouver :
    • taper C: dans l'explorateur de fichier.
    • puis cliquer sur Users ou Utilisateurs
    • puis cliquer sur votre nom d'utilisateur
    • puis cliquer sur mu_code

Pour vérifier , vous pouvez regarder dans l'onglet fichier du logiciel MU, vos librairies devraient apparaitre.

Il suffit maintenant de les glisser de l'ordinateur à la carte

Avancez à votre rythme et faite appel au professeur pour vérifier chaque fin de projet.

Pour aller plus loin, vous pouvez imaginer d'autre situation simulant d'autres fonctionnements ou utilisations

Contrôle la lumière

Description Dans cette démo, tu vas apprendre à utiliser les boutons de la micro:bit pour allumer ou éteindre une Led

from microbit import *
# on definit une variable
etat_led = 0
while True:
    if button_a.is_pressed():
        # on met la led à l'état 1 (5V)
        etat_led = 1
    if button_b.is_pressed():
        # on met la led à l'état 0 (0V)
        etat_led = 0
    # on recopie l'état de la led sur la broche P0
    pin0.write_digital(etat_led)
    sleep(100)

                           
Appuie sur le bouton A puis sur le bouton B pour vérifier que le programme fonctionne. Défi : Quand on appuie simultanément sur les 2 boutons, la led est éteinte. On dit que B est prioritaire. Comment faut-il modifier le programme pour que A soit prioritaire ? Saurais-tu modifier le programme afin de n’utiliser que le bouton A pour allumer et éteindre la Led ? Petit conseil : utilise was-pressed() à la place de is_pressed() !

Contrôle la luminosté

Description Dans cette démo, tu vas apprendre à utiliser les leds de la micro:bit pour indiquer le niveau de luminosité

from microbit import *
from micro_grove import luminosite , affiche_jauge
while True:
    # on récupère la valeur fournie par le capteur
    mesure = luminosite(pin0)
    # on affiche le niveau de luminosité sur les leds
    affiche_jauge(mesure, 100)
    sleep(50)
 
                            
Observe les leds lorsque tu montes et descends ta main au dessus du capteur. Que se passe t-il quand tu modifies la valeur 100 dans la fonction “affiche _jauge” ? (essaie avec 10 puis 200)

Éclairage automatique

Description Dans cette démo, tu vas apprendre à allumer une led lorsque la nuit tombe.

from microbit import *
from micro_grove import luminosite
while True:
    # le capteur est branché sur la broche P1
    if luminosite(pin1) < 10:
        etat_led = 1
    else:
        etat_led = 0
    # on recopie l'état de la led sur la broche P0
    pin0.write_digital(etat_led)
    sleep(100)
 
                            
Vérifie que la led s’allume si tu recouvres le capteur, ou si tu l’enfermes dans ta main. Défi Modifie le programme pour que la led s’allume plus tôt quand la nuit tombe, donc quand il fait moins sombre.

Un peu de musique

Description Dans cette démo, tu vas apprendre à utiliser les 2 boutons de la micro:bit pour jouer de la musique

from microbit import *
from music import *
from micro_grove import bip
# les notes sont définies en Scientific Pitch Notation (SPN).
maNote = "c4:1" # c’est un DO
while True:
    	if button_a.is_pressed() and not(button_b.is_pressed()):
            # on joue une note
            play(maNote)
        elif button_b.is_pressed()and not(button_a.is_pressed()):
            # on joue une mélodie pré-enregistrée
            play(PUNCHLINE)
        elif button_a.is_pressed() and button_b.is_pressed():
            # on emet un beep
            bip()
            sleep(500)
 
                            
Tu dois entendre des sons différents quand tu appuies seulement sur le bouton A, ou seulement sur le bouton B puis sur les 2 boutons en même temps Défi Après une recherche sur internet modifie le programme pour jouer la note “LA” à la place du DO Ajoute la définition de la mélodie maMelodie = [“C4:4”, "D", "E", "C", "C", "D", "E", "C", "E", “F”], puis modifie le programme pour jouer cette mélodie quand on appuie sur le bouton B.

Gardien des secrets

Description Dans cette démo, tu vas apprendre à créer une alarme. Si quelqu’un rentre dans ta chambre, une led s’allumera et une “sirène” retentira

from microbit import *
from micro_grove import mesure_temps_A_R
from music import play
maNote = "F6:1"
while True:
    # Valeur fournie par le capteur ultra-sons
    t = mesure_temps_A_R(pin1)
    distance = t * 0.034328 / 2 # cm
    if distance < 100:
        # on detecte une présence
        for i in range(5):
            pin2.write_digital(1)
            play(maNote)
            sleep(150)
            pin2.write_digital(0)
            sleep(150)
    sleep(500)
 
                            
Vérifie que quand tu passes ta main lentement devant le capteur à ultra-sons, l’alarme s’enclenche et s’arrête au bout d’un certain temps Défi : Modifie le code pour que l’alarme dure 2 fois plus longtemps, sans changer la fréquence du clignotement de la led. Modifie de nouveau le code pour que la led clignote 3 fois plus vite.

De toutes les couleurs

Description Dans cette démo, tu vas apprendre à utiliser un ruban à leds.Il faut alimenter la carte micro:bit avec des piles pour avoir suffisamment de puissance.

from microbit import *
from micro_grove import *
import neopixel
np = neopixel.NeoPixel(pin1, 30)
np.clear()
rouge = (255, 0, 0)
vert = (64, 255, 12)
magenta = (219, 0, 115)
while True:
    if button_a.is_pressed():
        couleur = rouge
    elif button_b.is_pressed():
        couleur = vert
    else:
        couleur = magenta
    # on calcule le nbre de leds à allumer
    potentiometre = position_curseur(pin0)
    nombre_de_leds = (int)(potentiometre / 3.3)
    #on eteint tout
    for x in range(30):
        np[x] = (0, 0, 0)
    # on allume le nombre de leds calculé
    for x in range(nombre_de_leds):
        np[x] = couleur
    # on applique les changements sur le ruban
    np.show()
    sleep(100)
 
                            
Observe l’effet d’une action sur le potentiomètre, puis le bouton A et enfin le bouton B Défi : Recherche sur Internet le code RVB de la couleur BLEU, et modifie le programme pour allumer les leds en bleu quand on appuie sur le bouton B

Commande à distance.

Description Dans cette démo, tu vas apprendre à utiliser une deuxième carte microbit pour agir à distance.

Code : carte émettrice

from microbit import *
import radio
#on choisit un canal
radio.config(channel=22)
radio.on()
while True:
    if button_a.was_pressed():
        radio.send("Allume")
    if button_b.was_pressed():
        radio.send("Eteint")
    sleep(100)
 
                            

Code : carte réceptrice

from microbit import *
import radio
#on choisit un canal
radio.config(channel=22)
radio.on()
etat_led = 0
while True:
    message = radio.receive()
    if message == "Allume":
        etat_led = 1
    if message == "Eteint":
        etat_led = 0
    pin0.write_digital(etat_led)
    sleep(100)
 
                            
S’il y a d’autres cartes microbit qui utilisent a radio à proximité, choisit un autre canal entre 0 et 83. Vérifie que ta télécommande fonctionne bien. Essaie de trouver par expérience la portée maximale de la radio. Défi : Ajoute un feedback ! Pour faire ça, affiche l’état de la led (A ou E) sur la matrice à led de la carte émettrice

Éclairage automatique économique

Description Dans cette démo, tu vas apprendre à allumer un éclairage extérieur quand il fait nuit, mais uniquement si on détecte la présence de quelqu’un. Ça permet d’économiser l’énergie

from microbit import *
from micro_grove import *
etat_led = 0
while True:
    # Valeur fournie par le capteur ultra-sons
    t = mesure_temps_A_R(pin1)
    distance = t * 0.034328 / 2 # cm
    # Valeur fournie par le capteur de luminosité
    mesure_lum = luminosite(pin2)
    if mesure_lum < 10:
        # il fait nuit
        if distance < 100:
            # on detecte une présence
            etat_led = 1
        else:
            # il n'y a personne
            if etat_led == 1:
                sleep(5000)
                etat_led = 0
    else:
        # il ne fait pas nuit
        etat_led = 0
    pin0.write_digital(etat_led)
    sleep(1000)
 
                            
Vérifie que la led s’allume quand on recouvre le capteur de luminosité et qu’on passe sa main devant le capteur à ultra-sons. Défi : En passant ta main plus ou moins vite devant le capteur à ultra-sons, peux tu expliquer à quoi sert la dernière ligne ? Peux tu modifier le code pour que la led reste allumée 10 secondes après qu’on s’est éloigné du capteur à ultra-sons.

Pour l'afficheur (code à séparer)

from microbit import *

ASCII_4DD_NUM = bytearray(b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F')

def start4dd(clk,dio):
  dio.write_digital(0)
  clk.write_digital(0)

def stop4dd(clk,dio):
  dio.write_digital(0)
  clk.write_digital(1)
  dio.write_digital(1)

def writeByte4dd(clk,dio,cmd):
  for i in range(8):
    dio.write_digital((cmd>>i)&1)
    clk.write_digital(1)
    clk.write_digital(0)
  clk.write_digital(0)
  clk.write_digital(1)
  clk.write_digital(0)

def command4dd(clk,dio,cmd):
  start4dd(clk,dio)
  writeByte4dd(clk,dio,cmd)
  stop4dd(clk,dio)

def write4dd(clk,dio,s,p=0):
  if not 0<=p<=3:
    raise ValueError('Position out of range')
  command4dd(clk,dio,0x40)
  start4dd(clk,dio)
  writeByte4dd(clk,dio,0xC0|p)
  for i in s:
    writeByte4dd(clk,dio,i)
  stop4dd(clk,dio)
  command4dd(clk,dio,0x88|6)

def tm1637_init(clk,dio):
  command4dd(clk,dio,0x40)
  command4dd(clk,dio,0x88|6)
def tm1637_encodeNum(str):
  s = bytearray(len(str))
  for i in range(len(str)):
    o = ord(str[i])
    if o >= 48 and o <= 57:
      s[i] = ASCII_4DD_NUM[o-48]
  return s
tm1637_init(pin0, pin14)

def tm1637_setNumber(clk, dio, n):
  if not -999 <= n <= 9999:
    raise ValueError('Number out of range')
  write4dd(clk, dio, tm1637_encodeNum('{0: >4d}'.format(int(n))))

tm1637_setNumber(pin0, pin14, 1024)

while True:
  pass

  #temperature
  from microbit import *

ASCII_4DD_NUM = bytearray(b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F')

def start4dd(clk,dio):
  dio.write_digital(0)
  clk.write_digital(0)

def stop4dd(clk,dio):
  dio.write_digital(0)
  clk.write_digital(1)
  dio.write_digital(1)

def writeByte4dd(clk,dio,cmd):
  for i in range(8):
    dio.write_digital((cmd>>i)&1)
    clk.write_digital(1)
    clk.write_digital(0)
  clk.write_digital(0)
  clk.write_digital(1)
  clk.write_digital(0)

def command4dd(clk,dio,cmd):
  start4dd(clk,dio)
  writeByte4dd(clk,dio,cmd)
  stop4dd(clk,dio)

def write4dd(clk,dio,s,p=0):
  if not 0<=p<=3:
    raise ValueError('Position out of range')
  command4dd(clk,dio,0x40)
  start4dd(clk,dio)
  writeByte4dd(clk,dio,0xC0|p)
  for i in s:
    writeByte4dd(clk,dio,i)
  stop4dd(clk,dio)
  command4dd(clk,dio,0x88|6)

def tm1637_init(clk,dio):
  command4dd(clk,dio,0x40)
  command4dd(clk,dio,0x88|6)
def tm1637_encodeNum(str):
  s = bytearray(len(str))
  for i in range(len(str)):
    o = ord(str[i])
    if o >= 48 and o <= 57:
      s[i] = ASCII_4DD_NUM[o-48]
  return s
tm1637_init(pin0, pin14)

def tm1637_setTemp(clk, dio, n):
  if n<-9:
    write4dd(clk, dio, [0x38,0x3F])
  elif n>99:
    write4dd(clk, dio, [0x76,0x06])
  else:
    write4dd(clk, dio, tm1637_encodeNum('{0: >2d}'.format(int(n))))
  write4dd(clk, dio, [0x63,0x39], 2)

tm1637_setTemp(pin0, pin14, int(temperature()))

while True:
  pass
  #horloge

from microbit import *

chrono0 = 0
#Warning, the clock is recovered by browser when micro:bit is flashed.
#If micro:bit is powered off, time will not flow.
MIN_START = 40
HOUR_START = 7
ASCII_4DD_NUM = bytearray(b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F')

def start4dd(clk,dio):
  dio.write_digital(0)
  clk.write_digital(0)

def stop4dd(clk,dio):
  dio.write_digital(0)
  clk.write_digital(1)
  dio.write_digital(1)

def writeByte4dd(clk,dio,cmd):
  for i in range(8):
    dio.write_digital((cmd>>i)&1)
    clk.write_digital(1)
    clk.write_digital(0)
  clk.write_digital(0)
  clk.write_digital(1)
  clk.write_digital(0)

def command4dd(clk,dio,cmd):
  start4dd(clk,dio)
  writeByte4dd(clk,dio,cmd)
  stop4dd(clk,dio)

def write4dd(clk,dio,s,p=0):
  if not 0<=p<=3:
    raise ValueError('Position out of range')
  command4dd(clk,dio,0x40)
  start4dd(clk,dio)
  writeByte4dd(clk,dio,0xC0|p)
  for i in s:
    writeByte4dd(clk,dio,i)
  stop4dd(clk,dio)
  command4dd(clk,dio,0x88|6)

def tm1637_init(clk,dio):
  command4dd(clk,dio,0x40)
  command4dd(clk,dio,0x88|6)
def tm1637_encodeNum(str):
  s = bytearray(len(str))
  for i in range(len(str)):
    o = ord(str[i])
    if o >= 48 and o <= 57:
      s[i] = ASCII_4DD_NUM[o-48]
  return s
def tm1637_setClock(clk, dio, h, mn, colon=True):
  segs = tm1637_encodeNum('{0:0>2d}{1:0>2d}'.format(h, mn))
  segs[1] |= 0x80
  write4dd(clk, dio, segs)
def tm1637_getTime():
  mn=0
  h=0
  min0 = (running_time()-chrono0) / 1000 / 60
  h0 = min0/60
  last_mins = MIN_START + int(min0) - (int(h0)*60)
  if last_mins > 59:
    mn = last_mins-60
    h = HOUR_START + int(h0) + 1
  else:
    mn = last_mins
    h = HOUR_START + int(h0)
    return h,mn
tm1637_init(pin0, pin14)

tm1637_setClock(pin0, pin14, tm1637_getTime()[0], tm1637_getTime()[1])

while True:
  pass




C'est parti pour le projet

Pour rendre compte de votre travail, utilisez l'architecture html (ne modifiez pas le CSS)ici

C'est une base, vous pouvez ajouter des parties.