Capteur de distance
Le capteur à ultrasons HC-SR04 permet de détecter la distance qui le sépare d'un obstacle en émettant des ultrasons.
Définition : Principe
La broche Trig (trigger) reçoit la demande d'émettre des ultrasons. Le capteur émet un signal d'ultrasons assez court qui rebondit sur un obstacle et revient au capteur. Le capteur passe la broche Echo à l’état haut à partir de la fin de l'émission de son signal jusqu'à ce qu'il détecte le retour.
La distance entre le capteur et l'obstacle dépend du temps pendant lequel la broche echo était à l'état haut ainsi que de la vitesse des ultrasons.
Distance = Temps * Vitesse
Les ultrasons ayant fait un allé-retour, il faudra diviser par deux pour obtenir la distance jusqu'à l'obstacle.
Distance = Temps * Vitesseson / 2
Vitesseson = 340 m/s = 0,034 cm/μs
Définition : Exemple
Pour lancer une demande de distance, il faut envoyer un signal de 10μs sur la broche TRIG avec les fonctions
digitalWrite() et delayMicroseconds(). On met TRIG à LOW pendant 5μs puis à HIGHT pendant 10μs puis à LOW.
Ensuite on écoute la broche ECHO en mesurant la longueur du signal avec la fonction pulseIn(ECHO, HIGH).
const int TRIG = 6;
const int ECHO = 5;
void setup()
{
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop()
{
// Émission d'un signal de durée 10 microsecondes
digitalWrite(TRIG, LOW);
delayMicroseconds(5);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
// Écoute de l'écho
long temps = pulseIn(ECHO, HIGH);
// Calcul de la distance
int distance = temps * 0.034 / 2;
// Affichage de la distance
Serial.print("Distance : ");
Serial.print(distance);
Serial.println("cm");
}
Définition : NewPing.h
Pour simplifier la programmation, on peut utiliser une bibliothèque.
Il en existe une multitude (ultrasonic, HCSR04, ...).
Nous utilisons ici NewPing.h
const int TRIG = 6;
const int ECHO = 5;
const int MAX_DISTANCE 200
NewPing signal(TRIG, ECHO, MAX_DISTANCE);
void setup()
{
Serial.begin(9600);
}
void loop()
{
int distance = signal.ping_cm();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
}
signal : nom de la variable contenant l'instance de la classe NewPing
ping_cm : méthode qui retourne la distance en cm