Il est temps maintenant de mettre en application les découvertes expérimentées lors de l’article précédent à travers le suivi de ligne chromatique.
Les étapes du jour
Pour réaliser cet atelier nous allons :
– construire un tout petit robot/automate
– lui appliquer une logique de suivi de ligne
– le tester et observer son comportement sur une piste colorée en forme de huit couché
Le robot-suiveur
Pour notre mobile suiveur de ligne il nous faut quelque-chose de facilement réalisable et à petit prix.
<media17|icone|right>La première idée qui m’est venue fut de partir sur une base de souris-robot et l’adapter en suivant un chemin similaire au ’robot mousey’.
Mais ça demande beaucoup de manipulations pour ce qui ici ne représente qu’un moyen d’arriver au but. Je me suis donc tourné vers une réalisation -sans soudures-, certes un poil plus cher, mais dont tous les composants sont réutilisable. De plus cela permet aux non initiés de se lancer dans l’aventure sans craintes de se brûler les doigts ( ;))
– une base avec deux moteurs
– une platine (fait maison) pour fixer le capteur de couleurs
– un capteur de couleurs TCS3200
– quelques câbles souples de genre Mâle/Mâle, Mâle/Femelle, Femelle/Femelle
– six piles AA et leur boitier avec connecteur 2,1mm
– une carte arduino DFRobot Leonardo
– une carte de borniers à vis (pour éviter les soudures)
– une platine de commande de moteurs compatible arduino
Rien de très compliqué ici.
– On commence par faire une petite découpe dans une plaque de polycristal ou d’époxy en suivant le patron ci contre. <media23|insert|center> Cela va nous permettre de fixer la platine du capteur de couleur à l’aide de vis de 2mm et des écrous pour régler la hauteur. Personnellement j’ai taillé au cuter dans une plaque transparente, limé puis percé sans trop de soucis.
– Ensuite il faut fixer le boitier de piles de manière à placer le centre de gravité sur les roues et laisser filer le cordon d’alimentation vers l’arrière.
– On fixe dessus la carte Leonardo (connecteur jack vers l’arrière) et on charge le programme. : Ceinture et bretelles : Toutes les entrées sorties seront bien configurées à la prochaine mise sous tension. On débranche l’alimentation et on poursuit le montage.
– Il faut enficher la carte de borniers à vis puis la platine de commande des moteurs. Relier ensuite chacun des moteurs aux borniers M1 et M2. <media22|vignette>
Avant de poursuivre, faisons quelques vérifications.
Les moteurs sont prévus pour fonctionner sous 6V, ici nous voulons utiliser l’alimentation de la platine aussi il faut s’assurer que ce sera possible. On branche tour à tour chacun des moteurs en direct sur une alimentation externe régulée et regardons ce qu’ils consomment : 140mA sous 4.8V
Comme la platine moteur peut supporter une charge allant jusqu’à 600mA avec des pointes jusqu’à 1,2A par canal, c’est tout bon.
Étape suivante, on charge le code ci-dessous sur l’Arduino pour tester le sens de branchement et mesurer la consommation totale de notre montage.
<media20|icone|left> Pour la carte ’Leonardo’, il faut utiliser cette version modifiée de la bibliothèque AFMotor.
#include "AFMotor.h" // librairie de commande des moteurs
AF_DCMotor motorDextre(1); // moteur M1, à droite
AF_DCMotor motorSenestre(2); // moteur M2, à gauche
void setup()
{
Serial.begin(9600) ; // la console / le port série externe
// prépare les moteurs
motorDextre.setSpeed(200);
motorDextre.run(RELEASE);
motorSenestre.setSpeed(200);
motorSenestre.run(RELEASE);
delay(100);
while (!Serial) {;} // wait for serial port to connect.
Serial.println(" ");
Serial.println(" - - - - - \n");
}
void loop() // run over and over
{
uint8_t i;
Serial.print("Avant\n");
motorDextre.run(FORWARD);
motorSenestre.run(FORWARD);
for (i=0; i<255; i++) {
motorDextre.setSpeed(i);
motorSenestre.setSpeed(i);
Serial.println(i);
delay(10);
}
for (i=255; i!=0; i--) {
motorDextre.setSpeed(i);
motorSenestre.setSpeed(i);
Serial.println(i);
delay(10);
}
Serial.print("Arrière\n");
motorDextre.run(BACKWARD);
motorSenestre.run(BACKWARD);
for (i=0; i<255; i++) {
motorDextre.setSpeed(i);
motorSenestre.setSpeed(i);
Serial.println(i);
delay(10);
}
for (i=255; i!=0; i--) {
motorDextre.setSpeed(i);
motorSenestre.setSpeed(i);
Serial.println(i);
delay(10);
}
Serial.print("Roues libres\n");
motorDextre.run(RELEASE);
motorSenestre.run(RELEASE);
delay(1000);
}
On va de fait alimenter la platine Arduino avec une source externe, du 9V, 6 x 1.5V du pack batterie ;-) .
Résultats : 338mA consommés sous une tension de 9,4V
– Reste à connecter le capteur de couleurs suivant le schéma de montage ci dessous : <media21|vignette>
Maintenant, notre robot est prêt !
+ + + +
La piste de l’infini (piste en huit)
Pour tester notre suiveur de ligne chromatique, il nous faut une piste.
Un savant dégradé entre bleu et vert qu’il vous faudra reproduire en utilisant quatre feuilles A4 découpées puis collées sur un support ferme. Pour la colle, on peut utiliser de la repositionnable. Pour le support rigide, un carton épais, pour peu qu’il soit bien plat, fera l’affaire.
La logique de suivi
Faisons un 1er essai empirique (conditions de lumière naturelle)
en utilisant directement la valeur retournée par les canaux R, V, B et L.
– Si L> 2/3 de LMax => le véhicule n’est plus sur la route,
arrêt des roues
– Si V> 2/3 de VMax => Vert détecté.
diminuer la vitesse du moteur bleu,
augmenter la vitesse du moteur vert
– Si B> 2/3 de BMax => Bleu détecté.
diminuer la vitesse du moteur vert,
augmenter la vitesse du moteur bleu
– Si R> 1/3 de RMax => Rouge détecté,
même puissance sur les deux moteurs
– Si Non => Certainement pas loin du centre de la piste
même puissance sur les deux moteurs