lundi 16 septembre 2013

Robot éviteur d'obstacles version 1.0

Voici un projet classique et pas trop compliqué qui figurait depuis longtemps sur ma liste de choses à essayer:  un robot à base d'Arduino qui utilise un capteur à ultrasons pour détecter la présence d'obstacles devant lui (et modifier sa trajectoire afin de les éviter).

Comportement du robot:

Le robot utilise constamment une sonde à ultrasons pour détecter la présence d'un obstacle devant lui.   Si aucun obstacle n'est détecté à moins de 30 cm devant lui, il continue d'avancer en ligne droite.  Si un obstacle est détecté à 30 cm ou moins, il tourne sur lui-même jusqu'à ce que la voie soit libre sur une distance d'au moins 30 cm.

Matériel:

Une base de robot à 2 roues motrices (chaque roue étant actionnée par son propre moteur électrique), un Arduino Uno, une sonde ultrasonore HC-SR04 (pour bien faire il en faudrait plus qu'une, tel que mentionné plus loin dans cet article), un contrôleur de moteur L293D, 6 piles AA rechargeables (NiMh) pour l'alimentation des moteurs et une pile 9 V pour l'alimentation de l'Arduino.

Le circuit:

Le schéma ci-dessous indique comment brancher les moteurs et l'Arduino au L293D.  Toutes les masses ("GND") doivent être reliées ensemble:  celles du L293D, de l'Arduino et du HC-SR04 ainsi que la borne négative de l'alimentation des moteurs.

J'ai branché la sonde ultrasonore HC-SR04 de la façon suivante:

          GND : Arduino GND
          Echo:  Arduino  11
          Trig: Arduino 12
          Vcc: Arduino 5V



Le sketch:

J'aurais certainement obtenu un algorithme plus performant si je m'étais donné la peine de m'inspirer d'un sketch produit par un de mes nombreux prédécesseurs.  Je ne suis néanmoins obstiné à rédiger mon propre sketch à partir de zéro, sans me préoccuper de ce que font ceux qui s'y connaissent mieux que moi en robotique.  Au départ, il arrivait assez souvent que mon robot modifie sa trajectoire alors qu'aucun obstacle ne se trouvait devant lui:  j'ai donc ajouté une seconde mesure à partir du capteur HC-SR04 afin de rejeter ces "faux positifs".


Aspects à améliorer dans une future version:

Il faudra ajouter des sondes ultrasonores supplémentaires:  le robot détecte bien la présence d'un mur situé droit devant lui, mais son champ de vision est beaucoup plus étroit que sa propre largeur:  par conséquent, il s'accroche à des obstacles situés sur les côtés.   Grâce à deux capteurs placés côte à côte, le robot pourra aussi faire la différence entre un obstacle situé à gauche ou à droite, et choisir le sens de son virage en conséquence.

Certains obstacles sont difficilement détectées par les sondes ultrasonores (des pattes de chaises, des obstacles très bas, etc.):  l'ajout de capteurs différents sera également utile (interrupteur se déclenchant lors d'un contact, capteur à effet Hall pour détecter qu'une roue ne tourne plus, etc.).

Une grande partie du plaisir de construire un robot consiste à améliorer progressivement ses performance; arriver à un essai optimal dès les premières tentatives aurait été un peu décevant, dans le fond...

Yves Pelletier   (Twitter:  @ElectroAmateur)

Note:  la suite de cet article a été publié le 21 avril 2014:  Robot éviteur d'obstacles version 2.0 .

6 commentaires:

  1. Bonjour :)
    si on va utiliser un capteur sharp de distance et non un capteur ultrasonic quelle modification faut faire au code ?

    RépondreSupprimer
  2. Application "Robot éviteur d'obstacles version 1.0 "

    Bonjour,
    Merci pour le partage de votre projet, j'ai réalisé un Kit de pièces imprimées en 3D pour transformer une plaque d’essai en châssis de voiture.
    J'ai utilisé votre projet pour mon premier essai, je vous ai donc cité.
    http://www.thingiverse.com/thing:2249831
    ou
    https://www.youmagine.com/alain-ducros/designs
    Cordialement
    Alain

    RépondreSupprimer
  3. bonjour je suis en 3eme, pour mon exercice de technologie je dois expliquer les normes d'un robot éviteur.
    Pourriez vous me répondre dans l'heure s'il vous plait.

    RépondreSupprimer