Capteurs et actionneurs
Introduction
Un système embarqué, à lui tout seul, ne sert à rien : il faut qu'il perçoive quelque chose, puis qu'il agisse sur le monde extérieur. Pour cela, il dispose de deux types d'organes : les capteurs (ses « sens ») et les actionneurs (ses « muscles »). Le programme du microcontrôleur lit les capteurs, prend des décisions et active les actionneurs en conséquence. C'est cette chaîne que vous allez étudier ici, avec quelques exemples de code lisibles.
Capteurs : les sens de l'objet
Un capteur est un composant qui mesure une grandeur du monde physique (température, lumière, pression, mouvement, son…) et la transmet au microcontrôleur sous forme d'information numérique exploitable par le programme.
| Capteur | Mesure | Exemple d'usage |
|---|---|---|
| Thermomètre numérique | température | thermostat, station météo |
| Photorésistance | lumière | éclairage automatique, panneau solaire |
| Bouton-poussoir | appui (oui/non) | sonnette, interrupteur |
| Accéléromètre | accélération, inclinaison | smartphone qui tourne l'écran |
| Microphone | son | assistant vocal, casque actif |
| Capteur d'humidité | taux d'humidité de l'air | arrosage automatique de plante |
| Capteur de présence | mouvement | alarme, éclairage de couloir |
| Capteur cardiaque | battements | montre fitness |
Actionneurs : les muscles de l'objet
Un actionneur est un composant qui agit sur le monde physique sur ordre du microcontrôleur. C'est le pendant du capteur : là où le capteur fait entrer une information, l'actionneur fait sortir une action.
| Actionneur | Action | Exemple d'usage |
|---|---|---|
| LED | émettre de la lumière | voyant, écran à LED |
| Moteur électrique | tourner | volet roulant, ventilateur, robot |
| Servomoteur | positionner à un angle précis | bras articulé, gouverne de drone |
| Buzzer | émettre un son | alarme, retour sonore |
| Écran LCD | afficher du texte | affichage de température |
| Résistance chauffante | produire de la chaleur | fer à repasser, four |
| Électrovanne | ouvrir/fermer un passage | arrosage, lave-linge |
| Haut-parleur | reproduire un son | enceinte, sonnerie de téléphone |
Lequel des éléments suivants est un actionneur ?
La boucle : lire, décider, agir
Un système embarqué exécute en permanence une boucle très simple. Tant qu'il est sous tension, il répète :
- Lire la valeur d'un (ou plusieurs) capteur(s).
- Décider d'une action en fonction de cette valeur.
- Agir en activant ou non un (ou plusieurs) actionneur(s).
- Recommencer.
Cette boucle s'exécute souvent des centaines, voire des milliers de fois par seconde. À chaque tour, le programme prend la décision la plus adaptée à l'instant.
┌──────────────────────────────────────┐
│ ▼
┌───┴────┐ ┌────────────┐ ┌──────────────┐
│ lire │───▶│ décider │───▶│ agir sur │
│ capteur│ │ (programme)│ │ l'actionneur │
└────────┘ └────────────┘ └──────────────┘
Un premier programme : lampe automatique
Imaginons un éclairage automatique qui s'allume quand il fait sombre. Il suffit d'une photorésistance (capteur de lumière) et d'une LED (actionneur). En pseudo-code :
# Lampe automatique : s'allume quand il fait sombre
while True:
lumiere = lire_capteur_lumiere() # valeur entre 0 et 100
if lumiere < 30:
allumer_led()
else:
eteindre_led()
while True: est ici une boucle infinie : la condition est toujours
vraie, donc la boucle ne s'arrête jamais d'elle-même. C'est exactement ce
que fait un système embarqué — il tourne en permanence tant qu'il est sous
tension. Vous avez vu while <condition>: en SH (chapitre programmation),
while True: en est le cas particulier où la condition vaut toujours
True.Lisons ce programme ligne par ligne :
while True:ouvre une boucle qui ne s'arrête jamais — exactement ce que fait un système embarqué.lire_capteur_lumiere()interroge la photorésistance et renvoie un nombre qui représente la luminosité ambiante.if lumiere < 30:est la décision : en dessous d'un certain seuil, le programme considère qu'il fait sombre.allumer_led()est l'action : la LED s'allume.else: eteindre_led()couvre le cas inverse : si la lumière est suffisante, la LED est éteinte.
30 est un choix arbitraire. Sur un vrai dispositif, vous
mesureriez la luminosité de la pièce en fonctionnement normal pour ajuster
ce seuil. C'est l'une des étapes du calibrage d'un objet embarqué.Un second exemple : ventilateur thermostaté
Autre cas classique : un ventilateur qui s'enclenche quand il fait trop chaud.
# Ventilateur thermostaté
while True:
temperature = lire_capteur_temperature()
if temperature > 25:
activer_ventilateur()
else:
arreter_ventilateur()
C'est exactement la même structure que l'éclairage automatique. C'est tout l'intérêt de la programmation : vous remplacez les composants et le seuil, mais la logique reste la même.
Dans ce programme, à quoi sert le mot-clé while True: ?
Avec deux capteurs : alarme intelligente
Les programmes deviennent intéressants quand vous combinez plusieurs capteurs. Une alarme qui ne se déclenche que la nuit, si un mouvement est détecté :
# Alarme nocturne
while True:
lumiere = lire_capteur_lumiere()
mouvement = lire_capteur_mouvement()
if lumiere < 20 and mouvement == 1:
declencher_alarme()
else:
arreter_alarme()
L'opérateur and exige que les deux conditions soient vraies : il faut
qu'il fasse sombre et qu'il y ait un mouvement pour que l'alarme se
déclenche. Si l'un des deux manque, rien ne se passe.
Pièges courants
- Confusion capteur / actionneur : la flèche d'information sort du monde et entre dans le programme pour un capteur ; elle sort du programme et entre dans le monde pour un actionneur. Si vous hésitez, demandez-vous s'il mesure ou s'il fait quelque chose.
- Seuils : le seuil de décision (
30,25…) n'est jamais magique. Il vient toujours d'un calibrage ou d'un choix de conception, et peut nécessiter d'être ajusté. - Code Arduino réel : les microcontrôleurs Arduino utilisent le langage
C avec des fonctions comme
digitalRead()etdigitalWrite(). Le pseudo-code Python ci-dessus reste plus lisible pour comprendre la logique.
Pour aller plus loin
Dans le chapitre suivant, vous verrez comment relier cette boucle perception-décision-action à un utilisateur humain, via l'IHM (interface homme-machine). C'est l'IHM qui permet à l'utilisateur de régler le seuil, d'afficher la mesure ou de changer le mode de fonctionnement de l'objet.