Une IHM simple pour une ouverture/fermeture de portail connecté
Cahier des charges du portail connecté avec ouverture à distance
La personne qui désire ouvrir à distance ce portail connecté, doit utiliser une application de son smartphone. Pour ouvrir ou fermer le vantail, il lui suffit d'utiliser l'écran tactile. De plus l'utilisateur reçoit du portail une information sur son état. Un "sens interdit" clignote lorsque le vantail est en mouvement, une flèche clignote lorsque le vantail est ouvert. Pour notre application, nous utiliserons un portail virtuel. | ![]() |
La programmation d'une telle application sur un smartphone étant trop difficile (et trop long) pour un élève de seconde, nous utiliserons une carte micro:bit qui simulera le smartphone. Le bouton A déclenchera l'ouverture, le bouton B déclenchera la fermeture, et l'afficheur à LED permettra de connaître l'état du portail. (Sens interdit clignotant si portail en mouvement, ou flèche clignotante si portail ouvert)
Programmation de l'informatique embarquée
Le vantail sera piloté par une carte micro:bit. Il y aura une liaison duplex entre la carte micro:bit et le PC. L'échange des informations se fera dans les deux sens. Le portail virtuel enverra à la carte micro:bit l'état du vantail (ouvert ou fermé), et la carte micro:bit enverra au PC les ordres de commandes des actionneurs moteurs et lampe. |
Complément : Les fonctions spécifiques au robot
Pour connaître l'état des capteurs, il faudra utiliser les instructions suivantes :
if uart.any():
msg_bytes=uart.read()
reception = str(msg_bytes, "utf-8") #Réception message
La variable reception est une chaîne de caractère (donc de type string) qui est envoyée par le PC à la carte micro :bit, et qui contient une information sur l'état des capteurs portail ouvert et portail fermé. Cette chaîne comporte deux caractères qui valent "T" ou "F" ("F" pour False ou "T" pour True) . Par exemple, si le portail est fermé, le capteur à contact de fermeture est activé (capteur fermé = True) mais pas le capteur d'ouverture (capteur ouvert = False), alors reception vaut "TF". Nous aurons trois possibilités : "FF" (portail en mouvement), "TF" (portail fermé) ou "FT" (portail ouvert).
La variable reception est une chaîne de caractère dont on peut extraire deux informations : capteur_fermé=reception[0] et capteur_ouvert=reception[1]
Pour commander les actionneurs du portail (des moteurs électriques) ou la lampe, on utilisera la fonction print qui permet à la carte micro:bit d'envoyer un message au PC.
print("Ouverture") => les moteurs sont mis en route dans le sens de l'ouverture
print("Fermeture") => les moteurs sont mis en route dans le sens de la fermeture
print("lampe_on") => La lampe rouge est allumée
print("lampe_off") => La lampe rouge est éteinte
Méthode : Installation du logiciel
Entrer dans le répertoire SNT_info_Embarquée, et lancer le programme START2.bat (cela a pour effet de lancer la partie virtuelle à programmer), normalement vous n'aurez plus besoin de le relancer par la suite, car à chaque modification du programme, il suffira de cliquer sur la route et d'appuyer sur la touche "R" (comme redémarrage) pour réinitialiser le système.
Méthode : Programmation de la carte Micro:bit
Lancer l'environnement de programmation « Mu » depuis le bureau et sélectionner le mode « BBC micro:bit ».
Nous programmerons la carte avec le langage Python et son module micro:bit.
Copier le programme ci-dessous et compléter le. Lorsque vous aurez terminé, faire valider et demander la correction.
Sauvegarder votre programme sous le nom portail1.py.
# Ecrit ton programme ici ;-)from microbit import *
# Initialisation des variablesstart=False
capteur_fermé="F"
capteur_ouvert="F"
ouverture = False
fermeture=False
#Programme principalwhile True:
if button_a.is_pressed() and not ouverture and not fermeture: #BoutonA => demande d'ouverture
ouverture=True
print("Ouverture") #Envoie de l'ordre ouverture au PC
if ...................? and not ouverture and not fermeture: #Bouton B => demande de fermeture
fermeture=True
..................? #Envoie de l'ordre fermeture au PC
if uart.any():
msg_bytes=uart.read() # Lecture de la boite de réception des messages en provenance du PC
reception = str(msg_bytes, "utf-8") #Réception message
if reception:
capteur_fermé=reception[0]
capteur_ouvert=...............?
if ouverture==True and capteur_ouvert=="T": #Si le vantail est en ouverture et que le capteur ouvert est activé
print("arret") # micro:bit envoie l'ordre d'arréter l'ouverture
ouverture=False
if fermeture==True and capteur_fermé=="T": #Si le vantail est en fermeture et que le capteur fermé est activé
..............? # micro:bit envoie l'ordre d'arréter l'ouverture
fermeture=False
Programmation de l'IHM afficheur et de l'IHM lampe
La lampe rouge du portail et l'afficheur à LED doivent permettre de connaître l'état du portail. Lorsque le vantail est en mouvement, un sens interdit doit clignoter sur la carte micro:bit ainsi que la lampe rouge du portail. Lorsque le vantail est ouvert, une flèche doit clignoter sur la carte micro:bit |
Créer un autre programme nommé portail2.py, l'enregistrer dans le même dossier que le précédent avec le code source ci-dessous.
Compléter le programme. Le principe du clignotement est simple : il s'agit d'allumer la lampe et/ou les DELs de l'afficheur, de faire une pause par exemple de 200 ms (instruction python : sleep(200)), puis d'éteindre la lampe et/ou d’effacer l'écran, puis de faire de nouveau une pause de 200 ms.
Transférer le programme sur la carte.
Tester et vérifier le fonctionnement.
# Ecrit ton programme ici ;-)from microbit import *
# définition des imagesINTERDIT = Image ('?????:''?????:''?????:''?????:''?????')
FLECHE = Image ('?????:''?????:''?????:''?????:''?????')
# Initialisation des variablesstart=False
capteur_fermé="F"
capteur_ouvert="F"
ouverture = False
fermeture=False
while True:
if button_a.is_pressed() and ouverture==False and fermeture==False: #ordre ouverture
ouverture=True
print("Ouverture") #Envoie de l'ordre ouverture au PC
if button_b.is_pressed() and fermeture==False and ouverture==False: #ordre fermeture
fermeture=True
print("Fermeture") #Envoie de l'ordre fermeture au PC
if uart.any():
msg_bytes=uart.read()
reception = str(msg_bytes, "utf-8") #Réception message
if reception:
capteur_fermé=reception[0]
capteur_ouvert=reception[1]
if ouverture==True and capteur_ouvert=="T":
print("arret")
ouverture=False
if fermeture==True and capteur_fermé=="T":
print("arret")
fermeture=False
if ..................?: # Lorsque le vantail est ouvert une flèche doit clignoter à une fréquence f=2 Hz
................? # affichage de la flèche
sleep(......?) # pause d'une demi-période (en ms) (la période T=1/f)
................? # effacement de l'écran
................? # pause d'une demi-période
if reception="......?": #Lorsque le vantail est en mouvement un sens interdit et une lampe doivent clignoter (2Hz)
................? # affichage sens interdit
................? # micro:bit envoie l'ordre d'allumer la lampe
................? ................? ................? ................?







