Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de...

30
Ateliers SNT Informatique embarquée et objets connectés Jeudi 21 Novembre 2019 - Découvrir Micro:bit

Transcript of Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de...

Page 1: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Ateliers SNT Informatique embarquée et objets connectés

Jeudi 21 Novembre 2019 - Découvrir Micro:bit

Page 2: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

https://frama.link/SNTPMFStéphane [email protected]

Page 4: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Réaliser une microstation environnementale SNT

Acquérir les données de capteurs

Identifier les algorithmes de contrôle

Commande d’actionneurs

réaliser une IHM

Page 5: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Communication entre les cartes par radio

Certains programmes python ont moins de fonctionnalités en raison d’un manque de mémoire de la carte micro:bit

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Programmes Makecode et Python interopérablesSNT

Utiliser la version béta de l’éditeur python pour ouvrir les fichiers

Pour que les programmes python et Makecode puissent communiquer par onde radio, un module python a été utilisé ,cette fonctionnalité est utilisable en programmant les cartes micro:bit avec la fonction WebUSB qui est fonctionnelle sous Chrome et Windows 10 ou MacOS

Page 6: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Première versionUne carte par fonction (mesure, affichage, communication avec l’IHM…)En python, la carte de contrôle pourra envoyer des données vers l’IHMMais ne pourra pas en recevoir (manque de mémoire).La version MakeCode dispose d’une communication Bluetooth bi-directionnelle.

SNT

Acquérir les données de capteurs

Identifier les algorithmes de contrôle

Commande d’actionneurs

réaliser une IHM

Page 7: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

SNT

Acquérir les données de capteurs

Identifier les algorithmes de contrôle

● Base de départ

● Proposition de correction

● Base de départ

● Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Acquérir les données des capteurs et les afficher(température)

Page 8: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Acquérir les données des capteurs et les afficher(température)

SNT

from microbit import *

def bouton_A_affiche_la_temperature():

if button_a.is_pressed():

display.scroll(temperature())

while True:

bouton_A_affiche_la_temperature()

boucle du programme principal

Appel d’une fonction (retour sur l’afficheur de la carte)

Page 9: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Acquérir les données des capteurs et les afficher(température + luminosité)

SNT

Acquérir les données de capteurs

Identifier les algorithmes de contrôle

● Base de départ

● Proposition de correction

● Base de départ

● Proposition de correction

Page 10: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Acquérir les données des capteurs et les afficher(température + luminosité+ qualité d’air)

SNT

Acquérir les données de capteurs

Identifier les algorithmes de contrôle

● Base de départ

● Proposition de correction

● Base de départ

● Proposition de correction

Page 11: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Cherchez l’erreur....SNT

from microbit import *

def bouton_A_affiche_la_temperature():

if button_a.is_pressed():

display.scroll(temperature())

def bouton_B_affiche_la_luminosite():

if button_b.is_pressed():

display.scroll(display.read_light_level())

def secousse_affiche_qualite_air():

if accelerometer.was_gesture("shake"):

display.scroll(pin0.read_analog())

while True:

bouton_A_affiche_la_temperature()

bouton_B_affiche_la_luminosite()

secousse_affiche_qualite_air()

def bouton_A_affiche_la_temperature():

if button_a.is_pressed():

display.scroll(temperature)

def bouton_B_affiche_la_luminosite()

if button_b.is_pressed():

display.scroll(display.read_light_level()

def secousse_affiche_qualite_air():

if accelerometer.was_gesture("shake"):

display.scroll(pin0.read_analog())

while True:

bouton_A_affiche_la_temperature()

bouton_B_affiche_la_luminosite()

secousse_affiche_qualite_air

Page 12: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Acquérir les données des capteurs et les afficher(température + luminosité + qualité d’air)

SNT

from microbit import *

def bouton_A_affiche_la_temperature():

if button_a.is_pressed():

display.scroll(temperature())

def bouton_B_affiche_la_luminosite():

if button_b.is_pressed():

display.scroll(display.read_light_level())

def secousse_affiche_qualite_air():

if accelerometer.was_gesture("shake"):

display.scroll(pin0.read_analog())

while True:

bouton_A_affiche_la_temperature()

bouton_B_affiche_la_luminosite()

secousse_affiche_qualite_air()

Page 13: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Afficher une alerte en fonction de la qualité de l’airSNT

● Base de départ

● Proposition de correction

● Base de départ

● Proposition de correction

Si le niveau de CO2 mesuré est > 100Alors, afficher un message d’alerte

Sinonéteindre l’afficheur

Page 14: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Afficher une alerte en fonction de la qualité de l’airSNT

def alerte_qualite_air():

if pin0.read_analog() >100:

display.show(Image.SAD)

else:

display.clear()

while True:

bouton_A_affiche_la_temperature()

bouton_B_affiche_la_luminosite()

secousse_affiche_qualite_air()

alerte_qualite_air()

Page 15: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Contrôle et correction des donnéesSNT

● Base de départ

● Proposition de correction

● Base de départ

● Proposition de correction

# détection d’erreurSi le niveau de CO2 mesuré est > 100 et différent de 255

Alors, afficher un message d’alerteSinon

éteindre l’afficheur

Page 16: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Afficher une alerte en fonction de la qualité de l’airSNT

def alerte_qualite_air():

if pin0.read_analog() >100 and pin0.read_analog() != 255:

display.show(Image.SAD)

else:

display.clear()

while True:

bouton_A_affiche_la_temperature()

bouton_B_affiche_la_luminosite()

secousse_affiche_qualite_air()

alerte_qualite_air()

Page 17: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Transmission de données entres cartes par radioSNT

Carte de contrôleCartes de

mesure des capteurs

Envoi des mesures à chaque seconde

Utilisateur

Affichage des données reçues ● Proposition de

correction● Proposition de

correction

Cartes de mesure

● Proposition de correction

● Proposition de correction

Cartes de contrôle

La carte micro:bit n’a pas assez de mémoire pour utiliser la fonction radio et un afficheur Oled avec python.Pour afficher les données, la console série est utilisée.Ce souci n’est pas présent en programmant avec MakeCode.

Page 18: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Envoi des donnéesSNT

from microbit import *

import make_radio

radio = make_radio.MakeRadio(group=1)

radio.off()

radio.on()

def envoi_donnee_radio(valeur1, valeur2, valeur3):

radio.send_value("Temp",valeur1)

sleep(500)

radio.send_value("Lum",valeur2)

sleep(500)

radio.send_value("P0",valeur3)

sleep(500)

while True:

bouton_A_affiche_la_temperature()

bouton_B_affiche_la_luminosite()

secousse_affiche_qualite_air()

alerte_qualite_air()

envoi_donnee_radio(temperature(),display.read_light_level(),pin0.read_analog())

La fonction comporte des paramètres

Page 19: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Réception des donnéesSNT

La fonction comporte des paramètres

reception = []

donnees_recues = {} #Dictionnaire utilisé pour réceptionner les données envoyées par radio

#Fonction permettant d'ajouter/mettre à jour le dictionnaire stockant les données reçues par radio

def reception_des_donnees_radio():

reception = []

reception.append(donnee)

donnees_recues.update(dict(reception))

return donnees_recues

while True:

donnee = radio.receive_packet()

#test de réception d'une donnée par radio

if donnee != None:

reception_des_donnees_radio() #Parcours de chaque donnée reçue par radio et affichage dans la console série

for clef, valeur in donnees_recues.items():

print ("la variable recue : " + clef + " a pour valeur : " + str(valeur))

#test de la valeur transmise par le capteur de qualité d'air

if "P0" in clef and valeur > 100:

display.show(Image.SAD)

elif "P0" in clef and valeur <= 100:

display.clear()

print("\n") #Saut de ligne

Page 20: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

SNT

Commande d’actionneurs

réaliser une IHM

Carte avec afficheur neopixel

Cartes de mesure des

capteurs

Envoi de mesures toutes les 1 seconde

Utilisateur

Affichage lumineux correspondant à la

qualité de l’air

● Proposition de correction

● Proposition de correction

Programme de la carte gérant l’affichage

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Contrôle d’un actionneur : Indiquer la qualité de l’air par un retour lumineux

La donnée issue du capteur de qualité d’air, sur P0, est utilisée ici. L’afficheur neopixel se colorera avec des nuances allant du rouge au vert suivant la donnée reçue du capteur.Une boucle bornée “for” est utilisée pour allumer successivement un seul pixel de l’anneau lumineux.

Page 21: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

réception des données: Indiquer la qualité de l’air par un retour lumineux

SNT

from microbit import *

import make_radio

import neopixel

np = neopixel.NeoPixel(pin2, 24)

def Affichage_anneau_lumineux(donnee_a_afficher):

#changement d'échelle de la donnée à afficher [0-1023] ->[0-255]

#afin de la rendre compatible avec l'afficheur NeoPixel

donnee_a_afficher = int(donnee_a_afficher * 255 / 1023)

pixel=0

for pixel in range(23):

np.clear()

np[pixel] = (donnee_a_afficher, 255 - donnee_a_afficher, 0)

np.show()

sleep(100)

while True:

[...]

for clef, valeur in donnees_recues.items():

if "P0" in clef:

Affichage_anneau_lumineux(valeur)

Page 22: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

SNT

● Proposition de correction

● Proposition de correction

Programme de la carte gérant la connexion Bluetooth

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Ajouter une interface Homme/machine (IHM)Affichage des données sur l’écran d’une tablette et contrôle de la consigne d’un servomoteur

Les données sont échangées entre la carte de contrôle et la tablette par bluetooth.

Un module bluetooth HC06 est utilisé avec le shield compatible.

IHMTablette Android

Utilisateur

Visualisation des valeurs sur l’écran

Carte de contrôle

Envoi des données mesurées

Contrôle des mouvements d’un moteur

Consigne de rotation moteur

En python, L’IHM ne récupère que les données, il n’y a pas assez de mémoire pour avoir un échange bidirectionnel. Une version, sans radio mais échange bidirectionnel par bluetooth est proposée page suivante.

Page 23: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésIAjouter une interface Homme/machine (IHM)

Affichage des données sur l’écran d’une tablette et contrôle de la consigne d’un servomoteur

SNT

def envoi_donnee_serie(nom_donnee,valeur_donnee):

uart.init(9600, tx=pin8, rx=pin12)

uart.write(str(nom_donnee) + ":" + str(valeur_donnee))

uart.write('\r' + '\n')

Configuration du port série pour utiliser le module bluetooth

réception des donnéesIdentification et séparation du nom de donnée et de la valeur associéeMakeCode uniquement dans la version avec radio.

Page 24: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Informatique embarquée et objets connectésInformer sur la qualité de l’air

Version 2 Python : réception Bluetooth bidirectionnelle sans radioDans cette version, une seule carte réceptionne les données et communique avec l’IHM. La réception des données est possible et est utilisée pour commander un servomoteur.La version MakeCode précédente intègre déjà cette fonction de réception et n’est pas pas à nouveau mise en téléchargement.

SNT

Identifier les algorithmes de contrôle

Commande d’actionneurs

réaliser une IHM

V2 avec bluetooth bi directionnel mais sans radio

Programme de la carte gérant la connexion Bluetooth

Les données sont échangées entre la carte de contrôle et la tablette par bluetooth.

Un module bluetooth HC06 est utilisé avec le shield compatible.

IHMTablette Android

Utilisateur

Visualisation des valeurs sur l’écran

Carte de contrôle

Envoi des données mesurées

Contrôle des mouvements d’un moteur

Consigne de rotation moteur

Page 25: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

#lecture données bluetooth

def reception_des_donnees_BT(donnee_a_extraire):

nom_et_valeur_BT = str(donnee_a_extraire, 'UTF-8')

nom_et_valeur_BT = nom_et_valeur_BT.split(":")

reception_BT = []

reception_BT.append(nom_et_valeur_BT)

donnees_recues_BT.update(dict(reception_BT))

return donnees_recues_BT

while True:

donnee_BT = uart.read()

if donnee_BT != None:

reception_des_donnees_BT(donnee_BT)

#Affichage dans la console série

uart.init(115200)

for clef, valeur in donnees_recues_BT.items():

print("la variable recue " + clef + " a pour valeur " + str(valeur))

Informatique embarquée et objets connectésIAjouter une interface Homme/machine (IHM)

Affichage des données sur l’écran d’une tablette et contrôle de la consigne d’un servomoteur

SNT

Réception des données par bluetoothLe nom et la valeur de la variable envoyée sont séparés par “:”

Page 26: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

def servo(angle,broche):

broche.set_analog_period(20) #pour permettre la commande d'un servomoteur

broche.write_analog(angle)

#contrôle du servomoteur en fonction de la donnée arrivée par Bluetooth

for clef, valeur in donnees_recues_BT.items():

print("la variable recue " + clef + " a pour valeur " + str(valeur))

#mise à jour de la position du servomoteur

if "servo" in clef:

servo(int(valeur),pin2)

Informatique embarquée et objets connectésAjouter une interface Homme/machine (IHM)

Affichage des données sur l’écran d’une tablette et contrôle de la consigne d’un servomoteur

SNT

Contrôle d’un servomoteur en fonction de la donnée reçue depuis l’IHM

Page 27: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Comment utiliser l’interface de programmation ?App Inventor

2

http://code.appinventor.mit.edu/login/

1

3

Page 29: Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de correction Cartes de mesure Proposition de correction Proposition de correction

Version 1 version 2

Restriction système d’exploitation

Windows 10 (ou Mac OS) et Chrome

Aucune restriction, fonctionne sur toutes les versions de Windows

Mesure des données Sur carte distante, transmission radio

Sur l’unique carte de contrôle

Commande servomoteur depuis l’IHM

Non, pas de réception de données en Bluetooth

Oui

Anneau Neopixel Oui Non développé mais réalisable. La carte de contrôle peut le gérer

Communication radio Oui Non

Bluetooth Oui, uniquement pour envoyer des données vers l’IHM

Oui, envoi et réception de données avec l’IHM

Programmes microbit Capteur, anneau, carte de contrôle

Carte de contrôle et mesure

Programme App Inventor

SNT

Réaliser une microstation environnementale

Synthèse des fonctionnalités avec les programmes Python(la version MakeCode présente toutes les fonctionnalités)