Arduino UNO et HC-SR04 pour mesurer une distance

Prise en main d’un capteur de distance HC-SR04

Ce module HC-SR04 permet de déterminer plus ou moins précisément la distance entre lui et un objet. je l’ai trouvé à 0.81 euros (FDP inclus!) au marché des chinoiseries (voir en bas de page). Si vous avez besoin d’une mesure au millimètre, passez votre chemin.

Son fonctionnement est extrêmement simple. Pour vulgariser, je dirais qu’il envoie une impulsion sonore (inaudible pour nous) et qu’il attend le retour de l’impulsion. Le temps qu’aura mis cette impulsion à lui revenir, déterminera la distance.

Il est utilisable pour des distances comprises entre 2 centimètres et 4 mètres.

Mesure une distance avec le HC-SR04 et un Arduino Uno

Sur le module, on voit quatres PINs :

  • VCC => +5V (à relier au +5V de votre Arduino UNO)
  • Trig => c’est l’émetteur de l’impulsion (à relier au PIN9 de votre Arduino UNO)
  • Echo => c’est le récepteur de l’impulsion (à relier au PIN8 de votre Arduino UNO)
  • GND => la masse (à relier au GND de votre Arduino UNO)

NB : j’utilise le PIN8 et PIN9 pour la partie DATA mais vous pouvez adapter le code à votre besoin.

Uno et HC-SR04

Voici le sketch à créer dans l’IDE Arduino (aucune librairie spécifique nécessaire) :

// Les variables
int trig = 9; // PIN9 branché sur le TRIP du module
int echo = 8; // PIN8 branché sur l'ECHO du module
long echo_lu; // le temps aller/retour de l'impulsion
long cm_10C; // voir paragraphe suivant
long cm_20C; // voir paragraphe suivant
long cm_30C; // voir paragraphe suivant

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

void loop()
{
  digitalWrite(trig, HIGH); // on envoi une impulsion...
  delayMicroseconds(10); // ... pendant 10 micro secondes ...
  digitalWrite(trig, LOW); // ... et on arrête l'envoi de l'impulsion
  echo_lu = pulseIn(echo, HIGH); // et on écoute l'impulsion revenir
  cm_10C = (echo_lu / 2) * 0.0337;
  cm_20C = (echo_lu / 2) * 0.0343;
  cm_30C = (echo_lu / 2) * 0.0349;
  Serial.print("Distance a : 10 C : ");
  Serial.print(cm_10C);
  Serial.print(" cm ||| a 20 C : ");
  Serial.print(cm_20C);
  Serial.print(" cm ||| a 30 C : ");
  Serial.print(cm_30C);
  Serial.println(" cm");
  delay(1000);
}

Sur votre port série, vous devriez voir cela :

Uno et HC-SR04

Après vérification avec un mètre, la distance réelle entre mon mur et le module est de 142 cm, alors qu’il fait 23°C dans la pièce. La mesure est donc précise à quelques millimètres (+/- 1 cm). Le module HC-SR04 fonctionne bien.

NB : cela ne marche pas avec les touts petits objets. Dans mon test, j’ai utilisé un mur (donc grande surface). J’ai essayé en mettant ma main devant, cela me renvoi la bonne mesure une fois sur 4.

Une mesure, mais plusieurs résultats pour le HC-SR04 ?

En effet, la vitesse du son change en fonction de différents paramètres, notamment des matériaux traversés (ici c’est l’air), de l’altitude (ici niveau de la mer) et de la température.

Dans cette expérience, j’ai affiché une distance, pondéré en fonction de la température. Pour bien faire, il faudrait que je mette une sonde de température pour le faire automatiquement, mais il s’agit ici que d’un test du module !!

La formule pour la vitesse du son en fonction de la température, est la suivante :  vitesse = 331 + ( 0,6 x Température). Soit :

  • à 10°C ==> 331 + (0.6*10) = 337
  • à 20°C ==> 331 + (0.6*20) = 343
  • à 30°C ==> 331 + (0.6*30) = 349

Matériel utilisé pour cet article sur le HC-SR04:

  • Module capteur distance HC-SR04 acheté 0.81 euros (fdp compris) le 24/04/2016 et reçu 30 jours après
  • Arduino Uno (CC) acheté sur leboncoin à 10 euros

Cet article fait partie d’une série d’articles sur la box domotique Jeedom, les micro-contrôleurs Arduino et compatible, le tout en DIY (Do It Yourself). Consultez la liste complète des articles de cette thématique en cliquant ici.


Si vous souhaitez partager cet article...Share on Facebook
Facebook
Share on Google+
Google+
Tweet about this on Twitter
Twitter