2.3 Programmations des capteurs et des actuateurs numériques

Une fois les capteurs et les actuateurs connectés à un microcontrôleur, on est prêt à faire de la programmation pour contrôler les actuateurs et récupérer les valeurs d’entrées des capteurs. Sur Arduino, on programme en C, tandis que sur Raspberry Pi, c’est en Python. Si vous n’êtes pas déjà familiers avec ces langages, ou si vous avez besoin de les réviser, voir les tutoriels suivants :


2.3.1 Programmation des actuateurs

Prenons l’actuateur le plus simple : une DEL. Une fois que cet actuateur est connecté à notre microcontrôleur, nous devons programmer une sortie sur la broche utilisée. Comme on considère la DEL en tant qu’actuateur numérique, on peut l’allumer ou l’éteindre par programmation. On ne fera pas tout de suite varier son intensité.

2.3.1.1 En C sur Arduino

Sur Arduino, on doit d’abord configurer la broche choisie comme sortie à l’aide de la commande pinMode(broche, mode) où broche est le numéro de broche utilisée pour connecter notre actuateur et mode indique si on veut utiliser cette broche comme entrée ou comme sortie. On choisira ici le mode « OUTPUT » pour indiquer que c’est une sortie. Ensuite, la commande pour écrire une sortie numérique est digitalWrite(broche, valeur) où broche est encore le numéro de broche utilisée et valeur est « HIGH » ou « LOW » selon qu’on veut activer ou désactiver la sortie. La capture d’écran suivante illustre un programme complet sur Arduino, permettant d’allumer et d’éteindre une DEL connectée à la broche 13. Il se trouve que l’Arduino a aussi une DEL qui y est intégrée et qui peut être contrôlée avec la broche 13, ce code peut donc être utilisé sans circuit électronique supplémentaire.

Figure 53 — Exemple de code en C pour contrôler un actuateur numérique sur Arduino

Figure 53 — Exemple de code en C pour contrôler un actuateur numérique sur Arduino

Vidéo 20 : Programmation des actuateurs numériques avec Arduino IDE

2.3.1.2 En Python sur Raspberry Pi

Pour programmer le Raspberry Pi en Python, il faut d’abord importer une bibliothèque. RPi.GPIO est installée par défaut sur Raspberry Pi OS. Celle-ci nous permet d’interagir avec les entrées et sorties du Raspberry Pi. On peut utiliser la commande import RPi.GPIO as GPIO et, par la suite, on accédera à ses fonctions à partir du mot GPIO. Ensuite, on doit choisir le mode de numérotation des broches à l’aide de la commande GPIO.setmode(GPIO.BOARD) où BOARD désigne le mode de numérotation physique. L’autre choix est GPIO.setmode(GPIO.BCM) où BCM (Broadcom SoC Channel) représente le mode de numérotation GPIO du manufacturier. Voir la Figure 43 — Broches GPIO, qui illustre les deux types de numérotations. Ensuite, on utilisera la commande GPIO.setup(broche, GPIO.OUT) pour configurer la broche choisie en sortie, puis la commande GPIO.output(broche, valeur) où broche est la broche choisie et valeur est soit « GPIO.HIGH » ou « GPIO.LOW » pour écrire notre sortie, c’est-à-dire activer ou désactiver un actuateur connecté à cette broche. La capture d’écran suivante illustre un exemple de code complet pour contrôler une DEL connectée à la broche 3.

Figure 54 — Exemple de code Python pour contrôler un actuateur numérique sur Raspberry Pi

Figure 54 — Exemple de code Python pour contrôler un actuateur numérique sur Raspberry Pi

Pour faire un code plus propre, plus lisible et plus facile à maintenir, on pourra utiliser des variables pour les numéros des broches et éventuellement décomposer notre code en fonctions. Christiane Lagacé présente des exemples bien documentés dans La base des scripts avec RPi.GPIO pour illustrer les interactions possibles avec les entrées et les sorties.

Vidéo 21 : Programmation des actuateurs numériques sur le Raspberry Pi

Vidéo 22 : Programmation des actuateurs numériques dans le simulateur GPIO

2.3.1.3 Exercices sur les actuateurs numériques


2.3.2 Programmation des capteurs

2.3.2.1 En C sur Arduino

Voyons maintenant comment programmer nos microcontrôleurs pour récupérer les valeurs des capteurs numériques en entrée. Pour commencer, prenons le cas où la valeur d’entrée par défaut est 0 et qu’elle passe à 1 quand le capteur est activé. Sur Arduino, on configure d’abord la broche choisie pour lire notre entrée avec la commande pinMode(broche, INPUT), puis on utilise la commande digitalRead(broche) qui retourne la valeur « HIGH » ou « LOW » selon que le capteur est activé ou non. La capture d’écran suivante illustre un programme qui lit l’état d’un capteur numérique connecté à la broche 12 et qui utilise cette valeur pour choisir si on allume ou éteint une DEL connectée à la broche 13.

Figure 56 — Exemple de code en C pour lire une entrée d’un capteur connecté à un Arduino

Figure 56 — Exemple de code en C pour lire une entrée d’un capteur connecté à un Arduino

Vidéo 23 : Connexion et programmation des capteurs numériques dans le simulateur d’Arduino

Vidéo 24 : Programmation des capteurs numériques avec Arduino IDE

Si on a plutôt choisi de connecter notre capteur en tant qu’entrée tirée vers le haut, le mode choisi pour la broche d’entrée devra être « INPUT_PULLUP » et les valeurs lues seront inversées : on obtiendra la valeur « HIGH » par défaut et la valeur « LOW » quand le capteur est actionné.

Vidéo 25 : Connexion et programmation d’entrées tirées vers le haut dans le simulateur d’Arduino

Vidéo 26 : Programmation d’entrées tirées vers le haut avec Arduino IDE

2.3.2.2 En Python sur Raspberry Pi

Pour faire les mêmes choses en Python sur le Raspberry Pi, on utilise la commande GPIO.setup(broche, GPIO.IN, [pull_up_down]) où broche est la broche choisie comme entrée et où le dernier paramètre « pull_up_down » est optionnel. Celui-ci peut être utilisé pour activer les résistances internes du Raspberry Pi, que ce soit pour tirer les entrées vers le haut en lui donnant la valeur « GPIO.PUD_UP » ou vers le bas avec « GPIO.PUD_DOWN ». Ensuite, on utilise la commande GPIO.input(broche) pour lire l’entrée. Comme Python est typé dynamiquement, les valeurs obtenues « GPIO.HIGH » ou « GPIO.LOW » peuvent aussi bien être traitées comme des 0 et des 1 ou comme des booléens True et False.

Figure 57 — Exemple de code Python pour lire une entrée d'un capteur connecté à un Raspberry Pi

Figure 57 — Exemple de code Python pour lire une entrée d’un capteur connecté à un Raspberry Pi

Vidéo 27 : Programmation des capteurs numériques dans le simulateur GPIO

Vidéo 28 : Programmation des capteurs numériques sur le Raspberry Pi

Vidéo 29 : Programmation d’entrées tirées vers le haut sur le Raspberry Pi

2.3.2.3 Exercices sur les capteurs numériques