Les capteurs ultrasoniques

(prise en charge par le protocole
”Firmata Express”)

 

 

Les capteurs ultrasoniques sont composés d’un émetteur d’ultrasons, d’un récepteur d’ultrasons et d’un circuit de commande. Ils sont généralement utilisés pour mesurer une distance entre le capteur et un obstacle.

Le capteur ultrasonique, le plus souvent utilisé avec un Arduino, le HC‐SR04, dispose de 2 broches différentes pour l’émission (broche Trig”) et la réception des ultrasons (broche Echo”).


Il existe également des capteurs ultrasoniques à une seule broche (SIG”), comme le Grove 101020010.


Avec ”pymata-express 1.4”, pour utiliser un capteur ultrasonique, il faut déclarer les broches servant à l’émission et à la réception des ultrasons avec la commande :

loop.run_until_complete(board.set_pin_mode_sonar(trigger_pin, echo_pin, Get_Distance))

où :

board” est l’objet créé lors de l’appel de la méthode PymataExpress” du module pymata-express”,

trigger_pin” est le numéro de la broche du microcontrôleur sur laquelle est connecté l’émetteur d’ultrasons,

echo_pin” est le numéro de la broche du microcontrôleur sur laquelle est connecté le récepteur d’ultrasons,

loop” est la boucle des tâches asyncio” déclarée ainsi :

loop = asyncio.get_event_loop(),

Get_Distance” est une fonction asyncio” pour récupérer la valeur de la distance en cm entre le capteur et un obstacle :

async def Get_Distance(data):   

global Distance   

Distance = data[1]


Remarques
 :

. La variable data” est une liste de 2 éléments (nombres décimaux entiers) générée lors de la déclaration des broches du capteur dont le premier élément (data[0]) est la valeur de trigger_pin” et le deuxième élément (data[1]) est la distance mesurée en cm.

. Dans le cas d’un capteur ultrasonique à une broche commune pour l’émission et la réception des ultrasons, il suffit de déclarer la même broche pour trigger_pin” et echo_pin”:

Un capteur ultrasonique à 2 broches différentes pour l’émission et la réception des ultrasons est connecté à l’Arduino comme ci-dessous :
Un capteur ultrasonique à 1 broche commune pour l’émission et la réception des ultrasons est connecté à l’Arduino comme ci-dessous :


On peut définir une fonction déclarant plus facilement les broches d’un capteur ultrasonique : 

def Set_Sonar_Pins(board, trigger_pin, echo_pin):

 loop.run_until_complete(board.set_pin_mode_sonar(trigger_pin, echo_pin, Get_Distance))

 

Ainsi, dans le cas d’un capteur ultrasonique à 2 broches différentes pour l’émission (broche 8) et la réception (broche 9) des ultrasons, l’instruction de déclaration est :

Set_Sonar_Pins(board, 8, 9)

Pour obtenir la valeur de la distance en cm entre le capteur et l’obstacle, on utilise la fonction sonar_read” qui fait appel à la fonction Get_Distance” définie lors de la déclaration des broches du capteur :

loop.run_until_complete(board.sonar_read(trigger_pin))

où :

board” est l’objet créé lors de l’appel de la méthode PymataExpress” du module pymata-express”,

trigger_pin” est le numéro de la broche du microcontrôleur sur laquelle est connecté l’émetteur ultrasons. 

Si on définit une fonction, comme ci-dessous :

def Sonar_Read(board, trigger_pin):

loop.run_until_complete(board.sonar_read(trigger_pin))


Pour obtenir la valeur de la distance en cm entre le capteur (connecté aux broches 8 et 9) et l’obstacle, on appelle la fonction :

Sonar_Read(board,8)

La variable globale Distance” est alors mise à jour via la fonction Get_Distance”, celle-ci étant appelée lors de l’appel de la fonction Sonar_Read”.


Exemple
 :

Le programme d’application (Sonar.py) suivant, mesure la distance entre un capteur ultrasonique à 2 broches (comme le HC‐SR04) et un obstacle, et l’affiche dans la console Python :


Déroulement du programme
 :

Importation des librairies et définition de fonctions :

. Le module ”ConnectToArduino.py”, contenant les fonctions de connexion à l’arduino via le protocole ”Firmata Express”,

. La bibliothèque asyncio” nécessaire au fonctionnement de PymataExpress”,

. La bibliothèque time” pour la gestion des durées d’émission et de silence.

. Fonction Get_Distance” pour récupérer la valeur de la distance entre le capteur et l’obstacle,

. Fonction Set_Sonar_Pins” pour déclarer les broches du capteur,

. Fonction Sonar_Read” pour effectuer la mesure de la distance,

. Fonction Arduino_Exit” pour fermer le port COM et se déconnecter de l’Arduino.

Déclaration des constantes et variables :

. TRIGGER_PIN = 8 (constante correspondant au n° de la broche sur laquelle l’émetteur est connecté)

. ECHO_PIN = 9 (constante correspondant au n° de la broche sur laquelle le récepteur est connecté)

. Distance = 0 (variable correspondant à la distance entre le capteur et l’obstacle)

. OldDistance = 0 (variable correspondant à la valeur précédente de la distance)

. PortComArduino (port COM sur lequel l’Arduino est connecté) 

Connexion à l’Arduino :

. Détection du port COM :

PortComArduino = SelectPortCOM()

. Tentative d’ouverture du port COM sélectionné et connexion à l’Arduino:

board = OpenPortCom(PortComArduino)

. Si la connexion à l’Arduino est réussie:

–> Définition d’une boucle asyncio : 

loop = asyncio.get_event_loop()

–> Déclaration des broches du capteur ultrasonique :

    Set_Sonar_Pins(board, TRIGGER_PIN, ECHO_PIN)

Boucle principale du programme (boucle ”while True”) :

. Mesure de la distance :  Sonar_Read(board,TRIGGER_PIN)

–> Affichage de la distance dans la console Python si la valeur mesurée est différente de la valeur précédente.

Fin du programme en appuyant sur Ctrl-C :

–> Le port série est fermé.

Résultats dans la fenêtre Python Shell :