La géolocalisation chromatique
Article mis en ligne le 4 novembre 2016
dernière modification le 17 février 2024

par Llorenç

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 ( ;))

Nomenclature du robot

 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

Assemblage du robot

Cliquez ci-dessus pour suivre en détails le montage du robot.
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.

Piste infinie
Piste infinie

Préparer la 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.
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


Plan du site Contact Mentions légales Espace privé RSS

2012-2024 © Collectif Stratégies Numériques - Tous droits réservés
Haut de page
Réalisé sous SPIP
Habillage ESCAL 5.1.2