Skip to main content
schéma câblage hc-sr04

Tuto-Arduino Utiliser un module ultrason HC-SR04

Dans ce tutoriel nous allons voir comment utiliser un module de détection nous utiliserons pour notre exemple un module HC-SR04 .

Celui-ci va nous permettre de mesurer une distance et d’allumer une LED lorsque nous l’aurons décidé.

Niveau de difficulté : Débutant

Matériel nécessaire :

Câblage module HC-SR04 :

Nous allons donc raccorder comme ceci:

Les broches TRIG et ECHO sont définies dans notre programme celles-ci peuvent évidemment être modifiées à souhait.

Arduino → HC-SR04

  • 5V sur VCC
  • GND sur gnd
  • D5 sur TRIG
  • D4 sur ECHO

Câblage de notre LED :

Une fois que notre module sera raccordé il nous faudra bien évidemment mettre en place notre témoin lumineux si nous souhaitons l’utiliser ainsi il serait tout à fait possible de contrôler un relais par exemple.

Pour ce faire nous allons donc procéder ainsi :

Arduino → LED

  • D13 sur LED

La broche 13 est ici utilisée pour la led par facilité en effet celle présente sur les carte Arduino (« L »)  fonctionne avec cette broche ainsi il n’est donc même pas nécessaire d’en raccorder une à la broche 13 afin de voir le résultat.

Notre montage devrait donc ressembler à ça :

schéma câblage hc-sr04

Le programme :

Maintenant que nous disposons du matériel nécessaire et que celui-ci est convenablement raccordé, il va falloir passer à la programmation de notre Arduino !

Transfert :

Pour le transfert du code sur l’Arduino, la procédure est relativement simple mais si vous ne l’avez jamais fait, je vous invite à jeter un coup d’œil par ici :

https://www.memorandum.ovh/utiliser-le-logiciel-arduino/

Toutes les informations concernant le réglage ainsi que les différents paramètres pour notre module se trouveront dans le code.

/* sketch Arduino utilisation d'un module hc-sr04
Autheur : Guillaume FLOCH
site web : www.osdclic.fr
tuto : www.memorandum.ovh
membre de : www.goldorhack.org
*/

#define trigPin 5      //Trig 
#define echoPin 4      //Echo 
#define avertisseur 13 //Led
int mindist = 5; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer

void setup() {
  Serial.begin (9600);  
  pinMode(trigPin, OUTPUT);  //On défini Trig comme une sortie
  pinMode(echoPin, INPUT);   //On défini Echo comme une entrée
  pinMode(avertisseur, OUTPUT); //On défini la led comme une sortie
}

void loop() {
  long duree, distance;
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); //Trig envois pendant 10ms 
  digitalWrite(trigPin, LOW);
  
  // On calcul le temps pour l'aller retour du signal
  duree = pulseIn(echoPin, HIGH);
  distance = duree*340/(2*10000);  
   
  if (distance < mindist) {  // On allume la led si on est moins loin que "mindist", mindist étant défini en début de programme
     digitalWrite(avertisseur,HIGH);
}
  else {   //sinon on éteind la led
    digitalWrite(avertisseur,LOW);
  }
  //Pour le moniteur série
  if ( distance <= 0){  
    Serial.println("Hors de portee");
  }
  else {
    Serial.print(distance);
    Serial.print(" cm ");
    Serial.print(duree);
    Serial.println(" ms");
  }
  delay(100);
}

Paramètres et réglages :

Maintenant que notre montage est terminé et que le programme a bien été envoyé à l’Arduino nous allons pouvoir détailler un peu tout ça.

Moniteur série :

La procédure est la suivante dans le programme Arduino, cliquer sur Outils puis Moniteur série.

Cette manipulation peut aussi être faite via les touches du clavier Ctrl + Maj +M.

Il faudra évidemment que notre Arduino soit relié au PC si nous voulons que cela fonctionne, nous devrions ainsi avoir quelque chose ressemblant à l’image ci-dessous.

Nous pouvons voir ici que nous affichons deux valeurs la distance et la durée. La durée représente le temps de parcours de notre signal entre le moment ou celui-ci est émis par « trigPin » et celui où il est reçu par « echoPin ». Nous utilisons une formule dans notre programme qui nous permet de transformer tout ça en distance (vitesse du son théorique).

Formule actuelle : distance = duree*340/(2*10000) nous obtenons ainsi une distance en cm.

Formule millimètre distance = duree*340/(2*1000) notre distance sera donc affichée en millimètre et plus en cm, si vous faites ce choix n’oubliez pas de modifier la ligne Serial.print( » cm ») afin que vos valeurs soient cohérentes.

Modification du programme :

Dans le programme le seul paramètre nécessitant des modifications se trouve à la ligne 11 « mindist » ce paramètre va nous permettre de définir la distance à partir de laquelle nous souhaitons que notre led s’allume. Dans notre exemple si la distance est inférieure à 5 centimètres la led sera allumée.

Dans le cas contraire nous l’éteindrons tout simplement.

J’espère que cet article vous aura plu, n’hésitez pas à le partager.

7 réponses à “Tuto-Arduino Utiliser un module ultrason HC-SR04

      1. Bonjour,

        j’ai apprècié votre tutoriel “Tuto-Arduino Utiliser un module ultrason HC-SR04” et merci une fois de plus.

        j’ai une question par apport a mon projet académique, en fait j’aimerai  un Balayer un périmètre de 180 degrés et dessiner (envoyer les valeurs sur le port série) du périmètre mesuré. pourriez vous m’aider svp?

        merci d’avance

  1. Bonjour,

    &amp;nbsp;

    Merci pour ce tutoriel !

    J’ai branché un relais et cela tourne très bien.

    J’essais de brancher 2 capteur ultrasonic qui commanderai le pin 13.

    &amp;nbsp;

    voici le code : (cela ne marche pas),

     

    2 capteur ultrasonic
    /* sketch Arduino utilisation d'un module hc-sr04
    Autheur : Guillaume FLOCH
    site web : www.osdclic.fr
    tuto : www.memorandum.ovh
    membre de : www.goldorhack.org
    */
    
    #define trigPin 5      //Trig 
    #define echoPin 4      //Echo 
    #define trigPinV 7     //Trig 2eme 
    #define echoPinV 9      //Echo 2eme
    
    #define avertisseur 13 //Led
    int mindist = 100; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer
    int mindistV = 100; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer
    void setup() {
    //  Serial.begin (9600);  
      pinMode(trigPin, OUTPUT);  //On défini Trig comme une sortie
      pinMode(echoPin, INPUT);   //On défini Echo comme une entrée
      pinMode(trigPinV, OUTPUT);  //On défini TrigV comme une sortie
      pinMode(echoPinV, INPUT);   //On défini EchoV comme une entrée
      
      pinMode(avertisseur, OUTPUT); //On défini la led comme une sortie
    }
    
    void loop() {
      long duree, distance;
      digitalWrite(trigPin, LOW);  
      delayMicroseconds(2); 
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10); //Trig envois pendant 10ms 
      digitalWrite(trigPin, LOW);
      
      // On calcul le temps pour l'aller retour du signal
      duree = pulseIn(echoPin, HIGH);
      distance = duree*340/(2*10000);  
       
    if (distance < mindist) {  // On allume la led si on est moins loin que "mindist", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
         
    }
    else {   //sinon on éteind la led
        digitalWrite(avertisseur,HIGH);
    
    
    
    
    
      long dureV, distanceV;
      digitalWrite(trigPinV, LOW);  
      delayMicroseconds(2); 
      digitalWrite(trigPinV, HIGH);
      delayMicroseconds(10); //Trig envois pendant 10ms 
      digitalWrite(trigPinV, LOW);
      
      // On calcul le temps pour l'aller retour du signal
      dureV = pulseIn(echoPinV, HIGH);
      distanceV = dureV*340/(2*10000);  
      dureV = pulseIn(echoPinV, HIGH);
      distanceV = dureV*340/(2*10000);   
    if (distanceV < mindistV) {  // On allume la led si on est moins loin que "mindist", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
         (distanceV < mindistV);   // On allume la led si on est moins loin que "mindistV", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
    }
    else if {   //sinon on éteind la led
        digitalWrite(avertisseur,HIGH);
    
       
    }
    delay (100); 
    
    }
    }
      //Pour le moniteur série
    //  if ( distance <= 0){  
    //    Serial.println("Hors de portee");
    // }
    //  else {
    //    Serial.print(distance);
    //      Serial.print(distanceV);
    //    Serial.print(" cm ");
    //    Serial.print(duree);
    //    Serial.println(" ms");
    //  }
    //  delay(100);
    //}

  2. 2 capteur ultrasonic
    /* sketch Arduino utilisation d'un module hc-sr04
    Autheur : Guillaume FLOCH
    site web : www.osdclic.fr
    tuto : www.memorandum.ovh
    membre de : www.goldorhack.org
    */
    
    #define trigPin 5      //Trig 
    #define echoPin 4      //Echo 
    #define trigPinV 7     //Trig 2eme 
    #define echoPinV 9      //Echo 2eme
    
    #define avertisseur 13 //Led
    int mindist = 100; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer
    int mindistV = 100; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer
    void setup() {
    //  Serial.begin (9600);  
      pinMode(trigPin, OUTPUT);  //On défini Trig comme une sortie
      pinMode(echoPin, INPUT);   //On défini Echo comme une entrée
      pinMode(trigPinV, OUTPUT);  //On défini TrigV comme une sortie
      pinMode(echoPinV, INPUT);   //On défini EchoV comme une entrée
      
      pinMode(avertisseur, OUTPUT); //On défini la led comme une sortie
    }
    
    void loop() {
      long duree, distance;
      digitalWrite(trigPin, LOW);  
      delayMicroseconds(2); 
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10); //Trig envois pendant 10ms 
      digitalWrite(trigPin, LOW);
      
      // On calcul le temps pour l'aller retour du signal
      duree = pulseIn(echoPin, HIGH);
      distance = duree*340/(2*10000);  
       
    if (distance < mindist) {  // On allume la led si on est moins loin que "mindist", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
         
    }
    else {   //sinon on éteind la led
        digitalWrite(avertisseur,HIGH);
    
    
    
    
    
      long dureV, distanceV;
      digitalWrite(trigPinV, LOW);  
      delayMicroseconds(2); 
      digitalWrite(trigPinV, HIGH);
      delayMicroseconds(10); //Trig envois pendant 10ms 
      digitalWrite(trigPinV, LOW);
      
      // On calcul le temps pour l'aller retour du signal
      dureV = pulseIn(echoPinV, HIGH);
      distanceV = dureV*340/(2*10000);  
      dureV = pulseIn(echoPinV, HIGH);
      distanceV = dureV*340/(2*10000);   
    if (distanceV < mindistV) {  // On allume la led si on est moins loin que "mindist", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
         (distanceV < mindistV);   // On allume la led si on est moins loin que "mindistV", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
    }
    else if {   //sinon on éteind la led
        digitalWrite(avertisseur,HIGH);
    
       
    }
    delay (100); 
    
    }
    }
      //Pour le moniteur série
    //  if ( distance <= 0){  
    //    Serial.println("Hors de portee");
    // }
    //  else {
    //    Serial.print(distance);
    //      Serial.print(distanceV);
    //    Serial.print(" cm ");
    //    Serial.print(duree);
    //    Serial.println(" ms");
    //  }
    //  delay(100);
    //}

  3. Re Bonjour, voici un autre essai , la compil est bonne mais le capteur en pin 7 et 9 fonctionne pas :

    2 capteur ultrasonic v2
    /* sketch Arduino utilisation d'un module hc-sr04
    Autheur : Guillaume FLOCH
    site web : www.osdclic.fr
    tuto : www.memorandum.ovh
    membre de : www.goldorhack.org
    */
    
    #define trigPin 5      //Trig 
    #define echoPin 4      //Echo 
    #define trigPinV 7     //Trig 2eme 
    #define echoPinV 9      //Echo 2eme
    
    #define avertisseur 13 //Led
    int mindist = 100; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer
    //int mindistV = 100; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer
    void setup() {
    //  Serial.begin (9600);  
      pinMode(trigPin, OUTPUT);  //On défini Trig comme une sortie
      pinMode(echoPin, INPUT);   //On défini Echo comme une entrée
      pinMode(trigPinV, OUTPUT);  //On défini TrigV comme une sortie
      pinMode(echoPinV, INPUT);   //On défini EchoV comme une entrée
      
      pinMode(avertisseur, OUTPUT); //On défini la led comme une sortie
    }
    
    void loop() {
      long duree, distance;
      digitalWrite(trigPin, LOW);  
      delayMicroseconds(2); 
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10); //Trig envois pendant 10ms 
      digitalWrite(trigPin, LOW);
      long dureV, distanceV;
      digitalWrite(trigPinV, LOW);  
      delayMicroseconds(2); 
      digitalWrite(trigPinV, HIGH);
      delayMicroseconds(10); //Trig envois pendant 10ms 
      digitalWrite(trigPinV, LOW);
      // On calcul le temps pour l'aller retour du signal
      duree = pulseIn(echoPin, HIGH);
      distance = duree*340/(2*10000);  
      dureV = pulseIn(echoPinV, HIGH);
      distanceV = dureV*340/(2*10000);   
    if (distance < mindist) {  // On allume la led si on est moins loin que "mindist", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
         (distanceV < mindist);   // On allume la led si on est moins loin que "mindistV", mindist étant défini en début de programme
         digitalWrite(avertisseur,LOW);
         delay (30*1000);
    }
    else {   //sinon on éteind la led
        digitalWrite(avertisseur,HIGH);
    
    
        
    }
    delay (100); 
    
    }
      //Pour le moniteur série
    //  if ( distance <= 0){  
    //    Serial.println("Hors de portee");
    // }
    //  else {
    //    Serial.print(distance);
    //      Serial.print(distanceV);
    //    Serial.print(" cm ");
    //    Serial.print(duree);
    //    Serial.println(" ms");
    //  }
    //  delay(100);
    //}

     

     

Laisser un commentaire

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