Détecteurs à ultrasons

HC-SR04 ou SRF05

. Par : Dominique, Guillaume. URL : https://www.locoduino.org/spip.php?article52

Qu’est-ce ?

Composant bon marché, les capteurs HC-SR04 et SRF05 sont des émetteurs récepteurs d’ultrasons (40KHz) qui permettent de mesurer la distance entre le capteur et le premier élément situé sur sa trajectoire, qui lui renvoie les ultrasons.
 Au contraire d’autres moyens de détection, il n’est pas très discret au vu de sa taille (approximativement 4,5*2*1,7 cm). 
De part sa nature, une vision dégagée est requise devant lui pour permettre une bonne détection.

La portée du SR04 et du SRF05 est de 2cm à 3 m environ. La précison de l’ordre d’1/3 cm.
Sa consommation est de 30 à 50 milliampères.

Le principe de mesure de distance avec ce type de capteur repose sur le temps que met une onde sonore émise pour aller vers un objet, rebondir puis revenir vers le récepteur.
Le capteur fournit une sortie de durée proportionnelle à la distance.
Ce temps (t) est récupéré par l’Arduino et nous pouvons en déduire une distance en multipliant par la vitesse du son (340 m/s) et en divisant par 2 ( le son faisant un aller/retour) soit :
d = (340 x t) / 2 mètres.

Comment le brancher à l’Arduino ?

Le détecteur SR04 possède 4 broches : 2 pour l’alimentation avec VCC pour le 5V et le GND pour la masse de l’Arduino. Les autres broches trig et echo sont à brancher sur des broches numériques disponibles de l’Arduino.

Le détecteur SRF05 possède 5 broches, l’une n’étant pas utilisée, les autres ayant les même fonctions que celles du SR04.

Voici un exemple de branchement sur un UNO :

Comment récupérer la distance ?

Voici un code très simple. Il existe sur internet des bibliothèques permettant d’éliminer des valeurs extrêmes afin d’éviter les erreurs. Il sera de votre ressort de voir si une exactitude est nécessaire ou pas.
Les branchements sont situés dans le programme et les schémas ci-dessus :

/* Utilisation du capteur Ultrason HC-SR04 */

// définition des broches utilisées 
int trig = 12; 
int echo = 11; 
long lecture_echo; 
long cm;

void setup() 
{ 
  pinMode(trig, OUTPUT); 
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT); 
  Serial.begin(9600); 
}

void loop() 
{ 
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10); // envoi d'une impulsion sur trig de 10 microsecondes
  digitalWrite(trig, LOW); 
  lecture_echo = pulseIn(echo, HIGH); 
  cm = lecture_echo / 58; // lecture_echo*340/(2*10000)
  Serial.print("Distance en cm : "); 
  Serial.println(cm); 
  delay(1000); 
}

Le programme effectue une mesure à peu près toutes les secondes et envoie le résultat sur la voie série (le terminal de l’IDE Arduino).

Utilisation

Ce capteur peut être utilisé de plein de façons, entre autres :

  • visualiser sur un TCO la présence d’un convoi ou non sur une portion de voie
  • connaître la position de quelque chose
  • arrêter un train en gare à une position précise

Dans ces utilisations, il s’agit de tester une condition de distance. Si la distance est inférieure à une valeur, un convoi est présent ou si supérieur, la voie est vide. Afin de connaître cette valeur au plus juste, faites votre montage dans les conditions réelles et même fixez le capteur à son emplacement réel. Lancer ensuite le programme donné ci-dessus avec et sans obstacle pour trouver la meilleure valeur.

Pour ma part, après tests, il s’avère que le détecteur que je possède a un pourcentage d’erreur constant. Il rajoute environ 20% de la distance à la mesure, paramètre que l’on peut donc incorporer dans le programme pour avoir une bonne mesure.
Je considère que pour le prix dépensé, la qualité est au rendez-vous, surtout quand l’erreur peut être corrigée au niveau logiciel.