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)
|
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é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 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éthode : installation 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 :
Compléter le programme ci-dessous et transférer-le dans la carte afin de le tester. |
# Ecrit ton programme ici ;-)from microbit import *
while True:
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=="FT": # le capteur droit détecte la ligne, le robot doit tourner à droite
print("motG=200") #Il faut augmenter la vitesse du moteur gauche pour tourner à droite
print("motD=160")
elif ...............? : # le capteur gauche détecte la ligne, le robot doit tourner à gauche
...............? ...............? elif ...............? : # aucun des capteurs ne détecte la ligne le robot va tout droit
...............? ...............? 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.
# Ecrit ton programme ici ;-)from microbit import *
Avant = Image(
"00000:""00000:""00000:""00900:""09090")Gauche = Image(
'?????:''?????:''?????:''?????:''?????:)Droite = Image(
'?????:''?????:''?????:''?????:''?????')start=False
while True:
if button_a.is_pressed() and start==False: # Bouton A appuyé : top départ
start=True
print("motG=160") #Le robot va en avant à vitesse moyenne
print("motD=160")
display.show(Avant) # On affiche l'image AVANT
if .................? and start==True: # Bouton B appuyé : Arrêt du système
start=False
print("motG=???") #On stoppe les moteurs du robot
print("motD=???")
display.clear() #On efface l'afficheur
if uart.any():
msg_bytes=uart.read()
reception = str(msg_bytes, "utf-8") #Réception message
if not start: # Si le système est à l'arrêt, le robot ne bouge pas...
print("motG=128")
print("motD=128")
elif reception=="FT": # le capteur droit détecte la ligne, le robot doit tourner à droite
print("motG=200")
print("motD=160")
...............? # On affiche l'image DROITE
elif reception=="TF": # le capteur gauche détecte la ligne, le robot doit tourner à gauche
print("motG=160")
print("motD=200")
...............? # On affiche l'image GAUCHE
elif reception=="FF": # aucun des capteurs ne détecte la ligne le robot va tout droit
print("motG=160")
print("motD=160")
...............? # On affiche l'image AVANT












