Arduino - Capteur à ultrasons

Dans ce tutoriel, nous allons apprendre :

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×Ultrasonic Sensor
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du capteur ultrasonique

Le capteur ultrasonique HC-SR04 est utilisé pour mesurer la distance à un objet en utilisant des ondes ultrasonores.

Brochage

Le capteur ultrasonique HC-SR04 comprend quatre broches :

  • Broche VCC : doit être connectée à VCC (5V)
  • Broche GND : doit être connectée à GND (0V)
  • Broche TRIG : cette broche reçoit le signal de commande (impulsion) de l'Arduino.
  • Broche ECHO : cette broche envoie un signal (impulsion) à l'Arduino. Arduino mesure la durée de l'impulsion pour calculer la distance.
Schéma de brochage du capteur ultrasonique
image source: diyables.io

Comment ça fonctionne

Cette section est consacrée à des connaissances approfondies. NE vous inquiétez pas si vous ne comprenez pas. Ignorez cette section si elle vous surcharge, et revenez un autre jour. Continuez à lire les sections suivantes.
  • I. Micro-contrôleur : génère une impulsion de 10 microsecondes sur la broche TRIG.
  • I. Le capteur ultrasonore émet automatiquement les ondes ultrasonores.
  • I. L'onde ultrasonore est réfléchie après avoir frappé un obstacle.
  • I. Le capteur ultrasonore :
    • Détecte l'onde ultrasonore réfléchie.
    • Mesure le temps de parcours de l'onde ultrasonore.
  • I. Capteur ultrasonore : génère une impulsion vers la broche ECHO. La durée de l'impulsion est égale au temps de parcours de l'onde ultrasonore.
  • I. Le micro-contrôleur mesure la durée de l'impulsion dans la broche ECHO, puis calcule la distance entre le capteur et l'obstacle.

Comment obtenir la distance à partir d'un capteur à ultrasons

Pour obtenir la distance à partir du capteur ultrasonique, il suffit de réaliser deux étapes (1 et 6 de la partie Comment ça marche).

  • Génère une impulsion de 10 microsecondes sur la broche TRIG
  • Mesure la durée de l'impulsion sur la broche ECHO, puis calcule la distance entre le capteur et l'obstacle.

Calcul de la distance

Nous avons :

  • Le temps de voyage de l'onde ultrasonore (µs) : travel_time = pulse_duration
  • La vitesse de l'onde ultrasonore : speed = SPEED_OF_SOUND = 340 m/s = 0,034 cm/µs

Alors :

  • La distance parcourue par l'onde ultrasonique (cm) : distance_de_parcours = vitesse × temps_de_parcours = 0.034 × durée_d'impulsion
  • La distance entre le capteur et l'obstacle (cm) : distance = distance_de_parcours / 2 = 0.034 × durée_d'impulsion / 2 = 0.017 × durée_d'impulsion

Arduino - Capteur ultrasonique

Les broches d'Arduino peuvent générer une impulsion de 10 microsecondes et mesurer la durée de l'impulsion. Par conséquent, nous pouvons obtenir la distance à partir du capteur ultrasonique en utilisant deux broches d'Arduino :

  • Une broche est connectée à la broche TRIG pour générer une impulsion de 10 µs à la broche TRIG du capteur.
  • Une autre broche est connectée à la broche ECHO pour mesurer l'impulsion provenant du capteur.

Diagramme de câblage

Schéma de câblage du capteur ultrasonique Arduino

This image is created using Fritzing. Click to enlarge image

Comment programmer pour un capteur ultrasonique

  • Générez une impulsion de 10 microsecondes sur la broche de l'Arduino en utilisant les fonctions digitalWrite() et delayMicroseconds(). Par exemple, la broche 9 :
digitalWrite(9, HIGH); delayMicroseconds(10); digitalWrite(9, LOW);
  • Mesure la durée d'impulsion (µs) sur la broche de l'Arduino en utilisant la fonction pulseIn(). Par exemple, broche 8 :
duration_us = pulseIn(8, HIGH);
  • Calculez la distance (cm) :
distance_cm = 0.017 * duration_us;

Code Arduino

/* * Created by ArduinoGetStarted, https://arduinogetstarted.com * * Arduino - Ultrasonic Sensor HC-SR04 * * Wiring: Ultrasonic Sensor -> Arduino: * - VCC -> 5VDC * - TRIG -> Pin 9 * - ECHO -> Pin 8 * - GND -> GND * * Tutorial is available here: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor */ int trigPin = 9; // TRIG pin int echoPin = 8; // ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // configure the trigger pin to output mode pinMode(trigPin, OUTPUT); // configure the echo pin to input mode pinMode(echoPin, INPUT); } void loop() { // generate 10-microsecond pulse to TRIG pin digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // measure duration of pulse from ECHO pin duration_us = pulseIn(echoPin, HIGH); // calculate the distance distance_cm = 0.017 * duration_us; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload sur l'IDE Arduino pour téléverser le code sur Arduino
IDE Arduino - Comment télécharger du code
  • Ouvrez le moniteur série
  • Déplacez votre main devant le capteur ultrasonique
  • Regardez la distance entre le capteur et votre main sur le moniteur série
COM6
Send
distance: 29.4 cm distance: 27.6 cm distance: 26.9 cm distance: 17.4 cm distance: 16.9 cm distance: 14.3 cm distance: 15.6 cm distance: 13.1 cm
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explication du code

Vous pouvez trouver l'explication dans la ligne de commentaires du code Arduino ci-dessus.

Comment filtrer le bruit des mesures de distance d'un capteur ultrasonique.

Le résultat de mesure du capteur ultrasonique contient du bruit. Dans certaines applications, le résultat bruité provoque un fonctionnement indésirable. Nous pouvons supprimer le bruit en utilisant l'algorithme suivant :

  • I. prendre plusieurs mesures et les stocker dans un tableau
  • I. trier le tableau dans l'ordre croissant
  • I. filtrer le bruit
    • Les plus petits échantillons sont considérés comme du bruit → les ignorer
    • Les plus grands échantillons sont considérés comme du bruit → les ignorer
    • Obtenir la moyenne des échantillons du milieu

    L'exemple de code ci-dessous prend 20 mesures

    • Les cinq plus petits échantillons sont considérés comme du bruit → ignorez-les
    • Les cinq plus grands échantillons sont considérés comme du bruit → ignorez-les
    • ⇒ obtenez la moyenne des 10 échantillons du milieu (du 5ème au 14ème)
    /* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino/arduino-ultrasonic-sensor */ #define TRIG_PIN 9 // TRIG pin #define ECHO_PIN 8 // ECHO pin float filterArray[20]; // array to store data samples from sensor float distance; // store the distance from sensor void setup() { // begin serial port Serial.begin (9600); // configure the trigger and echo pins to output mode pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // to avoid untrasonic interfering } // 2. SORTING THE ARRAY IN ASCENDING ORDER for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float swap = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = swap; } } } // 3. FILTERING NOISE // + the five smallest samples are considered as noise -> ignore it // + the five biggest samples are considered as noise -> ignore it // ---------------------------------------------------------------- // => get average of the 10 middle samples (from 5th to 14th) double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); } float ultrasonicMeasure() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin float duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance float distance_cm = 0.017 * duration_us; return distance_cm; }

Vidéo

Mettez-vous au défi

Utilisez un capteur à ultrasons pour réaliser l'un des projets suivants :

  • Évitement des collisions pour voiture RC.
  • Détection du niveau de remplissage de la poubelle.
  • Surveillance du niveau de la poubelle.
  • Ouverture/fermeture automatique de la poubelle. Indice : Référez-vous à Arduino - Moteur Servo.

Connaissances supplémentaires

Certains fabricants fournissent le capteur ultrasonique qui possède 3 broches. Le signal TRIG et le signal ECHO sont sur la même broche. Dans ce cas, nous devons utiliser uniquement une broche de l'Arduino pour les deux fonctions : générer une impulsion vers le capteur et mesurer l'impulsion provenant du capteur.

Applications des capteurs à ultrasons

  • Évitement de collision
  • Détection de remplissage
  • Mesure de niveau
  • Détection de proximité

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!