5. Jouer avec le module d’évitement d’obstacles

Deux modules infrarouges d’évitement d’obstacles sont installés à l’avant de la voiture, ils permettent de détecter certains obstacles proches.

Dans ce projet, la voiture se déplace librement vers l’avant et, lorsqu’elle rencontre un obstacle, elle est capable de l’éviter et de continuer à se déplacer dans d’autres directions.

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 d’Évitement d’Obstacle

BUY

Câblage

Le module d’évitement d’obstacle est un capteur de proximité infrarouge à distance réglable dont la sortie est normalement haute et basse lorsqu’un obstacle est détecté.

Construisez maintenant le circuit selon le schéma ci-dessous.

Module IR gauche

Carte R3

OUT

8

GND

GND

VCC

5V

Module IR droit

Carte R3

OUT

7

GND

GND

VCC

5V

../_images/car_5.png

Ajuster le module

Avant de commencer le projet, vous devez régler la distance de détection du module.

Câblez selon le schéma ci-dessus, alimentez la carte R3 (soit en branchant directement le câble USB, soit en connectant le câble de la batterie 9V), sans télécharger le code.

Placez un carnet ou tout autre objet plat à environ 5 cm devant le module d’évitement d’obstacle IR.

Utilisez ensuite un tournevis pour tourner le potentiomètre sur le module jusqu’à ce que l’indicateur de signal sur le module s’allume, afin d’ajuster sa distance maximale de détection à 5 cm.

Suivez la même méthode pour régler l’autre module infrarouge.

../_images/ir_obs_cali.jpg

Code

Note

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

  • Ou copiez ce code dans Arduino IDE.

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

La voiture avancera une fois le code téléchargé avec succès. Lorsque le module infrarouge gauche détecte un obstacle, elle reculera vers la gauche ; lorsque le module infrarouge droit détecte un obstacle, elle reculera vers la droite ; si les deux côtés détectent un obstacle, elle reculera directement en arrière.

Comment ça fonctionne ?

Ce projet se base sur la valeur des modules d’évitement d’obstacles infrarouges gauche et droit pour faire prendre à la voiture l’action appropriée.

  1. Ajoutez la définition de pin pour les 2 modules d’évitement d’obstacles, ici ils sont réglés sur INPUT.

    ...
    const int rightIR = 7;
    const int leftIR = 8;
    
    void setup() {
    ...
    
    //IR obstacle
        pinMode(leftIR, INPUT);
        pinMode(rightIR, INPUT);
    }
    
  2. Lisez les valeurs des modules infrarouges gauche et droit et laissez la voiture prendre l’action correspondante.

    void loop() {
    
        int left = digitalRead(leftIR);   // 0: Obstructed  1: Empty
        int right = digitalRead(rightIR);
        int speed = 150;
    
        if (!left && right) {
            backLeft(speed);
        } else if (left && !right) {
            backRight(speed);
        } else if (!left && !right) {
            moveBackward(speed);
        } else {
            moveForward(speed);
        }
    }
    
    • Si le module IR gauche est à 0 (obstacle détecté) et le module IR droit est à 1, laissez la voiture reculer à gauche.

    • Si le module IR droit est à 0 (obstacle détecté), laissez la voiture reculer à droite.

    • Si les 2 modules IR détectent l’obstacle en même temps, la voiture reculera.

    • Sinon, la voiture continuera à avancer.

  3. À propos de la fonction backLeft().

    Lorsque le moteur droit tourne dans le sens antihoraire et que le moteur gauche ne tourne pas, la voiture reculera vers la gauche.

    void backLeft(int speed) {
        analogWrite(A_1B, speed);
        analogWrite(A_1A, 0);
        analogWrite(B_1B, 0);
        analogWrite(B_1A, 0);
    }
    
  4. À propos de la fonction backRight().

    Lorsque le moteur gauche tourne dans le sens horaire et que le moteur droit ne tourne pas, la voiture reculera vers la droite.

    void backRight(int speed) {
        analogWrite(A_1B, 0);
        analogWrite(A_1A, 0);
        analogWrite(B_1B, 0);
        analogWrite(B_1A, speed);
    }
    
  • && : L’opérateur logique ET donne un résultat vrai seulement si les deux opérandes sont vrais.

  • ! : L’opérateur logique NON donne un résultat vrai si l’opérande est faux et vice versa.