cours1 min de lecture

Capteurs et actionneurs

Comment un objet mesure le monde réel et agit dessus, et comment un programme simple pilote tout cela.
programme

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.

CapteurMesureExemple d'usage
Thermomètre numériquetempératurethermostat, station météo
Photorésistancelumièreéclairage automatique, panneau solaire
Bouton-poussoirappui (oui/non)sonnette, interrupteur
Accéléromètreaccélération, inclinaisonsmartphone qui tourne l'écran
Microphonesonassistant vocal, casque actif
Capteur d'humiditétaux d'humidité de l'airarrosage automatique de plante
Capteur de présencemouvementalarme, éclairage de couloir
Capteur cardiaquebattementsmontre fitness
Un capteur transforme une grandeur physique en valeur numérique lue par le programme. Le thermomètre rend par exemple un nombre : 21.4 (degrés Celsius). Le bouton-poussoir rend deux valeurs seulement : 1 (appuyé) ou 0 (relâché).
température0 ou 1luminosité

Thermomètre

Microcontrôleur

Bouton

Photorésistance

Capteurs en entrée du microcontrôleur

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.

ActionneurActionExemple d'usage
LEDémettre de la lumièrevoyant, écran à LED
Moteur électriquetournervolet roulant, ventilateur, robot
Servomoteurpositionner à un angle précisbras articulé, gouverne de drone
Buzzerémettre un sonalarme, retour sonore
Écran LCDafficher du texteaffichage de température
Résistance chauffanteproduire de la chaleurfer à repasser, four
Électrovanneouvrir/fermer un passagearrosage, lave-linge
Haut-parleurreproduire un sonenceinte, 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 :

  1. Lire la valeur d'un (ou plusieurs) capteur(s).
  2. Décider d'une action en fonction de cette valeur.
  3. Agir en activant ou non un (ou plusieurs) actionneur(s).
  4. 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()
Le 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.
⏵ Ctrl+↵ pour exécuter
Aucune exécution pour l'instant.
Le seuil 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() et digitalWrite(). 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.