Voiture programmable / autonome

De Wikidebrouillard.

Article incomplet en cours de rédaction

Sommaire

Présentation de l'expérience

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 ?

Matériel



  • Une voiture radiocommandée :

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.

  • Une batterie rechargeable pour la voiture :

Généralement fournie avec, la mienne est une NiCd 6V 2200mAh (6 volts, 2200 milli-ampères/heure.

  • Pile 9 Volts et adaptateur jack pour arduino.
  • Arduino (ou équivalent) + câble USB + Shield moteurs (J'utilise un adafruit motorshield, mais un shield arduino ou un clone font aussi bien l'affaire).
  • Pince coupante / Pince à dénuder / Tournevis / Scotch.
  • Ordinateur avec IDE Arduino.
  • Câble electrique (fin) et petits objets conducteurs plats (rondelles de bricolage par exemple)
  • Élastiques.

OPTIONNEL :

  • Dremel ou petit outil de découpe.
  • Capteur de distance (j'utilise un HC-SR04).
  • Fer à souder.

Préparation

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.


Installer l'arduino

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.

L'expérience

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 :

  1. include <Wire.h>
  2. include <Adafruit_MotorShield.h>
  3. include "utility/Adafruit_PWMServoDriver.h"

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.

La voiture est prête

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.

Allons plus loin dans l'expérience

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.

Allons ENCORE plus loin dans l'expérience

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 :

  1. include <Wire.h>
  2. include <Adafruit_MotorShield.h>
  3. include "utility/Adafruit_MS_PWMServoDriver.h"
  4. define trigPin 13
  5. define echoPin 12
  6. define vert 11
  7. define rouge 9

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

}

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AR
EX

Voiture programmable / autonome

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique