Raspberry, un robot éviteur d’obstacles

Voici un grand classique lors de l’apprentissage de la robotique que ce soit sur Arduino que sur Raspberry. Après avoir vu un robot suiveur de ligne à base d’Arduino. Voici un robot éviteur d’obstacle.

Il s’agit d’un projet que tu pourras facilement mener à terme même avec un niveau débutant.

Rôle du robot éviteur d’obstacle

Le principe de ce robot est simple: éviter les obstacles. Pour cela, on va utiliser un capteur à ultra-sons HC-SR04, très couramment utilisé grâce à un prix accessible.

Lorsqu’un obstacle sera à moins de 20 cm, le robot tournera et continuera à avancer si le champ est libre.

Voici un exemple de robot éviteur :

Et une autre vidéo avec un robot un peu plus évoluer :

Matériels nécessaires

Pour la réalisation de ce robot, tu vas avoir besoin :

  • 1 Raspberry Pi 4 (Amazon) ou Pi 3 (Amazon), voir des modèles en-dessous.
  • 1 chassis avec deux moteurs et un boitier batterie, voir le lien Amazon.
  • 1 module L298N pour le contrôle des moteurs et ne pas grillé ta carte Arduino, vers le lien Amazon.
  • différents fils pour la connexion, voir le lien Amazon.
  • 1 capteur à ultra-sons HC-SR04, voir le lien Amazon.
  • 1 planche à pain (pas de boulanger) mais pour le branchement du capteur qui te sera toujours utile, pour ma part, j’en ai plusieurs de différentes tailles, voir le lien Amazon.

Avec tout cela, tu devrais avoir ce qu’il te faut. Si tu es amené à faire à faire d’autres projets, je t’invite à éviter les petits lots. Les liens Amazon me permettent de gagner quelques euros dans le mois (pas plus) qui me paie mon nom de domaine et l’hébergement du site.

Montage du robot éviteur d’obstacles

Afin de réaliser ce robot, tu vas devoir assembler les différents éléments.

Les moteurs

Il s’agit de la partie la plus importante de cet article. En effet, vous ne devez surtout pas connecter les moteurs directement sur le Raspberry au risque de détruire votre jouet favoris. L’intensité demandée par les moteurs est bien supérieurs à celle que le Pi peut fournir.

Tu passeras donc par le module L298N dont vous pouvez suivre ce lien pour en apprendre plus.

Pour ce qui est du câblage (le schéma provient de l’excellent site dont le lien est en bas de l’article) :

Pour ce qui est du câblage :

  • Broche +12 du L298N: Borne positive de l’alimentation des moteurs (12 V est un maximum).
  • Broche GND du L298N: Borne négative de l’alimentation des moteurs et une broche GND du Raspberry Pi.
  • OUT1 et OUT2 du L298N branchées à un des moteurs.
  • OUT3 et OUT4 du L298N branchées à l’autre moteur
  • ENA du L298N broche BCM 25 (BOARD 22) du Raspberry Pi
  • IN1 du L298N  broche BCM 23 (BOARD 16) du Raspberry Pi
  • IN2 du L298N broche BCM 12 (BOARD 18) du Raspberry Pi
  • IN3 du L298N broche BCM 10 (BOARD 19) du Raspberry Pi
  • IN4 du L298N broche BCM 9 (BOARD 21) du Raspberry Pi
  • ENB du L298N broche BCM 11 (BOARD 23) du Raspberry Pi

Le capteur à ultra-sons HC-SR04

Aucune difficulté du côté du capteur, seulement une réelle attention à porter sur la connexion du capteur sur le Raspberry. Le Raspberry accepte des tensions de 3,3V en entrée (information en conclusion de cet article), le capteur fournira une tension de 5V, un diviseur de tension est mis en place pour ne pas abîmé le Pi :

Pour ce qui est du câblage :

  • La broche Vcc du HC-SR04 est branchée à une sortie 5 V (broche numéro 2) du Raspberry Pi.
  • La broche Trig du HC-SR04 est branchée à la broche 8 (GPIO 14) du Raspberry Pi 
  • La broche Echo du HC-SR04 est branchée à la broche 10 (GPIO 15) du Raspberry Pi, par l’entremise du diviseur de tension schématisé ci-dessus.
  • La broche Gnd du HC-SR04 est branchée à une des broches Gnd du Raspberry Pi (la broche 25, par exemple)

Alimentation

Pour ce qui est l’alimentation, différencies bien l’alimentation du Raspberry, tu peux choisir une batterie externe comme celle-ci sur Amazon. L’avantage de celle-ci est que l’adaptateur fera qu’elle sera compatible pour le Pi 3 et Pi 4.

Pour les moteurs, si tu as opté pour le chassis que je t’ai proposé au-dessus, le porte-batterie fera l’affaire (en fonction de la tension nécessaire pour les moteurs.

Programmation Raspberry

Le programme permettra au Pi d’avancer tant qu’il n’y a pas d’obstacle à moins de 20 cm, la mesure est faite par le capteur (voir les détails d’utilisation du capteur sur cette page).

#!/usr/bin/env python
# -*- coding: latin-1 -*-

'''
Robot éviteur d'obstacle basé sur le Raspberry Pi et un HC-SR04.

Pour plus d'infos:

https://electroniqueamateur.blogspot.com/2020/04/robot-eviteur-dobstacles-version.html

'''

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

# définition des broches GPIO

Moteur1A = 16      ## premiere sortie du premier moteur, pin 16
Moteur1B = 18      ## deuxieme sortie de premier moteur, pin 18
Moteur1E = 22      ## enable du premier moteur, pin 22

Moteur2A = 19      ## premiere sortie du deuxieme moteur, pin 19
Moteur2B = 21      ## deuxieme sortie de deuxieme moteur, pin 21
Moteur2E = 23      ## enable du deuxieme moteur, pin 23

trigPin = 8        ## entrée trig du HC-SR04 branchée à la broche 8 (GPIO 14) du Raspi
echoPin = 10       ## sortie echo du HC-SR04 branchée à la broche 10 (GPIO 15) du Raspi

# 6 broches sont des sorties
GPIO.setup(Moteur1A,GPIO.OUT)  
GPIO.setup(Moteur1B,GPIO.OUT)
GPIO.setup(Moteur1E,GPIO.OUT)
GPIO.setup(Moteur2A,GPIO.OUT) 
GPIO.setup(Moteur2B,GPIO.OUT)
GPIO.setup(Moteur2E,GPIO.OUT)
GPIO.setup(trigPin,GPIO.OUT)

# 1 broche est une entrée
GPIO.setup(echoPin,GPIO.IN)
GPIO.output(trigPin, False)

while True:

# vérifier si un obstacle est en vue

    GPIO.output(trigPin, True)     ## on envoie une brève impulsion sur la pin Trig
    time.sleep(0.00001)
    GPIO.output(trigPin, False)

    while GPIO.input(echoPin)==0:  ## émission de l'ultrason
        debutImpulsion = time.time()

    while GPIO.input(echoPin)==1:   ## retour de l'écho
        finImpulsion = time.time()

    distance = (finImpulsion - debutImpulsion) * 340 * 100 / 2  ## car vitesse du son = 340 m/s

    if distance > 20:
        # pas d'obstacle: on avance
        GPIO.output(Moteur1A,GPIO.HIGH)
        GPIO.output(Moteur1B,GPIO.LOW)
        GPIO.output(Moteur1E,GPIO.HIGH)
        GPIO.output(Moteur2A,GPIO.HIGH)
        GPIO.output(Moteur2B,GPIO.LOW)
        GPIO.output(Moteur2E,GPIO.HIGH)
    else:
        # obstacle détecté: on tourne sur place
        GPIO.output(Moteur1A,GPIO.LOW)
        GPIO.output(Moteur1B,GPIO.HIGH)
        GPIO.output(Moteur1E,GPIO.HIGH)
        GPIO.output(Moteur2A,GPIO.HIGH)
        GPIO.output(Moteur2B,GPIO.LOW)
        GPIO.output(Moteur2E,GPIO.HIGH)

# on attend un peu avant de vérifier à nouveau
    time.sleep(.5)

Conclusion

Vous voici avec un beau robot qui évitera les obstacles, bien entendu ce projet a un but pédagogique, il te permettra d’appréhender la robotique sur le Raspberry.

Il faudra faire attention aux tensions du Raspberry qui en entrée accepte 3.3V et pas 5V au risque de détruire votre Pi.

Ce tutoriel a été vu pour la première fois sur electroniqueamateur.blogspot.com.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.