Sommaire |
Dans cette manipulation, le public va devoir programmer une voiture hackée afin de lui faire effectuer des mouvements basiques (rouler tout droit, reculer, faire un cercle, un 8 etc..). Une fois programmée la voiture fait le trajet seule, sans intervention d'un être humain. Mais que se passe t-il donc ?
Les moteurs doivent fonctionner (en général, si vous tournez les roues et qu'elles font un petit bruit, les moteurs sont en état), pas de problèmes si la télécommande ne fonctionne pas.
Généralement fournie avec, la mienne est une NiCd 6V 2200mAh (6 volts, 2200 milli-ampères/heure.
OPTIONNEL :
Dans un premier temps nous allons devoir hacker la voiture radiocommandée. Ce n'est pas difficile, et réalisable sans problème avec des enfants.
Équipez-vous d'un tournevis et désolidarisez la carrosserie du châssis de la voiture. Généralement l'ensemble tiens en place grâce à quelques vis. Continuer à enlever les éléments de la voiture jusqu'à ce que le circuit électronique soit à l'air libre.
Le circuit électronique est généralement situé au centre de la voiture. Il est relié aux moteurs avant et arrière par 4 fils. Repérez ces fils et coupez les au niveau du circuit électronique. Ensuite, enlevez la totalité du circuit électronique de la voiture.
A cette étape, vous devriez vous retrouver avec uniquement le châssis, les deux moteurs (avant et arrière) et leurs fils. Dénudez ces fils.
Montez le shield moteur sur votre carte. Posez votre Arduino en lieu et place de l'ancien circuit électronique.
Branchez les moteurs avant et arrière de votre voiture sur votre carte : les shields moteurs sont munis de petits borniers à vis généralement annotés "M1", "M2" etc. Utilisez un tournevis.
Dénudez un câble aux deux extrémités, enroulez une des extrémités dénudées autour d'une rondelle de bricolage ou tout autre conducteur métallique. Répétez cette opération une deuxième fois.
Positionnez les rondelles au niveau des contacts métalliques de la batterie, bloquez les en position avec du scotch.
Enfin, positionnez cet assemblage à un endroit qui ne genera pas la voiture dans ses déplacements, par exemple, en dessous de la voiture.
Trouvez un endroit pour coller une pile 9 volts afin d'alimenter notre Arduino (la carte et le shield ont chacun leur source d'alimentation). Connectez un des câbles de la batterie à votre shield moteur
Votre voiture est prête.
Lorsque vous programmez la voiture, vérifiez que le shield moteur n'est pas alimenté, sans quoi la voiture risque de démarrer une fois branchée à votre ordinateur ^^
Branchez l'Arduino à votre ordinateur. Ouvrez l'IDE Arduino. Téléchargez les librairies correspondant à votre shield moteur ("Adafruit_MotorShield.h" pour le shield Adafruit).
Grâce à ces librairies nous pouvons contrôler les moteurs indépendamment et facilement. Dans la suite de ce paragraphe, je vais détailler un programme simple qui fait faire un rond à la voiture :
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
On ajoute les différentes librairies à notre fichier pour pouvoir utiliser des commandes propres au shield moteur, puis on déclare le shield moteur.
Adafruit_DCMotor *myMotor = AFMS.getMotor(2);
Adafruit_DCMotor *turn = AFMS.getMotor(1);
On créé deux objets "myMotor" et "turn", "myMotor" est notre moteur principal (qui fait avancer la voiture) et "turn" est notre moteur secondaire (il permet à la voiture de tourner). Dans le code, les chiffres 1 et 2 correspondent aux branchements que nous avons réalisé sur le shield moteur.
void setup() {
AFMS.begin();
myMotor->setSpeed(190);
turn->setSpeed(130);
}
Dans la fonction setup, cette commande propre au shield moteur adafruit sers à l'initialiser. Tous les shields moteur ont une commande similaire. Les lignes setSpeed servent à définir la vitesse de rotation de nos moteurs.
void loop() {
myMotor->run(FORWARD);
turn->run(FORWARD);
}
On ordonne au moteur myMotor et au moteur turn de démarrer. Ils vont tourner à la vitesse que nous avons spécifié dans la fonction setup. On peux changer le sens d'un moteur en remplaçant le code FORWARD par BACKWARD, ou en inversant les branchements d'un moteur sur le shield moteur.
Une fois toutes ces étapes accomplies, vous pouvez contrôler la voiture en programmant votre Arduino. Le contrôle de la voiture se fait grâce à un petit répertoire de commandes :
myMotor->run(FORWARD);
OU myMotor->run(FORWARD);
fais tourner un moteur dans un sens ou dans l'autre.
myMotor->run(RELEASE);
Permet d’arrêter un moteur. Vous pouvez également utiliser la commande "delay()" pour spécifier pendant combien de temps la voiture va effectuer une action. Par exemple, voilà comment faire faire un zigzag à la voiture.
void loop() {
myMotor->run(FORWARD);
turn->run(FOWARD);
delay(600);
turn->run(BACKWARD);
delay(600);
}
Dès le début du programme la voiture démarre et va vers l'avant. Elle tourne dans un sens pendant 600 millisecondes, puis dans l'autre pendant la même durée. Le mouvement qui en résulte est un zig-zag, ou un serpent.
Proposez à votre public de programmer la voiture. Proposez leurs des formes (un 8, un cercle..), proposez leur de faire faire le tour de la cour à la voiture, de la faire traverser le couloir etc. Tous les trajets sont réalisables, la principale difficulté étant d'estimer le temps pendant lequel les moteurs doivent tourner en fonction de la distance à parcourir et de la vitesse de ces moteurs.
Il est également possible de rajouter un capteur de distance pour que la voiture puisse voir les obstacles en face d'elle et les éviter. Plus d'informations très bientôt sur cette page du wiki.
Une fois qu'on a réalisé la voiture programmable, on peut l'améliorer de diverses façons en rajoutant des capteurs, en modifiant les moteurs etc..
Voici par exemple la même voiture, équipée d'un capteur de distance (HC-SR04) et d'une LED RGB. Elle est capable de détecter les obstacles, et de les éviter en faisant une petite manoeuvre.
Et voilà le code :
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_DCMotor *moteur = AFMS.getMotor(3); Adafruit_DCMotor *tourne = AFMS.getMotor(1); void setup() {
Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(vert, OUTPUT); pinMode(rouge, OUTPUT); AFMS.begin(); moteur->setSpeed(90); tourne->setSpeed(180);
} void loop() {
digitalWrite(rouge,HIGH); digitalWrite(vert,HIGH); long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; if (distance < 50) { digitalWrite(rouge,LOW); manoeuvre(); } else { clignote(vert); digitalWrite(rouge,HIGH); moteur->run(FORWARD); tourne->run(RELEASE); } delay(50);
} void manoeuvre() {
moteur->run(BACKWARD); tourne->run(BACKWARD); delay(1050); tourne->run(RELEASE);
} void clignote(int led) {
digitalWrite(led,LOW); delay(80); digitalWrite(led,HIGH); delay(80);
}
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique