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

Programmation d'un système embarqué

Le robot suiveur de ligne

Embarquer l'informatique dans les objets a beaucoup d'avantages : simplifier leur fonctionnement, leur donner plus de possibilités d'usage et de sûreté, et leur permettre d'intégrer de nouvelles possibilités à matériel constant par simple modification de leur logiciel. Après avoir transformé les chaînes de montage des automobiles et les avions dans les années 90, l'informatique intervient maintenant dans des domaines toujours plus nombreux : automobile, réseau ferroviaire et transports urbains, domotique, robotique, loisirs...

Nous allons illustrer ce problème avec un petit robot équipé de deux capteurs de lignes noires qui vont renseigner l'informatique embarqué sur la position du robot par rapport à la ligne.

Le robot est aussi équipé de deux actionneurs, en l’occurrence deux moteurs à courant continu dont les rotors (axes des moteurs) sont liés mécaniquement aux roues gauche et droite afin de se diriger.

Principe de fonctionnement du module de détection de marquage au sol

Le module de détection de marquage au sol permet de détecter un marquage sombre tracé au sol. Il est constitué par deux photo-transistors et deux DEL infrarouges placés en ligne et orientés vers le sol. Les DEL émettent un rayonnement infrarouge qui sera absorbé par un marquage noir au sol ou bien au contraire sera réfléchi par des zones claires. Les photo-transistors associés à chaque DEL détectent ou non le rayonnement infrarouge.

Le circuit intégré au capteur fournira une information de type tout ou rien (TOR) : True si détection ligne noire, False sinon.

Les actionneurs du robot suiveur de ligne

Les petits robots de ce type sont équipés de motoréducteurs à courant continu (moteur + réducteur de vitesse à engrenages), qui vont permettre de faire tourner les roues dans les deux sens à vitesse variable. Si les roues tournent à la même vitesse et dans le même sens le robot va tout droit, si la vitesse de rotation d'une des roues augmente, le robot tourne.

L'algorithme du calculateur de bord

L'algorithme le plus courant d'un système embarqué s'écrit de la manière suivante

Initialiser les actionneurs à leurs positions de départ

Tant que vrai (boucle infinie)

  • Lire les informations des capteurs

  • Traiter les informations

  • Calculer les informations pour les actionneurs

  • Écrire ces informations sur les actionneurs

Programmation de l'informatique embarquée

Le robot 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 robot virtuel enverra à la carte micro:bit l'état des capteurs de ligne, et la carte micro:bit enverra au PC les ordres de commandes des actionneurs moteurs.

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 de ligne. Cette chaîne comporte deux caractères : "F" pour False ou "T" pour True. Par exemple si le capteur gauche détecte la ligne (capteur gauche = True) mais pas le capteur droit (capteur droit = False), alors reception vaut "TF". Nous aurons trois possibilités : "FF", "TF" ou "FT".

Pour commander la vitesse et le sens des moteurs on utilisera la fonction print qui permet à la carte micro:bit d'envoyer un message au PC. Par exemple la chaîne de caractère "motD=145" (avec motD pour moteur droit, et un nombre compris entre 128 et 255 pour définir la vitesse de rotation du moteur)

  • print("motG=128") ; print("motD=128") => le mobile est à l'arrêt, le moteur gauche et le moteur droit ne sont pas alimentés

  • print("motG=255") ; print("motD=255")=>le mobile va se déplacer à pleine vitesse en avant

  • print("motG=160") ; print("motD=160")=>le mobile va se déplacer à vitesse moyenne en avant

  • print("motG=160") ; print("motD=200")=>Le moteur droit tourne plus vite, le mobile tourne à gauche

  • print("motG=200") ; print("motD=160")=>Le moteur gauche tourne plus vite, le mobile tourne à droite

Méthodeinstallation du logiciel et organisation de l'espace de travail

  • Dans le répertoire documents en consultation de votre classe se trouve un dossier SNT_info_Embarquée.

  • Copier/coller ce dossier sur le disque dur de votre PC (directement sur c :), si un message vous indique que ce répertoire est déjà présent, annuler le transfert.

  • Une fois la copie terminée, entrez dans le répertoire SNT_info_Embarquée, et lancer le programme START1.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 ou déconnexion intempestive de la carte, il suffira de cliquer sur la piste et d'appuyer sur la touche "R" (comme redémarrage) pour réinitialiser le système.

  • Pour programmer la carte micro:bit, nous utiliserons le logiciel Mu, il faudra copier/coller le programme ci-dessous, le compléter et le sauvegarder sous le nom suivideligne1.py

L'algorithme qui permet à un robot de suivre une ligne est résumé par l'image ci-contre :

  1. Si aucun des capteurs ne détecte la ligne le robot va tout droit

  2. Si le capteur droit détecte la ligne, le robot doit tourner à droite

  3. Si le capteur gauche détecte la ligne, le robot doit tourner à gauche

Compléter le programme ci-dessous et transférer-le dans la carte afin de le tester.

1
# Ecrit ton programme ici ;-)
2
3
from microbit import *
4
while True:
5
    if uart.any():
6
        msg_bytes=uart.read() # Lecture de la boite de réception des messages en provenance du PC
7
        reception = str(msg_bytes, "utf-8") #Réception message
8
        if reception=="FT": # le capteur droit détecte la ligne, le robot doit tourner à droite
9
            print("motG=200")   #Il faut augmenter la vitesse du moteur gauche pour tourner à droite
10
            print("motD=160")
11
        elif ...............? : # le capteur gauche détecte la ligne, le robot doit tourner à gauche
12
             ...............? 
13
             ...............? 
14
        elif ...............? : #  aucun des capteurs ne détecte la ligne le robot va tout droit
15
             ...............? 
16
             ...............? 
17
18
19

Réalisation d'une IHM pour commander le robot

L'IHM sera constituée des boutons A et B et de l'afficheur à DELs de la carte.

Le bouton A, devra mettre en route le robot, et le bouton B arrêtera ce dernier.

Quand à l'afficheur, il nous indiquera si le robot va en avant, à gauche ou à droite.

Créer un autre programme nommé suivideligne2.py, l'enregistrer dans le même dossier que le précédent avec le code source ci-dessous.

Compléter le programme (les images GAUCHE et DROITE sont à faire après avoir étudié l'image AVANT)

  • Transférer ce programme sur la carte.

  • Tester et vérifier le fonctionnement.

1
# Ecrit ton programme ici ;-)
2
3
from microbit import *
4
Avant = Image(
5
"00000:"
6
"00000:"
7
"00000:"
8
"00900:"
9
"09090")
10
Gauche = Image(
11
'?????:'
12
'?????:'
13
'?????:'
14
'?????:'
15
'?????:)
16
Droite = Image(
17
'?????:'
18
'?????:'
19
'?????:'
20
'?????:'
21
'?????')
22
start=False
23
while True:
24
    if button_a.is_pressed() and start==False: # Bouton A appuyé : top départ
25
        start=True
26
        print("motG=160") #Le robot va en avant à vitesse moyenne
27
        print("motD=160")
28
        display.show(Avant) # On affiche l'image AVANT
29
    if .................? and start==True: # Bouton B appuyé : Arrêt du système
30
        start=False
31
        print("motG=???")  #On stoppe les moteurs du robot
32
        print("motD=???")
33
        display.clear()  #On efface l'afficheur
34
35
    if uart.any():
36
        msg_bytes=uart.read()
37
        reception = str(msg_bytes, "utf-8") #Réception message
38
        if not start:  # Si le système est à l'arrêt, le robot ne bouge pas...
39
            print("motG=128")
40
            print("motD=128")            
41
        elif reception=="FT": # le capteur droit détecte la ligne, le robot doit tourner à droite
42
            print("motG=200")
43
            print("motD=160")
44
            ...............?  # On affiche l'image DROITE
45
        elif reception=="TF": # le capteur gauche détecte la ligne, le robot doit tourner à gauche
46
            print("motG=160")
47
            print("motD=200")
48
            ...............?  # On affiche l'image GAUCHE
49
        elif reception=="FF": #  aucun des capteurs ne détecte la ligne le robot va tout droit
50
            print("motG=160")
51
            print("motD=160")
52
            ...............?  # On affiche l'image AVANT
53
54
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimerRéalisé avec Scenari (nouvelle fenêtre) modèle documentaire TechnOpale