Vous êtes sur la page 1sur 16

Conception et Réalisation d’un Robot Suiveur De Ligne

Suiveur de ligne
Un robot suiveur de ligne est un robot qui a pour but de suivre une ligne (comme son nom
l’indique), ce type de robot est utilisé dans les industries et sur les véhicules sans chauffeur qui
doivent suivre un chemin bien défini.

Comment marche un suiveur de ligne ?


Le robot suit une ligne noire sur un arrière-plan blanc tracé au sol qui représente le chemin à
suivre, et pour faire cela le robot a besoin de deux capteurs infrarouges qui distingues la ligne
noir de l’arrière-plan blanc, Tant que les deux capteurs ne détectent pas la ligne, le robot avance
(situation 0). Lorsqu’un des deux capteurs détecte la ligne, le robot doit tourner dans la
direction de ce dernier pour se mettre au milieu de la ligne (situation 1 et 2).

Matériel pour fabriquer un robot suiveur de ligne Arduino


Le kit est composé des éléments suivants :
Composants Quantité Visuel
Un châssis + roue à bille 1

Arduino Uno + càble 1


Contrôleur moteur 1

Module Infrarouge 2

Support de piles (6x AA) 1

Moteur DC 2

4 fils (mâle à femelle) pour le 1


capteur

Kit formateur (outillage)


Pour le montage du châssis et si vous souhaitez fixer autrement la carte Arduino ou le
contrôleur vous allez avoir besoin d’outils.
• Un petit tournevis cruciforme ou plat (pour des vis de 3 mm)
• Une pince plate (optionnel)
• Scotch double face pour fixer la carte Arduino ou le contrôleur des moteurs (optionnel)
• Ciseaux ou cutter pour couper proprement le scotch double fac
Maintenant que vous avez votre équipement, passons à la suite.
Contenu du kit

Composants de robot

Vérifiez qu'aucun élément n'est manquant. Dans ce kit, nous avons ajouté des pièces
supplémentaires, notamment 2 fils. La carte Arduino sera installée en dernier.
Montage du châssis

Châssis

Le Magiciens châssis est une plateforme robotique facile à assembler soi-même. Il fonctionne
grâce à deux moto-réducteurs à courant continu. Il propose un support 4 piles AA pour
l’alimentation mais il est conseillé d'utiliser un support 6 piles.
Une fois le châssis monté, on peut l’équiper de capteurs ou d’actionneurs pour en faire un
véritable robot intelligent et autonome.

NOTE
Les 2 roues à disque permettent d'y connecter des encodeurs. Montage facultatif.

Schéma synoptique
Voici le schéma complet du robot

Schéma synoptique de robot

Une fois le câblage terminé, vous pouvez passer à l'installation de l'environnement de


développement de la carte Arduino.
Déplacement du robot

Le robot peut
• Avancer
• Reculer
• Tourner à droite
• Tourner à gauche
• Tourner sur place
Le tout plus ou moins rapidement, en changeant la vitesse des moteurs dans le code
La mécanique
La partie mécanique est une des parties qui nous a pris le moins de temps puisque le châssis
ainsi que la mécanique (moteur, roue, batterie),nous ont été fournis par les organisateurs du
challenge.
Le châssis
Le châssis est en plastique de couleur blanche, les roues sont également en plastique et
positionnées au centre du robot afin d'équilibrer celui-ci, on nous a fourni des pions en
plastiques positionnés à l'avant ainsi qu'à l'arrière.
Le haut du robot
C'est sur ce support que viendra la carte mère et l'interrupteur électrique général qui ont été
ajouté plus tard. Pour pouvoir commander l'alimentation du robot on y ajoutera également
l'alimentation (batterie).
Le dessous du robot
Cette partie est celle qui supportera la plupart du poids du robot, on y fixera le bloc moteur,
ainsi que la carte capteurs.
Pour fixer la carte capteurs nous avons utilisé des petites équerres que nous avons dû recouper
pour être le plus près possible du sol.
Le bloc moteur
Un moteur électrique à courant continu est constitué
• D’un stator qui est à l’origine de la circulation d’un flux magnétique longitudinal fixe créer
soit par des enroulements statoriques (bobinage) soit par des aimants permanents.
• D’un rotor bobiné relié à un collecteur rotatif inversant la polarité de chaque enroulement
rotorique au moins une fois par tour de façon à faire circuler un flux magnétique transversal
en quadrature avec le flux statorique.
Fonctionnement d’un moteur DC

Moteur DC

Les moteurs fonctionnent en 5 volts au maximum de leur puissance, après quelques tests nous
avons remarqué que les moteurs avaient besoin de 1 A en charge pour fonctionner. Donc pour
avoir une vitesse max nous appliquons une tension de 5V et pour arrêter les moteurs une tension
de 0V.
Principales caractéristiques
Plage de tension pour le fonctionnement 4.5~13V
Maximum. Son Charge (5V) 140 mA
Maximum. Son Charge (12V) 250 mA
Vitesse Son Charge (5V) 50 tr/min
Vitesse à vide (12V) 90 tr/min
Max Torque 0,8 Kgf.cm (0,078 N.m)
Courant de décrochage 2,8 A
Directions possibles en fonctions des tensions moteurs

Nous aurons c'est 3 cas possibles aller tout droit tourner à gauche ou tourner à droite Nous
ferons en sorte que le robot aille le plus vite possible en ligne droite, il faudra donc alimenter
les 2 moteurs au maximum (5 Volts), et lorsque l'on tournera, l'un des 2 moteurs restera
constamment au maximum et nous réglerons la vitesse de l'autre moteur afin de faire varier la
vitesse en fonction du degré du virage.
L'électronique
Probablement la partie où nous avons passé le plus de temps, c'est également celle où les
recherches ont été les plus longues ainsi que les tests préalables, et c'est aussi malheureusement
la partie qui nous a causé le plus de soucis et d'erreurs
Présentation des composants utilisés
Pour la réalisation du projet, de nombreux composants ont été indispensables, tel que les 6 piles
AA pour l'alimentation nécessaire pour les moteurs. Le Contrôleur moteur nous permettons de
gérer les moteurs, bien sur l’Arduino UNO qui gère les diverses informations du montage, les
capteurs qui détectent au sol la direction du parcours, et enfin diverses résistances, capacités,
inductances et autres diodes utiles au bon fonctionnement du montage.
ARDUINO UNO
L'Arduino UNO est le cœur de notre carte ainsi que ce qui permet au projet d'être viable et
fonctionnel en effet il sert à recevoir, traiter et renvoyer les informations nécessaires au bon
fonctionnement du robot.
Arduino-UNO

Vue d'ensemble
La carte Arduino Uno est une carte à microcontrôleur pour pouvoir l'utiliser, il suffit de la
connecter à un ordinateur à l'aide d'un câble USB, l'alimentation étant fournie par le port USB
(on peut aussi l'alimenter avec un adaptateur secteur ou un jeu de piles via le connecteur jack).
Le microcontrôleur est donc un véritable petit ordinateur :
Microprocesseur cadencé à 16MHZ
Mémoire flash ⇔ disque dur
Mémoire RAM ⇔ mémoire vive (RAM)
Mémoire RAM ⇔ mémoire vive (RAM)
Broches Entrée/Sortie ⇔ ports de communication
Synthèse des caractéristiques :
Microcontrôleur ATmega328
Tension de fonctionnement 5V
Tension d'alimentation (recommandée) 7-12V
Consommation maxi admise sur port USB 500 mA avant déclenchement d’un fusible
(5V)
Broches E/S numériques 14 (dont 6 disposent d'une sortie PWM pour
commander les moteurs)
Broches d'entrées analogiques 6 (utilisables aussi en broches E/S
numériques)
Intensité maxi disponible par broche E/S 40 mA par sortie, mais ATTENTION :
(5V) 200mA cumulé pour l'ensemble des broches
E/S)
Mémoire Programme Flash 32 Ko
Mémoire RAM (mémoire volatile) 2 Ko
Mémoire EEPROM (mémoire non volatile) 1 Ko
Vitesse d'horloge 1. 16 MHz
Les broches d'alimentation à utiliser sont les suivantes :
• 5V. La tension régulée utilisée pour faire fonctionner le microcontrôleur et les autres
composants de la carte. Le 5V régulé fourni par cette broche peut donc provenir soit de la
tension d'alimentation VIN via le régulateur de la carte, ou bien de la connexion USB (qui
fournit du 5V régulé) ou de tout autre source d'alimentation régulée.
• GND. Broche de masse ou 0V.
Broches numériques en entrée OU sortie :
Chacune des 14 broches numériques de la carte UNO (numérotées des 0 à 13) peut être utilisée
soit comme une entrée numérique, soit comme une sortie numérique Il suffit de les déclarer en
début de programme. Certaines interfaces les ont déjà programmées (S4A) d'autres vous
demande de le faire (S2A, ardu block) Ces broches fonctionnent en 5V. Chaque broche peut
fournir ou recevoir un maximum de 40mA d'intensité. De plus, certaines broches ont des
fonctions spécialisées :
• Broche 13. Dans la carte est incluse une LED connectée à la broche 13. Lorsque la broche
est au niveau HAUT, la LED est allumée, lorsque la broche est au niveau BAS, la LED est
éteinte.
• Broches PWM. Elles pilotent les moteurs à courant continu en vitesse. On peut aussi les
utiliser pour piloter une diode en luminosité.
Broches analogiques en entrée :
La carte Uno dispose de 6 entrées analogiques (numérotées de A0 à A5), chacune pouvant
fournir une mesure d'une résolution de 10 bits (c'est à dire sur 1024 niveaux soit de 0 à 1023).
En termes de tension la sensibilité est donc de 5/1024 = 4,88 mV
Différence entre entrée numérique (digital en anglais) et analogique :
Une entrée numérique ne détecte que deux valeurs : 0 (0Volt) et 1 (5Volts) Une entrée
analogique peut détecter 1024 valeurs comprises entre 0 et 5 Volts par saut de 4 ,88 mV

UTILISATION DE LA CARTE
La carte Arduino se programme avec le langage Arduino créé à partir des langages C et C++.
On ne programme pas au collège sur l’IDE Arduino avec des lignes de code, mais nous le
ferons en EPI …
En mode découverte, on les fait fonctionner à partir du logiciel SCRATCH que vous connaissez
déjà : Principe : la carte Arduino est déjà programmée par le professeur. Une application
appelée S2A (Scratch to Arduino) utilise ce programme appelé « firewire » pour établir une
communication entre l’ordinateur et la carte via SCRATCH.
La carte devient une simple interface entre l’ordinateur, et les composants branchés sur la carte.
Ce système est agréable, car on teste « en direct » le programme sur la carte. Mais ce système
est limité, car il ne permet pas la programmation réelle de la carte : on faut toujours rester
connecté à l'ordinateur.
Autres possibilités : on utilise un logiciel de programmation visuelle (de type scratch) qui va
traduire le programme réalisé, en lignes de code Arduino. Il ne reste plus qu’à téléverser les
lignes de code dans la carte via l’IDE Arduino. Avantage : plus besoin d’ordinateur, la carte
est autonome et devient ‘‘l’ordinateur’’ qui pilote. Inconvénient : si le programme ne
fonctionne pas, il faut le reprendre à l’ordinateur, puis à nouveau traduire et téléverser, c’est
plus long …
Capteur Infrarouge
Un capteur infrarouge se présente comme une équipement électronique capable de réagir au
rayonnement infrarouge renvoyé par les objets qui lui font face. Ces rayons se situent en dehors
du spectre de la lumière visible : ils sont donc invisibles à l’œil nu. Le capteur ne fonctionne
pas seul : il est associé à une optique qui se charge de canaliser les rayons. En simplifiant, il
ressemble à un capteur d’appareil photo, à ceci près qu’il ne capture pas les images visibles,
mais le rayonnement infrarouge. Souvent, le capteur infrarouge est associé à un dispositif
électronique chargé de déclencher un signal électrique en cas de variation subite du phénomène
mesuré. C’est l’exemple typique du détecteur de mouvements infrarouge. Il peut aussi être
associé à une caméra de surveillance, pour apporter à cette dernière une forme de vision
nocturne.

Principe de fonctionnement du capteur

Capteur infrarouge
Fonctionnement d'un capteur infrarouge

Le capteur infrarouge est constitué d'un récepteur qui détecte l'intensité lumineuse dans la
gamme des lumières infrarouge et d'un émetteur de lumière infrarouge.

Le capteur infrarouge peut être utilisé comme capteur de contact. On fait une mesure avec la
led infrarouge éteinte et une avec la led infrarouge allumée. S'il n'y a aucun obstacle proche, la
valeur lue est la même. Sinon, l'ostacle aura réfléchi la lumière infrarouge et la deuxième
mesure donnera un résultat plus élevé.

Le capteur infrarouge peut être utilisé pour suivre une ligne noire sur fond blanc (ou l'inverse).
En effet, le noir réfléchit beaucoup moins la lumière infrarouge que le blanc.

Le capteur infrarouge peut aussi être utilisé en capteur de distance en mesurant l'angle avec
lequel le rayon réfléchi arrive sur le récepteur. En fonction de la distance entre l'émetteur et le
récepteur, on peut en déduire la distance de l'obstacle.

Contrôleur moteur
Brancher un moteur continu DC et le faire tourner dans un sens pendant 5 secondes, l'arrêter
pendant 2 secondes, puis le faire tourner dans l'autre sens pendant 5 secondes ; le tout à une
vitesse de 200 sur 255 ; grâce à un module L298N.
Le L298N permet de contrôler 2 moteurs continus ou 1 moteur pas à pas. Il peut faire tourner
les moteurs en vitesse continue ou en PWM.
De plus, il inclut des diodes pour protéger le circuit, des résistances de rappel et un dissipateur
de chaleur en cas de forte charge.
Le L298N est un double pont en H, c'est à dire qu'il permet de faire tourner les moteurs dans
un sens ou dans l'autre sans avoir à modifier les branchements, grâce à sa forme de H, d'où il
tient son nom et qui lui permet de faire passer le courant soit dans un sens ou dans l'autre.

Composants d'un moteur-contrôleur


Visualisation du montage sur Fritzing

Câblage de moteur-contrôleur

Si nous voulons que le moteur gauche tourne dans un sens, nous appliquons une impulsion
haute à IN1 et une impulsion basse à IN2. Pour inverser la direction, inversez les impulsions
sur IN1 et IN2. Il en va de même pour le bon moteur.
Si nous voulons que le moteur gauche tourne dans un sens, nous appliquons une impulsion
haute à IN1 et une impulsion basse à IN2. Pour inverser la direction, inversez les impulsions
sur IN1 et IN2. Il en va de même pour le bon moteur.
Le contrôle de la vitesse est également possible avec le pilote de moteur L298N. Tout ce dont
nous avons besoin est de fournir des signaux PWM (Pulse Width Modulation) aux broches
d'activation du moteur. La vitesse du moteur variera en fonction de la largeur des
impulsions. Plus les impulsions sont larges, plus le moteur tourne rapidement. Dans Arduino,
cela peut être fait en utilisant analogWrite (pinNumber, duration). Broches sur Arduino avec
support PWM '~'.

IN1 IN2 IN3 IN4 Direction


0 0 0 0 Arrêter
1 0 1 0 Avant
0 1 0 1 Inverse
1 0 0 1 Gauche
0 1 1 0 Droit
Arduino UNO Contrôleur moteur L298N
Pin 10 ENA
Pin 9 IN10
Pin 8 IN2
Pin 7 IN3
Pin 6 IN4
Pin 5 ENB

Les paramètres de configuration


La configuration de l'ATmega8535 est simple il faut uniquement rentrer le type d'Arduino
UNO, sa vitesse puis Code vision génère automatiquement le code de configuration de celui-
ci.

// définition des broches

#define capteurGauche A0
#define capteurDroite A1

#define brocheMoteur1a 3 // Premier moteur


#define brocheMoteur1b 4 // Premier moteur
#define brocheEnable1 9 // broche enable du L298N pour le premier moteur
#define brocheMoteur2a 5 // Deuxième moteur
#define brocheMoteur2b 6 // Deuxième moteur
#define brocheEnable2 10 // broche enable du L298N pour le deuxième moteur

const int sensibilite = 50; // écart admissible par rapport à la valeur initiale

int initialDroite; // état initial du capteur de droite


int initialGauche; // état initial du capteur de gauche

int vitesse = 600; // 0 à 1023 PWM qui contrôle la vitesse des moteurs

void setup() {

// réglage des sorties


pinMode(brocheMoteur1a, OUTPUT);
pinMode(brocheMoteur1b, OUTPUT);
pinMode(brocheEnable1, OUTPUT);
pinMode(brocheMoteur2a, OUTPUT);
pinMode(brocheMoteur2b, OUTPUT);
pinMode(brocheEnable2, OUTPUT);

// on demeure immobile pour l'instant


digitalWrite(brocheEnable1, 0);
digitalWrite(brocheEnable2, 0);

// réglage en marche avant


digitalWrite(brocheMoteur1a, HIGH);
digitalWrite(brocheMoteur1b, LOW);
digitalWrite(brocheMoteur2a, HIGH);
digitalWrite(brocheMoteur2b, LOW);

delay(2000); // on se donne le temps de placer le robot à son point de départ

// lecture des valeurs initiales (on suppose que les capteurs sont de part et d'autre de la ligne)
initialDroite = analogRead(capteurDroite);
initialGauche = analogRead(capteurGauche);

void loop() {
int valeurDroite, valeurGauche;

valeurDroite = analogRead(capteurDroite);
valeurGauche = analogRead(capteurGauche);

if ((abs(valeurDroite - initialDroite) < sensibilite) && (abs(valeurGauche - initialGauche)


< sensibilite)) {
// on continue tout droit
analogWrite(brocheEnable1, vitesse);
analogWrite(brocheEnable2, vitesse);
}
else if ((abs(valeurDroite - initialDroite) < sensibilite) && (abs(valeurGauche -
initialGauche) >= sensibilite)) {
// on tourne à gauche
digitalWrite(brocheEnable1, 0);
analogWrite(brocheEnable2, vitesse);
}

else if ((abs(valeurDroite - initialDroite) >= sensibilite) && (abs(valeurGauche -


initialGauche) < sensibilite)) {
// on tourne à droite
analogWrite(brocheEnable1, vitesse);
digitalWrite(brocheEnable2, 0);
}

else {
// on s'arrête
digitalWrite(brocheEnable1, 0);
digitalWrite(brocheEnable2, 0);
}

delay(100);

Code Arduino
SIMULATION ISIS

Montage du suiveur de ligne Arduino

Vous aimerez peut-être aussi