TPE - Voitures autonomes
Le capteur suiveur de ligne.
​
Les capteurs suiveurs de ligne que nous avons utilisé sont des modules basés sur le réflecteur optique TCRT5000 et un amplificateur.
Alimentation: 5 Vcc
Sortie:
- état bas: ligne noire
- état haut: ligne blanche
Dimensions: 43 x 14 x 11 mm
​
Nous utiliserons 3 capteurs qui seront situés à l'avant de notre voiture. Avec ces capteurs, notre voiture pourra suivre une ligne noir et sera autonome.
​
C'est en nous aidant de la revue "Micro portable Tests" que nous avons élaboré notre programme ainsi que le plan de câblage.
# Importation des librairies pour controle du port GPIO
import RPi.GPIO as GPIO
from time import sleep
# Declaration des emplacements
CapteurLigne = 15
# Acces au port GPIO avec la numerotation Broadcom
mode = GPIO.BCM #Lecture du capteur par "nom"
#mode = GPIO.BOARD #Lecture du capteur par emplacement
# Parametrage
def Parametrage():
GPIO.setmode(mode)
GPIO.setwarnings(False)
GPIO.setup(CapteurLigne, GPIO.IN, pull_up_down = GPIO.PUD_UP) #initialisation
# Boucle du programme pour lire le capteur suiveur de ligne
def Boucle():
while True:
sensor=GPIO.input(CapteurLigne)
if sensor==True:
print "noir"
print sensor
else:
print "blanc"
print sensor
sleep(1)
def Reinitialisation(): # reinitialiser le circuit GPIO
GPIO.output(CapteurLigne, GPIO.LOW)
GPIO.cleanup() # Relacher les ressources
# Le programme demarre ici
if __name__ == '__main__':
Parametrage()
try:
Boucle()
except KeyboardInterrupt: # Si on interrompt le programme, on passe d'abord par la fonction Reinitialisation
Reinitialisation()
​
sudo nano ky033.py
​
Ce programme fait lire le capteur suiveur de ligne et affiche "noir" si le capteur est sur une ligne et "blanc" si le capteur est à côté.
​
Nous avons ensuite créé un second programme avec nos 3 capteurs suiveurs de ligne.
​
sudo nano ky033_3capteurs.py
# Importation des librairies pour controle du port GPIO
import RPi.GPIO as GPIO
from time import sleep
# Declaration des emplacements
capteurG = 14
capteurD = 15
capteurC = 3
# Acces au port GPIO avec la numerotation Broadcom
mode = GPIO.BCM #Lecture des pin par "nom"
#mode = GPIO.BOARD #Lecture des pins par emplacement
# Parametrage
def Parametrage():
GPIO.setmode(mode)
GPIO.setwarnings(False)
GPIO.setup(capteurG, GPIO.IN, pull_up_down = GPIO.PUD_UP) #initialisation
GPIO.setup(capteurD, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(capteurC, GPIO.IN, pull_up_down = GPIO.PUD_UP)
# Boucle du programme pour lire les capteurs suiveurs de ligne
def Boucle():
while True:
capteurCentre=GPIO.input(capteurC)
capteurGauche=GPIO.input(capteurG)
capteurDroite=GPIO.input(capteurD)
print "---------------------------------------"
if (capteurGauche==GPIO.HIGH) and (capteurDroite==GPIO.HIGH) and (capteurCentre==GPIO.HIGH) :
print "blanc a gauche // blanc a droite // blanc au centre"
if (capteurGauche==GPIO.HIGH) and (capteurDroite==GPIO.LOW) and (capteurCentre==GPIO.HIGH) :
print "blanc a gauche // noir a droite // blanc au centre"
if (capteurGauche==GPIO.HIGH) and (capteurDroite==GPIO.LOW) and (capteurCentre==GPIO.LOW) :
print "blanc a gauche // noir a droite // noir au centre"
if (capteurGauche==GPIO.HIGH) and (capteurDroite==GPIO.HIGH) and (capteurCentre==GPIO.LOW) :
print "blanc a gauche // blanc a droite // noir au centre"
if (capteurGauche==GPIO.LOW) and (capteurDroite==GPIO.LOW) and (capteurCentre==GPIO.LOW) :
print "noir a gauche // noir a droite // noir au centre"
if (capteurGauche==GPIO.LOW) and (capteurDroite==GPIO.HIGH) and (capteurCentre==GPIO.LOW) :
print "noir a gauche // blanc a droite // noir au centre"
if (capteurGauche==GPIO.LOW) and (capteurDroite==GPIO.HIGH) and (capteurCentre==GPIO.HIGH) :
print "noir a gauche // blanc a droite // blanc au centre"
if (capteurGauche==GPIO.LOW) and (capteurDroite==GPIO.LOW) and (capteurCentre==GPIO.HIGH) :
print "noir a gauche // noir a droite // blanc au centre"
sleep(2)
def Reinitialisation(): # Reinitialiser le circuit GPIO
#GPIO.setup(capteurG, GPIO.LOW)
#GPIO.setup(capteurD, GPIO.LOW)
#GPIO.setup(capteurC, GPIO.LOW)
GPIO.cleanup() # Relacher les ressources
# Le programme demarre ici
if __name__ == '__main__':
Parametrage()
try:
Boucle()
except KeyboardInterrupt: # Si on interrompt le programme, on passe d'abord par la fonction Reinitialisation
Reinitialisation()
Les ports GPIO utilisés pour le branchement des capteurs suiveurs de lignes sont décris ci-dessous :
​
GND : masse du Raspberry
+5V ou VCC : 3,3 Volt du Raspberry
Signal ou OUT :
- Capteur Gauche : 14 du GPIO
- Capteur Droite : 15 du GPIO
- Capteur Centre : 3 du GPIO
​
​
​
​
Ce programme nous montrera quel capteur détecte la ligne. Ensuite, en fonction de la position des capteurs par rapport à la ligne, notre programme fera tourner un moteur (gauche ou droite) ou les deux.
​