Raspberry, un robot suiveur de ligne

Après avoir vu le robot suiveur de ligne à base d’Arduino dans cet article, tu vas voir son homologue mais à base de Raspberry. Cet article est accessible pour des néophytes qui souhaitent apprendre et faire un projet plus concret. Cela permettra de voir le contrôle de deux moteurs (comme dans cette article), la gestion de photo-résistance ainsi que de led.

Rôle du robot suiveur

Comme vu lors de la réalisation d’un robot suiveur de ligne à base d’Arduino, le principe est identique, le robot suivra une ligne grâce à des photo-résistances et deux leds. En fonction de la position de la ligne par rapport au Raspberry, celui-corrigera la trajectoire en commandant ou pas les moteurs.

Voici des robots un peu plus évolué que celui que l’on va faire mais le principe reste identique :

Matériels nécessaires

Pour réaliser le robot, tu vas avoir besoin :

  • 2 moteurs à courant continu 5V avec un réducteur afin de ne pas faire une sortie de piste, vers le lien Amazon.
  • 1 module L298N pour le contrôle des moteurs et ne pas grillé ton Raspberry, vers le lien Amazon.
  • 1 Raspberry Pi 4 (Amazon) ou Pi 3 (Amazon), voir des modèles en-dessous.
  • 1 boitier de pile, voir le lien Amazon.
  • 2 led blanche, voir le lien Amazon.
  • 2 photo résistance, voir le lien Amazon.
  • des résistances, voir le lien Amazon.
  • 1 carte de prototypage, voir le lien Amazon.
  • différents fils pour la connexion, voir le lien Amazon.
  • 1 chassis, le modèle présenté sur le lien possède le boitier pour batterie ainsi que des moteurs, ceux-là risque d’être bien trop rapide pour notre projet mais pourront être réutilisés, 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

Afin de réaliser le robot, nous allons voir chaque partie de manière indépendante.

Mise au point du capteur

Le Raspberry, à la différence de l’Arduino n’accepte pas des tensions supérieurs à 3,3V en entrée. De ce faite, nous allons alimenter la carte capteurs avec deux tensions :

  • 5V pour alimenter les leds
  • 3,3V pour les photo-résistances

En vue de face, le capteur donne cela :

Le capteur de gauche est connecté à la broche BCM 17 (BOARD 11) du Raspberry Pi et la sortie du capteur de droite à la broche BCM 27 (BOARD 13). Il faut bien sûr alimenter les capteurs (broches GND et 3,3 V). J’ai conçu mon capteur pour que les LEDs soient alimentées en 5 V, ce qui n’est pas nécessairement le cas si vous utilisez un autre modèle de capteur.

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

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 châssis que je t’ai proposé au-dessus, le porte-batterie fera l’affaire (en fonction de la tension nécessaire pour les moteurs.

Programmation du Raspberry

La programmation du capteur se fait en langage Python.

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

'''
Robot suiveur de ligne, version Raspberry Pi.

Pour plus d'informations:

https://electroniqueamateur.blogspot.com/2020/04/robot-suiveur-de-ligne-version_13.html

'''

import RPi.GPIO as GPIO
     
GPIO.setmode(GPIO.BOARD)  #notation board plutôt que BCM
     
Moteur1A = 16      ## premiere sortie du premier moteur, broche 16
Moteur1B = 18      ## deuxieme sortie de premier moteur, broche 18
Moteur1E = 22      ## enable du premier moteur, broche 22

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

capteurGauche = 11 # capteur optique du côté gauche, broche 11
capteurDroite = 13 # capteur optique du côté droit, broche 13

## ces 6 broches du Raspberry Pi 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)

# ces 2 broches sont des entrées;
GPIO.setup(capteurGauche,GPIO.IN)  
GPIO.setup(capteurDroite,GPIO.IN)  

# Initialisation des capteurs (on suppose qu'ils sont de part et d'autre de la ligne)
initialGauche = GPIO.input(capteurGauche)
initialDroite = GPIO.input(capteurDroite)
     
while True:
    
    etatGauche = GPIO.input(capteurGauche)
    etatDroite = GPIO.input(capteurDroite)

    # s'il faut avancer en ligne droite
    if etatGauche == initialGauche and etatDroite == initialDroite: 
        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)

    # s'il faut tourner à gauche
    if etatGauche != initialGauche and etatDroite == initialDroite: 
        GPIO.output(Moteur1A,GPIO.HIGH)
        GPIO.output(Moteur1B,GPIO.LOW)
        GPIO.output(Moteur1E,GPIO.HIGH)
        GPIO.output(Moteur2E,GPIO.LOW)

    # s'il faut tourner à droite
    if etatGauche == initialGauche and etatDroite != initialDroite:
        GPIO.output(Moteur1E,GPIO.LOW)
        GPIO.output(Moteur2A,GPIO.HIGH)
        GPIO.output(Moteur2B,GPIO.LOW)
        GPIO.output(Moteur2E,GPIO.HIGH)
    
    # s'il faut arrêter
    if etatGauche != initialGauche and etatDroite != initialDroite: 
        GPIO.output(Moteur1E,GPIO.LOW)
        GPIO.output(Moteur2E,GPIO.LOW)

Conclusion

Tu obtiens donc un nouveau robot, bien entendu, je te conseille de le démonter pour récupérer les composants. Pour ma part, cet article est écrit pour la seconde fois, la première fois, toutes les images provenait de celui que j’avais réalisé mais suite à la perte de mon précédent site et tous les médias qui allait avec, je mets ceux du site originel.

Cet article a été vu en premier 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.