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.
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 :
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.