Capteur ultrason : Télémètre


Brancher un capteur ultrason HC-SR04 à une Arduino et mesurer en cm la distance le séparant de tout objet, et l'afficher dans le Moniteur série.

 

A la manière d'une chauve-souris, le capteur Ultrason envoie des ondes sonores qui se répercutent sur les obstacles environnant et  qui lui reviennent sous la forme d'un écho. Sachant que le son se déplace à une vitesse de 330 mètres par secondes, le programme peut donc ainsi calculer la distance le séparant des objets.

 

Pour visualiser les valeurs enregistrées par le capteur, donc la distance entre le capteur et un objet, un obstacle, on peut afficher les données dans le programme Arduino IDE, en utilisant le moniteur série.


I. Matériel nécessaire


1 carte Arduino et son câble

1 Breadboard

4 jumpers / câbles

1 capteur ultrason HC-SR04



II. Visualisation du montage sur Fritzing


Note de montage : le capteur possède 4 broches.

 

Aux deux extrêmes, la PIN VCC qui correspond à l'alimentation donc à la sortie + (5V) et à l'autre bout, la PIN Gnd qui correspond au - (Gnd).

 

Au centre, les 2 broches représente Trig (l'émetteur) et Echo (le récepteur) qui se branchent sur la PIN 11 et 12 par exemple.


III. Code / Programme avec Arduino IDE


Dans ce code plusieurs choses sont importants.

 

1) Dans la zone de déclaration des variables et des constantes :

 

int trig = 12;        

crée une variable de type « int » et du nom de « trig » que l’on affecte à la PIN 12 et qui servira d'émetteur.


int echo = 11;                           

crée une variable de type « int » et du nom de « echo » que l’on affecte à la PIN 11 et qui servira de récepteur.


long lecture_echo;                      

crée une variable de type « long » et du nom de « lecture_echo » qui servira à stocker la valeur que réceptionne le capteur.


long distance_cm;                         

crée une variable de type « long » et du nom de « distance_cm » qui représente la distance (que l'on calculera en centimètre) qui sépare le capteur de l’objet.

 

2) Dans le Setup :

 

Il est important de mettre Trig à l'état bas grâce à la commande suivante :

digitalWrite(trig, LOW);          

En d'autre termes, de ne pas faire fonctionner l'émetteur ; de sorte que l'on puisse le déclencher dans le Loop.

 

On définit également Trig et Echo comme étant une sortie et une entrée, par les commandes suivantes :

pinMode(trig, OUTPUT);

pinMode(echo, INPUT); 

 

Sans oublier d'indiquer que la communication entre la carte et l'Arduino se fait à un taux de 9600 bauds grâce à la commande :

Serial.begin(9600); 

 

  3) dans le Loop :

 

digitalWrite(trig, HIGH);
delayMicroseconds(10);  
digitalWrite(trig, LOW);

Ces 3 commandes permettent de lancer trig, c'est-à-dire l'émetteur pour qu'il envoie une impulsion pendant 10 micro secondes, puis s'arrête.

Pour rappel une milliseconde = 1000 microsecondes. On utilise donc ici n'ont pas la fonction delay qui est en millisecondes, mais la fonction delayMicroseconds qui elle est en microsecondes.

 

lecture_echo = pulseIn(echo, HIGH);

Puis l'on stocke dans la variable lecture_echo la valeur de l'impulsion que le récepteur reçoit.

 

Cette valeur va alors nous servir à calculer la distance qui sépare le capteur d'un éventuel objet et que l'on stockera dans la variable distance_cm. Pour ce faire nous allons utiliser la formule suivante :

distance_cm = lecture_echo / 58; 

Qui représente l'impulsion émise par Trig, se répercutant sur l'objet, puis revenant à Echo, le tout divisé par 58.

Pourquoi 58, me diriez-vous ? Car ce chiffre représente le temps que met l'impulsion à faire un aller et retour jusqu'à l'objet, divisé par 2 (car ce qui nous intéresse c'est la distance qui sépare le capteur de l'objet, donc l'équivalent de l'aller ou du retour) et multiplié par la vitesse de propagation du son dans l'air, soit 340m/s puisqu'ici nous utilisons une impulsion sous forme d'ondes sonores (ultrason).

 

Comment a-t-on fait pour trouver ce chiffre ?

En appliquant ce qui suis :

Distance = (vitesse du son) x (le temps aller retour) ÷ 2

soit (340 m/s) x (temps aller retour) ÷ 2

soit (34 000 cm/1 000 000 microsecondes) x (temps) ÷ 2

soit (34/1 000 ) x (temps) ÷ 2

soit (17/1 000) x (temps)

donc temps = 1 000 ÷17 = 58,82 microsecondes = 58 ɥs

 

Puis vient les commandes :

Serial.print("Distance en cm : ");
Serial.println(distance_cm);      

Qui permettent d'afficher dans le moniteur série la distance en centimètre, puis de passer à la ligne.

 

Et on finit avec un délais de de 1000 millisecondes soit 1 seconde avant de reprendre la boucle du Loop.

delay(1000);  

ce programme et ses explications sont disponibles en téléchargement ici : sur Mega.

Sources


Rappel :


les images présentent appartiennent au Domaine public et sont l’œuvre de Peggy_Marco sur le site Pixabay : https://pixabay.com/fr/users/Peggy_Marco-1553824/   ou proviennent du projet Fritzing : http://fritzing.org/home/