Mémos

M é m o - l a b .

Arduino – Capteur ultra-son

introduction

Schéma de montage général

Schéma de montage du capteur ultra-son

Code





const int triggerPin = 2;
const int echoPin = 3;
const char redLedPin = 7;
const char orangeLedPin = 6;
const char greenLedPin = 5;

unsigned long timeout = 9000; // 9ms correspond ~ 3 mètres à 340m/s
unsigned long distance;

void getDistance()
{
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  
  // temps mis par l'onde pour se déplacer du Trigger à l'Echo
  unsigned long duration = pulseIn(echoPin, HIGH, timeout);
  // distance séparant le capteur d'un objet
  distance = (0.0340*duration) / 2;
}

void setup()
{
  pinMode(triggerPin, OUTPUT);  
  pinMode(echoPin, INPUT);
  pinMode(redLedPin, OUTPUT);
  pinMode(orangeLedPin, OUTPUT);
  pinMode(greenLedPin, OUTPUT);
}

void loop()
{
  // distance strictement inférieure à 20cm
  if (distance < 20) {
    digitalWrite(redLedPin, HIGH);
    digitalWrite(orangeLedPin, LOW);
    digitalWrite(greenLedPin, LOW);
  }

  // distance comprise entre 20cm et 40cm
  if (distance >= 20 && distance <= 40) {
    digitalWrite(redLedPin, LOW);
    digitalWrite(orangeLedPin, HIGH);
    digitalWrite(greenLedPin, LOW);
  }

  // distance strictement supérieure à 40cm
  if (distance > 40) {
    digitalWrite(redLedPin, LOW);
    digitalWrite(orangeLedPin, LOW);
    digitalWrite(greenLedPin, HIGH);
  }

  delay(500); 
}

Explication du code

Le Trigger

Un signal d’état haut (HIGH) de 10 microsecondes est envoyé sur le Trigger (Déclencheur). Celui-ci émet une onde ultra son de 40Kz .
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);

pulseIn()

De façon générale, la fonction pulseIn() permet de calculer une durée d’état haut ou bas.
Lorque le Trigger passe à l’état haut, l’echo passe à l’état haut et une horloge interne démarre. Lorsque l’Echo reçoit l’onde ultra son, celui-ci passe à l’état bas et l’horloge s’arrète.
La fonction pulseIn() renvoie dans ce cas la durée de l’état haut. Elle correspond au temps mis par l’onde pour se déplacer du Trigger à l’Echo.
pulseIn() retourne une durée en microsecondes.
unsigned long duration;

Les 3 arguments de la fonction pulseIn(pin, value, timeout)

  1. arg1 : pin de l’Echo
  2. arg2 : état haut ou bas (calcul de durée d’un état haut ou bas)
  3. arg3 : durée d’attente en microsecondes d’une réception sur l’Echo. Si aucune réception n’arrive avant la fin du timeout, pulseIn() retourne 0

timeout

Concrètement, au delà d’une distance de 4 mètres, on repasse l’Echo à l’etat bas.
Le timeout prend donc la valeur : 8/340 ~25 = 0.025 s soit 25ms (millisecondes) ou 25000microsecondes
Rqe : par défaut, le timeout est de 1 seconde.

Calcul de la distance en cm

distance = (0.0340 x duration) / 2

Par approximation la vitesse du son est définie à 340m/s soit 340*100 cm/s.
pulseIn() retourne une durée en microsecondes, il faut donc multiplier par 1000000 pour obtenir des secondes.
La distance séparant le capteur de l’objet détecté correspoond à la moitié de la distance parcourue par l’onde ultra son.