Mesure de distances avec un capteur ultrason et un Arduino

Capteur Ultrason Arduino XV4YPour un projet professionnel auquel je participe avec un ami (il lit ces lignes donc je précise ami, ça ne coûte rien), je dois réaliser tout un tas de mesures sur ce qu’on pourrait appeler un environnement industriel. Vitesse de moteurs, niveaux de cuves, ouverture de portes…

J’ai donc commandé quelques échantillons de capteurs histoire de voir comment causer avec, interpréter leurs données et surtout vérifier s’ils étaient adaptés aux mesures qu’on veut leur faire faire et à l’environnement particulier d’installation. Parmi ceux-ci un des moins chers et des plus simples à utiliser est un capteur ultrason pour mesurer des distances. Suivant le descriptif, il se commande par une broche se lit par une autre, répond vite, fait des mesures jusque 4,5m avec une précision de 3mm. Le signal est envoyé par un transducteur (un petit haut-parleur piezo) sur une fréquence d’environ 40 KHz et reçu un peu plus tard par un autre. Il s’alimente en 5V et la consommation est inconnue mais vraisemblablement faible.

Première remarque, les deux cellules émettrice et réceptrice étant séparée de quelques centimètres, il faut que vous soyez bien “parallèle” à l’objet à mesurer, surtout pour des mesures à courte distance. Deuxième remarque, le signal transmis est assez peu directif, et un objet passant dans un champs de 90° est vite détecté et vient parasiter vos mesures. Troisième remarque, pour des mesures en champ lointain, il faut que l’objet à mesurer soit plan sinon l’écho retransmis est trop faible.

A ceci, vient s’ajouter une confusion qui est souvent faite entre précision de la mesure et justesse (ou taux d’erreur). Le fait que ce capteur est vendu à un français par des chinois qui écrivent en anglais n’aide pas à se mettre d’accord sur les mots. Tout cela pour dire que si les mesures ont une précision de 3mm, l’erreur est elle vraisemblablement supérieure au centimètre pour la distance maximale (de l’ordre de 1% semble probable). Je tiens encore une fois à préciser que j’ai pris le capteur le moins cher et qu’il y a certainement mieux sur le marché, mais les grands principes sont les mêmes.

Dernier, point, contrôler et lire ces capteurs est donc très simple, et j’ai d’abord tenté de faire mes mesures “à la mimine” comme on le voit sur beaucoup d’exemple. Ceux qui font ça n’ont pas du beaucoup valider leurs résultats ensuite. Même après filtrage des valeurs incohérentes et calcul d’une moyenne, la qualité des mesures était mauvaise. Ensuite je suis passé par la librarie NewPing (https://code NULL.google NULL.com/p/arduino-new-ping/) et là tout de suite c’est devenu plus exploitable (mais avec les restrictions données ci-dessus).

En conclusion, si vous êtes intéressés pour faire des mesures avec de tels capteurs, je vous conseille d’abord de commencer par un proto et de valider son fonctionnement dans vos conditions avant de vous lancer. Pour moi, l’application de tels capteurs est plutôt dans le cadre de détection d’approche, de radar de recul ou de détecteur de présence, mais pas vraiment dans la mesure. A noter que souvent ils sont présentés comme Ultrasonic Range Detection Sensor et non comme outil de mesure… mais la suite de la description joue sur les mots.

Je publie ci-dessous mon code en sachant qu’il n’apporte pas grand chose par rapport aux exemples donnés avec la librairie NewPing, mais ça peut toujours servir.

/*
Prototype mesures ultrason avec affichage LCD
By Yannick DEVOS - XV4Y

http://xv4y.radioclub.asia/

Copyright 2013 Yannick DEVOS under GPL 3.0 license
Any commercial use or inclusion in a kit is subject to author approval

====
The display is on a 16x2 LCD Display with HD44780 compatible driver, use the traditional 4 bits interface on pins 10, 9, 8, 7, 6, 5

In order to compile this program with Arduino 1.0.1, you will need to install 2 libraries :
- New LiquidCrystal

https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home

- NewPing ultrasound sensor library

https://code.google.com/p/arduino-new-ping/

====
Revision history :
v1.00    2013-04-11
         First release

====

*/

#include <Wire.h>
#include <LiquidCrystal.h>
#include <NewPing.h>

// ****
// Here some Parameters you may change
// ****

#define ULTRA_TRIGGER A2        // What pin we have connected the Ultrasonic range sensor Trigger pin
#define ULTRA_ECHO    A3        // What pin we have connected the Ultrasonic range sensor Echo pin
#define MAX_DISTANCE 350        // Maximum distance we want to ping for (in centimeters). Most sensor are rated at 400-500cm.

// Variables
unsigned long duration=0;
long int      distance=0;

LiquidCrystal lcd(5, 6, 7, 8, 9, 10);  // You can change this settings to your convenance, please see the library documentation
NewPing sonar(ULTRA_TRIGGER, ULTRA_ECHO, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup()
{
  lcd.begin(16,2);
  lcd.home ();

  lcd.print("Ultraçon");

  pinMode(ULTRA_TRIGGER, OUTPUT);
  pinMode(ULTRA_ECHO, INPUT);

  delay(1000);
  lcd.clear();
  lcd.setCursor ( 0, 0 );
  lcd.print("Distance"); 
}

void loop()
{

  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
    duration = sonar.ping_median(5);  // We do 5 measurements to have a good average and filter bad measurements
    distance = ((340 * duration) / 1000)/2;

    lcd.setCursor ( 0, 1 );
    lcd.print("              mm");
    lcd.setCursor ( 0, 1 );
    lcd.print(distance);
    delay(500);

}

Autres articles sur le même sujet:

Share

6 comments for “Mesure de distances avec un capteur ultrason et un Arduino

  1. Philippe CANONNE
    20 mai 2013 at 21:02

    Bonjour,
    Comment faire de ce module, un détecteur de présence simple sans passé par un contrôle arduino, même si quelques circuits simples extérieurs sont nécessaires.
    Merci des infos et schémas ….
    philippe

    • yan
      20 mai 2013 at 21:10

      Bonjour,

      Je ne sais pas.
      C’est beaucoup plus simple aujourd’hui et beaucoup moins coûteux de passer par un micro-contrôleur.
      En l’occurrence des modèles beaucoup moins puissants que l’ATMega328 de l’Arduino Nano feraient l’affaire.

      Ce capteur bon marché traduit une distance par un interval de temps. Il doit exister des circuits qui permettent de convertir un interval de temps en une tension par exemple, mais je ne sais pas faire.
      Cherchez peut-être d’autres modules ultra-son qui sont plus adaptés à votre besoin…

      Cordialement,
      Yannick.

  2. keltoum
    12 mai 2014 at 23:47

    salut
    svp comment peut on faire la liaison entre l’afficheur LCD et le capteur ??

  3. yan
    13 mai 2014 at 05:50

    Bonjour,
    Avec un micro-contrôleur comme un Arduino, un MSP430 ou un PIC…

    Yannick.

  4. THOMAS
    29 juillet 2014 at 15:59

    Merci pour t’es commentaires sur ce mini sonar, je travail sur un proto de reconnaissance de mouvement et tes ton travail m’aide grandement, merci beaucoup.

Laisser un commentaire

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