Dans ce tutoriel nous allons voir le principe de fonctionnement d’un capteur ultrason ainsi que son utilisation avec Arduino et citer quelque exemple de projets avec ce dernier
Les types de capteurs disponible dans le marché
Il existe sur le marché un grand nombre de capteurs de distance : infrarouge (réflectif), laser (par temps de parcours ou par calcul d’angle), physique (règles optiques absolues ou incrémentielles ), ou ultrason.
- Les capteurs infrarouges ont l’avantage d’être bon marché, relativement précis et disponibles à peu près partout. Malheureusement, ils sont assez complexes à mettre en oeuvre du fait de leurs non-linéarités. Il faut appliquer une formule complexe pour obtenir une mesure utilisable. De plus, ils sont très sensibles à la lumière ambiante et au coefficient de réflexion lumineuse de la surface en face du capteur
- Les (vrais) capteurs de distance laser sont extrêmement précis, mais aussi extrêmement chers. Un capteur de distance laser (par mesure de temps de parcours) coûte facilement plus de 200€, mais fait des mesures à plus de 30 mètres sans problème pour certains modèles. C’est donc au final une question de budget / utilisation.PS Il existe des (faux) capteurs de distance laser fonctionnant par triangulation. Au lieu de mesurer le temps d’aller-retour d’un faisceau laser, ces modules calculent l’angle entre le point du laser et le capteur. Ces modules sont moins chers, mais aussi beaucoup moins précis
- Les capteurs physiques, le plus souvent un duo comportant une règle graduée et un capteur optique, sont à la fois bon marché et très précis. Mais ils sont très limités en distance mesurable et se retrouvent donc généralement dans des imprimantes
Et maintenant intéressons nous a notre capteur ultrasonUn capteur de distance à ultrason utilise le même principe qu’un capteur laser, mais en utilisant des ondes sonores (inaudible) au lieu d’un faisceau de lumière. Ils sont bien moins chers qu’un capteur laser, mais aussi bien moins précis. Cependant, contrairement aux capteurs à infrarouge, la lumière ambiante et l’opacité de la surface en face du capteur ne jouent pas sur la mesure.
Le Montage
Le Code
[pastacode « c » manual= »%2F%2FInitialisation%20des%20pins%202%20et%203%0Aconst%20byte%20TRIGGER_PIN%20%3D%202%3B%20%2F%2F%20Broche%20TRIGGER%0Aconst%20byte%20ECHO_PIN%20%3D%203%3B%20%20%20%20%2F%2F%20Broche%20ECHO%0A%20%0A%2F*%20Constantes%20pour%20le%20timeout%20*%2F%0Aconst%20unsigned%20long%20MEASURE_TIMEOUT%20%3D%2025000UL%3B%20%2F%2F%2025ms%20%3D%20~8m%20%C3%A0%20340m%2Fs%0A%0A%2F*%20Vitesse%20du%20son%20dans%20l’air%20en%20mm%2Fus%20*%2F%0Aconst%20float%20SOUND_SPEED%20%3D%20340.0%20%2F%201000%3B%0A%0Avoid%20setup()%20%7B%0A%20%20%20%0A%20%20%2F*%20Initialise%20le%20port%20s%C3%A9rie%20*%2F%0A%20%20Serial.begin(115200)%3B%0A%20%20%20%0A%20%20%2F*%20Initialise%20les%20broches%20*%2F%0A%20%20pinMode(TRIGGER_PIN%2C%20OUTPUT)%3B%0A%20%20digitalWrite(TRIGGER_PIN%2C%20LOW)%3B%20%2F%2F%20La%20broche%20TRIGGER%20doit%20%C3%AAtre%20%C3%A0%20LOW%20au%20repos%0A%20%20pinMode(ECHO_PIN%2C%20INPUT)%3B%0A%7D%0A%0Avoid%20loop()%20%7B%0A%20%20%0A%20%20%2F*%201.%20Lance%20une%20mesure%20de%20distance%20en%20envoyant%20une%20impulsion%20HIGH%20de%2010%C2%B5s%20sur%20la%20broche%20TRIGGER%20*%2F%0A%20%20digitalWrite(TRIGGER_PIN%2C%20HIGH)%3B%0A%20%20delayMicroseconds(10)%3B%0A%20%20digitalWrite(TRIGGER_PIN%2C%20LOW)%3B%0A%20%20%0A%20%20%2F*%202.%20Mesure%20le%20temps%20entre%20l’envoi%20de%20l’impulsion%20ultrasonique%20et%20son%20%C3%A9cho%20(si%20il%20existe)%20*%2F%0A%20%20long%20measure%20%3D%20pulseIn(ECHO_PIN%2C%20HIGH%2C%20MEASURE_TIMEOUT)%3B%0A%20%20%20%0A%20%20%2F*%203.%20Calcul%20la%20distance%20%C3%A0%20partir%20du%20temps%20mesur%C3%A9%20*%2F%0A%20%20float%20distance_mm%20%3D%20measure%20%2F%202.0%20*%20SOUND_SPEED%3B%0A%20%20%20%0A%20%20%2F*%20Affiche%20les%20r%C3%A9sultats%20en%20mm%2C%20cm%20et%20m%20*%2F%0A%20%20Serial.print(F(%22Distance%3A%20%22))%3B%0A%20%20Serial.print(distance_mm)%3B%0A%20%20Serial.print(F(%22mm%20(%22))%3B%0A%20%20Serial.print(distance_mm%20%2F%2010.0%2C%202)%3B%0A%20%20Serial.print(F(%22cm%2C%20%22))%3B%0A%20%20Serial.print(distance_mm%20%2F%201000.0%2C%202)%3B%0A%20%20Serial.println(F(%22m)%22))%3B%0A%20%20%20%0A%20%20%2F*%20D%C3%A9lai%20d’attente%20pour%20%C3%A9viter%20d’afficher%20trop%20de%20r%C3%A9sultats%20%C3%A0%20la%20seconde%20*%2F%0A%20%20delay(500)%3B%0A%7D%0A%7D » message= » » highlight= » » provider= »manual »/]
Voila vous n’avez plus qu’a vous amuser 😀