M é m o - l a b .
introduction
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);
}
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;
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.