Capteurs, actionneurs et commandes
Le soir, l'éclairage d'un abribus s'allume tout seul, sans que personne n'appuie sur un bouton. Comment « sait-il » qu'il fait nuit, et comment passe-t-il à l'action ? C'est ce que font tous les systèmes embarqués : une petite carte programmable lit des mesures, décide, puis commande un appareil.
Capteur, carte de commande, actionneur
Un système embarqué est un petit système informatique intégré à un objet (une serre, un portail, une montre connectée). Il suit toujours la même chaîne.
-
Le capteur mesure une grandeur physique (température, lumière, humidité, angle) et la transforme en nombre.
-
La carte de commande (microcontrôleur) exécute le programme : elle compare la mesure à des valeurs et décide.
-
L'actionneur agit sur le monde réel (ventilateur, vanne, moteur, lampe).
-
L'IHM (interface homme-machine) permet à l'utilisateur de dialoguer avec la carte : afficheur, boutons, application sur téléphone.
Un actionneur « tout ou rien » (TOR) n'a que deux états : allumé ou éteint, ouvert ou fermé.
Dans un système embarqué (carte programmable), distinguer un capteur et un actionneur. Donner un exemple de chacun dans une serre automatisée.
Dans un système embarqué (carte programmable), distinguer un capteur et un actionneur. Donner un exemple de chacun dans une serre automatisée.
Lire une mesure et prendre une décision
Un capteur renvoie un nombre. La carte le compare à un seuil avec une instruction conditionnelle : « si… alors… sinon… ».
Un programme typique tourne en boucle :
while True:
T = lire_temperature()
if T > 28:
ventilateur = True
else:
ventilateur = False
Attention à l'inégalité : « $T>28$ » est strict. Pour $T=28$, la condition est fausse.
Les capteurs fournissent souvent un entier de 0 à $2^{10}-1 = 1\,023$ (conversion sur 10 bits). Cela donne $1\,024$ valeurs différentes : de 0 à 1 023, on compte aussi le 0. Pour convertir en pourcentage, on utilise la proportionnalité :
$$\text{pourcentage} = \dfrac{\text{valeur}}{1\,023} \times 100$$Un programme lit la température $T$ toutes les secondes et allume un ventilateur si $T>28$. a) Donner la décision prise pour $T=25$, $T=28$ et $T=30$. b) Écrire la…
Un programme lit la température $T$ toutes les secondes et allume un ventilateur si $T>28$.
- a) Donner la décision prise pour $T=25$, $T=28$ et $T=30$.
- b) Écrire la condition en langage naturel.
Un capteur de luminosité renvoie une valeur entière de 0 (obscurité) à 1 023 (lumière maximale). a) Combien de valeurs différentes peut-il renvoyer ? b) Calculer le…
Un capteur de luminosité renvoie une valeur entière de 0 (obscurité) à 1 023 (lumière maximale).
- a) Combien de valeurs différentes peut-il renvoyer ?
- b) Calculer le pourcentage de lumière pour une valeur de 512 (arrondir à l'unité).
Coder et décoder des commandes
Une carte reçoit des ordres sous forme de caractères. Il faut une table de correspondance entre chaque caractère et une action.
| Caractère | Ordre physique |
|---|---|
| O | ouvrir |
| F | fermer |
| S | stopper |
Tout autre caractère (par exemple « X ») est invalide : le programme doit l'ignorer ou signaler une erreur, et ne rien faire de dangereux.
Une commande peut aussi contenir un paramètre. Exemple : « A50 » = lettre d'ordre (A pour avancer) suivie d'un nombre sur deux chiffres (la vitesse en %). Pour « R30 », on recule à 30 %.
Pour une séquence « A50;R20;S00 », on sépare d'abord les commandes au point-virgule, puis on décode chacune. Si chaque commande dure $t$ secondes à la vitesse $v$ (en m/s), la distance algébrique vaut $v \times t$, positive en marche avant et négative en marche arrière.
Un portail est commandé à distance par des caractères envoyés à la carte : « O » ouvre, « F » ferme, « S » stoppe. a) Construire la table de correspondance caractère ↔…
Un portail est commandé à distance par des caractères envoyés à la carte : « O » ouvre, « F » ferme, « S » stoppe.
- a) Construire la table de correspondance caractère ↔ ordre physique.
- b) Que doit faire le programme si le caractère reçu est « X » ?
Une commande « A50 » signifie : Avancer à la vitesse 50 % ; « R30 » : Reculer à 30 % ; « S00 » : Stopper. La vitesse est toujours écrite avec deux chiffres (trois…
Une commande « A50 » signifie : Avancer à la vitesse 50 % ; « R30 » : Reculer à 30 % ; « S00 » : Stopper. La vitesse est toujours écrite avec deux chiffres (trois chiffres pour 100 %).
- a) Décoder « A75 », « R10 » et « S00 ».
- b) Écrire la commande pour avancer à 100 %.
- c) Un moteur à 100 % tourne à 3 000 tours/min. Calculer sa vitesse pour « A50 » en supposant la relation proportionnelle.
Un robot reçoit une chaîne de commandes de 3 caractères séparées par des points-virgules : « A50;R20;S00 ». Chaque commande dure 2 secondes ; la vitesse de 100 %…
Un robot reçoit une chaîne de commandes de 3 caractères séparées par des points-virgules : « A50;R20;S00 ». Chaque commande dure 2 secondes ; la vitesse de 100 % correspond à 0,5 m/s en marche avant (A) et en arrière (R).
- a) Décoder la séquence et calculer la distance algébrique parcourue (positif = avant).
- b) Le robot revient-il à son point de départ ? Justifier.
- c) Proposer une vérification que le programme doit effectuer pour rejeter une commande invalide telle que « A5X ».
Deux seuils pour éviter les à-coups
Imagine un chauffage qui s'allume à 19 °C et s'éteint à 19 °C. Si la température oscille autour de 19 °C, il s'allume et s'éteint sans cesse : c'est mauvais pour l'appareil. On utilise donc deux seuils : un pour allumer, un autre, plus haut, pour éteindre. Entre les deux, le système garde son état précédent.
La même idée sert pour l'IHM d'un chauffage connecté : l'afficheur montre la température, les boutons « + » et « − » modifient la consigne dans ses limites (par exemple de 16 °C à 24 °C). Si l'utilisateur appuie sur « + » à 24 °C, le programme ignore l'appui, pour ne pas dépasser la limite. Voici l'algorithme en Python (les fonctions lire_temperature, bouton_plus, bouton_moins et afficher sont supposées définies) :
etat = False
consigne = 20
while True:
T = lire_temperature()
if bouton_plus() and consigne < 24:
consigne = consigne + 1
if bouton_moins() and consigne > 16:
consigne = consigne - 1
if T < consigne - 1:
etat = True
elif T > consigne + 1:
etat = False
afficher(T)
Un arrosage automatique lit l'humidité $H$ du sol (en %) toutes les 10 minutes. Il ouvre la vanne si $H<30$ et la ferme si $H\ge 60$ ; entre les deux, il garde l'état…
Un arrosage automatique lit l'humidité $H$ du sol (en %) toutes les 10 minutes. Il ouvre la vanne si $H<30$ et la ferme si $H\ge 60$ ; entre les deux, il garde l'état précédent. Les mesures successives sont : 45 ; 28 ; 40 ; 62 ; 50. La vanne est fermée au départ.
- a) Donner l'état de la vanne après chaque mesure.
- b) Expliquer l'intérêt d'avoir deux seuils différents.
On veut réaliser une IHM (interface homme-machine) pour un chauffage connecté : un afficheur montre la température mesurée, deux boutons « + » et « − » règlent la…
On veut réaliser une IHM (interface homme-machine) pour un chauffage connecté : un afficheur montre la température mesurée, deux boutons « + » et « − » règlent la consigne de 16 °C à 24 °C par pas de 1 °C. Le chauffage s'allume si $T<\text{consigne}-1$ et s'éteint si $T>\text{consigne}+1$.
- a) Pour une consigne de 20 °C, donner l'état du chauffage pour $T=18$, $T=19,5$ et $T=21,5$ (les trois mesures se succèdent dans cet ordre, le chauffage étant initialement éteint).
- b) Que doit faire le programme si l'utilisateur appuie sur « + » alors que la consigne est de 24 °C ?
- c) Écrire l'algorithme complet en langage naturel (boucle, lecture, décision).
Convertir une mesure en grandeur physique
Quand un capteur d'angle renvoie $v$ proportionnellement à l'angle, on utilise un produit en croix. Pour $v$ entre 0 et 1 023 et un angle entre 0° et 270° :
$$\text{angle} = \dfrac{270}{1\,023}\times v$$La résolution est la plus petite variation que le capteur peut distinguer. Ici, il y a $1\,023$ pas pour 270°, donc $\dfrac{270}{1\,023}$ degré par pas.
Un capteur d'angle renvoie $v$ entre 0 et 1 023 pour un angle de 0° à 270°, de manière proportionnelle. Un servomoteur doit se placer à cet angle. a) Établir la formule…
Un capteur d'angle renvoie $v$ entre 0 et 1 023 pour un angle de 0° à 270°, de manière proportionnelle. Un servomoteur doit se placer à cet angle.
- a) Établir la formule de l'angle en fonction de $v$.
- b) Calculer l'angle pour $v=341$ (arrondir au dixième).
- c) Donner le nombre de valeurs différentes et la résolution angulaire en degrés par pas (arrondir au centième).
L'essentiel
-
Un système embarqué : capteur → carte de commande → actionneur, avec une IHM pour l'utilisateur.
-
Une décision est une condition sur la mesure : attention aux inégalités strictes ou larges.
-
Un capteur sur 10 bits renvoie $1\,024$ valeurs (0 à 1 023) ; on convertit par proportionnalité.
-
Une commande se décode avec une table de correspondance ; on vérifie toujours sa validité.
-
Deux seuils (allumer, éteindre) évitent les à-coups : entre eux, on garde l'état précédent.
Retour au début : l'éclairage de l'abribus utilise un capteur de lumière, une carte qui compare la mesure à un seuil, et un actionneur TOR : la lampe.