Thème : Informatique embarquée et objets connectés

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émentLes 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éthodeInstallation 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éthodeProgrammation 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.

1
# Ecrit ton programme ici ;-)
2
3
4
from microbit import *
5
6
# Initialisation des variables
7
start=False
8
capteur_fermé="F"
9
capteur_ouvert="F"
10
ouverture = False
11
fermeture=False
12
#Programme principal
13
while True:
14
    if button_a.is_pressed() and not ouverture and not fermeture: #BoutonA => demande d'ouverture
15
        ouverture=True
16
        print("Ouverture") #Envoie de l'ordre ouverture au PC
17
18
    if ...................? and not ouverture and not fermeture: #Bouton B => demande de fermeture
19
        fermeture=True
20
        ..................? #Envoie de l'ordre fermeture au PC
21
22
    if uart.any():
23
        msg_bytes=uart.read() # Lecture de la boite de réception des messages en provenance du PC
24
        reception = str(msg_bytes, "utf-8") #Réception message
25
        if reception:
26
            capteur_fermé=reception[0]
27
            capteur_ouvert=...............?
28
29
    if ouverture==True and capteur_ouvert=="T": #Si le vantail est en ouverture et que le capteur ouvert est activé
30
        print("arret")                          # micro:bit envoie l'ordre d'arréter l'ouverture
31
        ouverture=False
32
33
    if fermeture==True and capteur_fermé=="T":  #Si le vantail est en fermeture et que le capteur fermé est activé
34
        ..............?                         # micro:bit envoie l'ordre d'arréter l'ouverture
35
        fermeture=False
36
37

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.

1
# Ecrit ton programme ici ;-)
2
from microbit import *
3
4
# définition des images
5
INTERDIT = Image ('?????:''?????:''?????:''?????:''?????')
6
FLECHE = Image ('?????:''?????:''?????:''?????:''?????')
7
8
# Initialisation des variables
9
start=False
10
capteur_fermé="F"
11
capteur_ouvert="F"
12
ouverture = False
13
fermeture=False
14
while True:
15
    if button_a.is_pressed() and ouverture==False and fermeture==False: #ordre ouverture
16
        ouverture=True
17
        print("Ouverture") #Envoie de l'ordre ouverture au PC
18
19
    if button_b.is_pressed() and fermeture==False and ouverture==False: #ordre fermeture
20
        fermeture=True
21
        print("Fermeture") #Envoie de l'ordre fermeture au PC
22
23
    if uart.any():
24
        msg_bytes=uart.read()
25
        reception = str(msg_bytes, "utf-8") #Réception message
26
        if reception:
27
            capteur_fermé=reception[0]
28
            capteur_ouvert=reception[1]
29
30
    if ouverture==True and capteur_ouvert=="T":
31
        print("arret")
32
        ouverture=False
33
34
    if fermeture==True and capteur_fermé=="T":
35
        print("arret")
36
        fermeture=False
37
 
38
   if ..................?:  # Lorsque le vantail est ouvert une flèche doit clignoter à une fréquence f=2 Hz
39
        ................?    # affichage de la flèche
40
        sleep(......?)       # pause d'une demi-période (en ms) (la période T=1/f)
41
        ................?    # effacement de l'écran
42
        ................?    # pause d'une demi-période
43
44
45
    if reception="......?":  #Lorsque le vantail est en mouvement un sens interdit et une lampe doivent clignoter (2Hz)
46
        ................?    # affichage sens interdit
47
        ................?    # micro:bit envoie l'ordre d'allumer la lampe
48
        ................?      
49
        ................?
50
        ................?
51
        ................?
52
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimerRéalisé avec Scenari (nouvelle fenêtre) modèle documentaire TechnOpale