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.