12 février 2016
Arduino leçon 26 : Le détecteur à ultrasons


découvrir la fonction pulseIn()
Cette fonction d'Arduino nous donne la durée d'un créneau en microsecondes.
On branche un bouton poussoir de la manière habituelle sur l'entrée 11 d'Arduino et
cette fonction nous dira combien de temps on a appuyé.
C'est une fonction standard d'Arduino que nous n'avions pas encore rencontrée.
/* pulseIn.ino tester la fonction pulseIn() */ long dureeAppui; void setup() { Serial.begin(9600); } void loop() { dureeAppui=pulseIn(11, HIGH); Serial.println(dureeAppui); } |
Timing de cette fonction
Si le niveau est déjà haut, elle attend que le niveau soit bas puis elle mesure le temps à partir du moment où il (re)passe haut.
Au font montant, elle compte le temps jusqu'au front descendant et renvoie le nombre de microsecondes écoulé.
Si le front montant n'est pas arrivé au bout d'une seconde, elle renvoie 0.
Si le niveau haut dure plus d'une seconde, elle renvoie 0.
Si vous êtes curieux vous pouvez voir les options ici en anglais.
Utilisation du module
Arduino (ou n'importe quel autre système) envoie le signal de déclenchement sur la borne TRIGGER du module.
Le module passe sa borne ECHO à l'état HAUT et il envoie alors un train d'ondes. Quand l'écho arrive, cette borne repasse à l'état bas.
La borne ECHO reliée à la pin 11 joue le même rôle que votre doigt sur le bouton poussoir : pulseIn() va mesurer sa durée.>
La fonction pulseIn() d'Arduino renvoie le nombre de microsecondes pendant lequel la broche est restée à HAUT.
Calcul de la distance
La variable lecture_echo contiendra le nombre de microsecondes écoulées entre l'envoi et le retour du signal.
Le son (ultra ou audible) se déplace à 340 m/s.
En une microseconde, il parcourt 340 microns ou 0.340 mm ou 0.034 cm.
En lecture_echo micoseconde, il parcourt lecture_echo * 0.034 cm.
Ce parcours correspond à l'aller retour. La distance est la moitié de ce nombre.
/* ultrason.ino Utilisation du capteur à ultrasons HC-SR04 */ // définition des broches utilisées int trigger = 12; int echo = 11; unsigned long lecture_echo; float cm; void setup() { pinMode(trigger, OUTPUT); digitalWrite(trig, LOW); Serial.begin(9600); } void loop() { digitalWrite(trigger, HIGH); delayMicroseconds(10); digitalWrite(trigger, LOW); lecture_echo = pulseIn(echo, HIGH); cm = lecture_echo * 0.017 ; Serial.print("Distance : "); Serial.print(cm); Serial.println(" cm"); delay(1000); } |
On peut utiliser ce module pour permettre à un robot de détecter un obstacle sur son chemin.
haut de la page

