Site icon La programmation sur le web

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 :

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 :

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 :

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.

Quitter la version mobile