6. Jouer avec le module ultrasonique

Dans le projet 5. Jouer avec le module d’évitement d’obstacles, les 2 modules infrarouges d’évitement d’obstacles sont utilisés pour éviter les obstacles, mais la distance de détection du module d’évitement d’obstacle IR est courte, ce qui peut rendre la voiture trop tardive pour éviter les obstacles.

Dans ce projet, nous utilisons un module ultrasonique pour effectuer une détection à longue distance, afin que la voiture puisse détecter les obstacles à une distance plus éloignée et prendre une décision.

Composants requis

Pour ce projet, nous avons besoin des composants suivants.

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ÉLÉMENTS DANS CE KIT

LIEN

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Carte SunFounder R3

BUY

Module de Contrôle Moteur L9110

-

Moteur TT

-

Module Ultrasonique

BUY

Câblage

Un module de capteur ultrasonique est un instrument qui mesure la distance à un objet à l’aide d’ondes sonores ultrasoniques. Il possède deux sondes. L’une est pour envoyer des ondes ultrasoniques et l’autre pour recevoir les ondes et transformer le temps d’envoi et de réception en une distance, détectant ainsi la distance entre l’appareil et un obstacle.

Construisez maintenant le circuit selon le schéma suivant.

Ultrasonic Module

R3 Board

Vcc

5V

Trig

3

Echo

4

Gnd

GND

../_images/car_6.png

Code

Note

  • Ouvrez le fichier 6.ultrasonic_module.ino situé dans le dossier 3in1-kit\car_project\6.ultrasonic_module.

  • Ou copiez ce code dans Arduino IDE.

  • Ou téléchargez le code via Arduino Web Editor.

Après le téléchargement réussi du code, orientez la voiture vers un mur. Si la distance est trop grande, elle avancera ; si elle est trop proche, elle reculera ; si elle est à une distance sûre, elle s’arrêtera.

Comment ça fonctionne ?

Ce projet se base sur la distance lue par le module ultrasonique pour faire bouger la voiture en conséquence.

  1. Ajoutez la définition de pin pour le module ultrasonique, trigPin est utilisé pour transmettre l’onde ultrasonique, réglez-le sur OUTPUT ; echoPin est réglé sur INPUT pour recevoir l’onde ultrasonique.

    ...
    const int trigPin = 3;
    const int echoPin = 4;
    
    void setup() {
    ...
    
    //ultrasonic
        pinMode(echoPin, INPUT);
        pinMode(trigPin, OUTPUT);
    }
    
  2. Lisez d’abord la valeur de distance obtenue à partir du module ultrasonique, si la distance est supérieure à 25, laissez la voiture avancer ; si la distance est entre 2-10cm, laissez la voiture reculer, sinon (entre 10~25) arrêtez.

    void loop() {
        float distance = readSensorData();
        if (distance > 25) {
            moveForward(200);
        }
        else if (distance < 10 && distance > 2) {
            moveBackward(200);
        } else {
            stopMove();
        }
    }
    
  3. À propos de la fonction readSensorData().

    L’émetteur du module ultrasonique transmet un signal carré de 10us toutes les 2us, et le récepteur reçoit un signal de niveau haut s’il y a un obstacle dans la portée. Utilisez la fonction pulseIn() pour enregistrer le temps de l’envoi à la réception, divisez par la vitesse du son 340m/s, puis divisez par 2, le résultat est la distance entre ce module et l’obstacle en unités : cm.

    float readSensorData() {
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
        return distance;
    }
    
  • pulseIn(pin, value)

    • pin : le numéro du pin Arduino sur lequel vous voulez lire l’impulsion. Types de données autorisés : int.

    • value : type d’impulsion à lire : soit HIGH, soit LOW. Types de données autorisés : int.

    Lit une impulsion (soit HIGH, soit LOW) sur un pin. Par exemple, si la valeur est HIGH, pulseIn() attend que le pin passe de LOW à HIGH, commence à chronométrer, puis attend que le pin redevienne LOW et arrête le chronométrage.