Capteur de distance à Ultrasons

ME007_400Principe

Les capteurs de distance à ultrasons utilisent le principe de l’écho pour déterminer la distance à laquelle se trouve un objet :

  • Un court signal sonore est envoyé (inaudible car dans le domaine des ultrasons – environ 40kHz) ;
  • Le son est réfléchi par une surface et repart en direction du capteur : c’est l’écho ;
  • Une fois revenue à son point de départ, l’onde sonore est détectée par le capteur.

Principe_Ultrasons_1

La durée entre l’instant de l’émission et l’instant de la réception peut être mesurée. Le signal ayant parcouru 2 fois la distance entre le capteur et la surface (un aller-retour), on peut la calculer ainsi :

\(\text{distance} =\frac{1}{2}\times \text{vitesse du son}\times\text{durée}\)

Remarque la vitesse du son est environ égale à 340 m/s.

 

Câblage

Comme la plupart des composants actifs, les capteurs de distance à ultrasons doivent être alimentés (5V le plus souvent).

Cablage_Ultrasons

Ils fonctionnent de la manière suivante :

  • l’Arduino envoie au capteur par un port numérique une courte impulsion (10μs environ) à l’entrée « trigger » du capteur ;
  • cela déclenche l’émission d’un signal sonore très court (8 oscillations environ) ;
  • lorsque ce signal est parti, la sortie « echo » du capteur passe à l’état HIGH ;
  • dès que le signal sonore revient, il est détecté par le capteur dont la sortie « echo » repasse à LOW.

Principe_Ultrasons

Remarque : si le signal retour n’est pas détecté, la durée du signal « echo » est limitée à 36 ms environ (cela dépend des modèles), soit 6m environ.

 

Programme

Sans bibliothèque

Pour envoyer une impulsion sur le port de sortie ‘trigger« , on utilise la fonction digitalWrite.

Pour connaitre la durée de l’impulsion sur le port d’entrée « echo« , on utilise la fonction pulseIn. (référence)

// Définition des numéros de port 
const int trigPin = 11; // Trigger (emission) 
const int echoPin = 12; // Echo (réception) 
// Variables utiles 
long duree; // durée de l'echo 
int distance; // distance 

void setup() { 
   pinMode(trigPin, OUTPUT); // Configuration du port du Trigger comme une SORTIE 
   pinMode(echoPin, INPUT); // Configuration du port de l'Echo comme une ENTREE 
   Serial.begin(9600); // Démarrage de la communication série 
} 

void loop() { 
   // Émission d'un signal de durée 10 microsecondes 
   digitalWrite(trigPin, LOW); 
   delayMicroseconds(5); 
   digitalWrite(trigPin, HIGH); 
   delayMicroseconds(10); 
   digitalWrite(trigPin, LOW); 

   // Écoute de l'écho 
   duree = pulseIn(echoPin, HIGH); 

   // Calcul de la distance 
   distance = duree*0.034/2; 

   // Affichage de la distance dans le Moniteur Série 
   Serial.print("Distance : "); 
   Serial.print(distance); 
   Serial.println("cm"); 
}
 

Avec la bibliothèque NewPing

Si ce n’est pas encore fait, installer la bibliothèque NewPing.

Cette bibliothèque propose une prise en charge optimisée et simultanée de plusieurs capteurs de distance à ultrasons (jusqu’à 16!)

#include <NewPing.h>
     
#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200
     
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  Serial.begin(115200);
}
     
void loop() {
  delay(50);
  int uS = sonar.ping();
  Serial.print("Ping: ");
  Serial.print(uS / US_ROUNDTRIP_CM);
  Serial.println("cm");
}

 

Exemple

Pour en savoir plus …

Bibliothèque NewPing

Quelques références courantes : HC-SR04, ME007, …

Vous aimerez aussi...

11 réponses

  1. jp dit :

    Bonjour et bravo pour votre site,
    J’ai une petite question… J’ai du mal à déterminer si le capteur ultrason délivre une information de type logique ou analogique ?
    Cordialement.

    • cfaury dit :

      Bonjour
      Étant donné que l’Arduino mesure un temps, il s’agit d’une grandeur analogique, numérisée par l’horloge, puis convertie en distance.
      CF

  2. jp dit :

    Merci pour l’info.

  3. Hippolyte dit :

    Bonjour,

    Merci pour cette présentation très détaillée!

    Je me pose toutefois une question au sujet des chronogrammes des signaux émis/reçus par le capteur : la durée « image » de la distance mesurée (signal « echo ») doit-elle toujours être prise entre le début de la réception du signal par le récepteur et la fin de l’émission du signal par l’émetteur? Dans un autre exemple que j’ai rencontré, cette durée est mesurée entre le début de ces deux signaux.

    Remerciements par avance,

    Hippolyte

    • cfaury dit :

      Bonjour
      Merci pour ce commentaire constructif.
      Il existe sans doute plusieurs modes de fonctionnement de ce type de capteur. J’ai de mon coté tenté d’interpréter certains documents publiés par des constructeurs de capteur (par exemple https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf) des documents pas vraiment satisfaisants à mon gout d’un point de vue pédagogique. Si vous me communiquez d’autres documents convaincants, j’enrichirai cet article.

      Cédrick

      • Hippolyte dit :

        Bonjour,

        Plusieurs collègues m’ont confirmé, certains de manière catégorique, que la mesure de la distance par ultrasons se fait bien par mesure de la durée entre la fin de l’émission et le début de la réception, conformément à ce que vous avez fait apparaître dans cet article.

        Merci pour votre réponse, et pour le lien vers le document constructeur.

        Hippolyte

  4. fab dit :

    Bonjour, merci pour le tuto.
    qu’est que c’est: US_ROUNDTRIP_CM
    Je l’utilise parce que piqué un exemple mais je ne l’ai pas trouvé dans les paramètre de newPing

  5. Gla dit :

    comment utiliser NewPing, si tu peux nous donner un schema avec un senseble de code que l’on pourra datpter

    • cfaury dit :

      Bonjour
      Avec ou sans Newping, le câblage est le même (voir celui proposé sur cet article).
      Quant à l’exemple de code, celui fourni avec la bibliothèque est très bien. Pour l’ouvrir, il suffit, depuis l’IDE Arduino, de faire Fichier>Exemples>NewPing>NewPingExample.
      CF

  6. Bonjour. Merci pour le projet et pour toutes les astuces. Je me suis inspiré par votre projet pour faire un min sèche-mains à ultrason. Ci-dessous le lien du projet pour les personnes intéressées: https://www.electronique-mixte.fr/projet-electronique-17-seche-mains-ultrason-avec-arduino/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *