mardi 21 juin 2016

Télémètre à ultrasons

Après avoir récupéré un module télémètre à ultrasons HC-SR04 sans réel besoin, je me suis dit que ça pouvait être sympa d'apprendre à m'en servir histoire de bricoler un peu ! Ce petit module a un fonctionnement tout bête : émission d'ultrasons par le capteur de sortie, rebond des ultrasons émis sur un objet, réception des ultrasons réfléchis par le capteur d'entrée, calcul de la distance à partir de la vitesse du son et du temps entre l'émission et la réception.

Le module HC-SR04 :



  • Caractéristiques du module :
La fiche de référence de ce module nous indique qu'il fonctionne avec une tension d'entrée de 5 V, nécessite 15 mA, possède une portée minimale de 2 cm et maximale de 4 m, et que le calcul de distance se fait comme suit :

distance (cm) = temps de réponse (µs) / 58

ou pour les anglo-saxons :

distance (po) = temps de réponse (µs) / 148

Le module possède quatre broches : Vcc (alimentation 5 V), Trig (émetteur), Echo (récepteur), GND (terre).


  • Mise en œuvre  :
Le module nécessitant 5 V et 15 mA pour fonctionner, elle peut très bien être utilisée telle quelle sur la plupart des cartes Arduino, ici une Nano, grâce aux broches pouvant délivrer jusqu'à 40 mA et sa broche 5 V.


Schéma du montage :


Photo du montage en action :



  • Code Arduino :
#define pinTrig 2 // Broche pour l'émission.
#define pinEcho 3 // Broche pour la réception.

unsigned short t; // Temps de réponse (µs).
unsigned short d; // Distance à mesurer (cm).

void setup()
{

  pinMode(pinTrig, OUTPUT);   // Broche pinTrig fixée en sortie.
  pinMode(pinEcho, INPUT);    // Broche pinEcho fixée en entrée.

  digitalWrite(pinTrig, LOW); // On n'envoie rien pour l'instant.

  Serial.begin(9600);         // Débit en bauds pour le terminal.

}

void loop()
{

  digitalWrite(pinTrig, HIGH); // Envoi d'un signal...

  delayMicroseconds(10);       // Pendant 10 µs.

  digitalWrite(pinTrig, LOW);  // Arrêt du signal.

  t = pulseIn(pinEcho, HIGH);  // Mesure du temps écoulé.

  d = t / 58;                  // Calcul de la distance.

  Serial.print("Distance : "); // Affichage dans la console.
  Serial.print(d);
  Serial.println(" cm.");

  delay(1000);                 // Pause d'une seconde.

}

Ce type de télémètre est très facile à utiliser et peut servir pour construire un robot autonome, un détecteur d'ouverture/fermeture, etc. Ce petit module ne paye pas de mine, mais permet tout de même de mesurer des distances comprises entre 2 et 400 cm, avec pour ma part un décalage de -3 cm par rapport à la réalité, petit écart simple à corriger avec une soustraction.