Intégration de l'environnement en entreprise: proposition ...
Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de...
Transcript of Ateliers SNT - Académie de Versailles · données reçues Proposition de correction Proposition de...
Ateliers SNT Informatique embarquée et objets connectés
Jeudi 21 Novembre 2019 - Découvrir Micro:bit
https://frama.link/SNTPMFStéphane [email protected]
Site de veille
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
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
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
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)
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)
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
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
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
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()
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
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()
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
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()
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.
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
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
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.
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)
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.
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.
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
#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 “:”
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
Comment utiliser l’interface de programmation ?App Inventor
2
http://code.appinventor.mit.edu/login/
1
3
SNT
Programme android de l’interface graphique
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
Fichier apk à installer
Fichier aia modifiable dans App Inventor
Connexion
Commande moteur
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)
SNT
Matériels mis en oeuvre