Robotique
Voici quelques pistes pour commencer : • Commande d’un chassis robot par l’accéléromètre d’un Smartphone via le Bluetooth • Utilisation de capteurs pour éviter des obstacles, aide au pilotage • Création d’un mode autonome : robot suiveur de ligne… • Datasheet pont en H |
![]() |
Le blog de Clément & Vincent :
Jeudi 6 Novembre :
Début du projet de la voiture
piloté avec un premier prototype d’une voiture de course. Inspection
des composants et début des premières modifications.
Jeudi 13 Novembre :
On a installé un arduino
sur la carcasse de la voiture, dans le but de la programmer
automatiquement, en lui donnant un parcours, grâce à un programme
arduino .
Jeudi 20 Novembre :
Travail uniquement sur arduino dans le but d’améliorer et
continuer notre programme.
Jeudi 27 Novembre :
Travail sur le programme encore, on règle la durée
d’activation des roues pour donner une trajectoire assez correcte à
la voiture, qui fonce dans tous les obstacles.
Jeudi 4 Décembre :
On a reçu le kit de notre
nouveau chariot, on a
commencé à le construire avec quelques petites difficultés dans le
montage, au niveau de l’ordre dans lequel on doit visser les
composants .
Jeudi 11 Décembre :
On a fixé notre arduino sur
notre nouvelle voiture, et on a relié les moteurs des 4 roues à
notre arduino via un pont en H, pour les contrôler indépendamment
les uns des autres.
Jeudi 18 Décembre :
On travaille encore sur
le nouveau programme de la voiture, car en faisant ralentir les
moteurs droits ou gauches comme bon nous semble, on peut désormais
faire tourner notre voiture sur elle-même à l’arrêt ou bien
lorsqu’elle est en mouvement.
Jeudi 8 Janvier : On a maintenant fixé
un émetteur-récepteur à ultrasons dans le but de détecter les
obstacles qui se trouvent sur la route de
notre voiture et on a donc travaillé sur le programme de la
voiture pour y insérer le programme pour les ultrasons, pour que la
voiture détecte les obstacles à une certaine distance, pour qu’elle
s’arrête, avant une collision.
Jeudi 15 Janvier :
Problème, malgré les
ultrasons, la voiture cogne toujours les obstacles, pourtant
lorsqu’on la maintient en l’air et que l’on passe la main devant la
capteur, la voiture ralentie, on décide donc d’augmenter la distance
pour laquelle la voiture doit s’arrêter, environ 60 cm. A ce
moment-là, la voiture s’arrête enfin avant les obstacles, et on la
fait tourner de 90 degrés sur la droite
lorsqu’elle rencontre un obstacle, elle peut donc rouler
quasi-infiniment en autonomie sans que nous ayons à intervenir.
Jeudi 22 Janvier :
travail uniquement sur
arduino, toujours pour modifier le programme, on a testé la durée
d’activation des moteurs pour optimiser la trajectoire de la
voiture.
Jeudi 29 Janvier : début d’exploration
sur App Inventor, fonctionnement, utilisation pour notre projet …
/* Transmission par liaison série de la commande d'un chassis de robot Matériel : pont en H http://www.instructables.com/id/Arduino-Modules-L298N-Dual-H-Bridge-Motor-Controll/ Capteur ultra son HC-SR04 https://itechnofrance.wordpress.com/2013/03/12/utilisation-du-module-ultrason-hc-sr04-avec-larduino/ emetteur bluetooth HC-06 http://tiptopboards.free.fr/arduino_forum/viewtopic.php?f=2&t=57 Programmation pour un Leonardo : Serial1 communique avec le smartphone, Serial ne sert qu'à debugger Sur un Arduino Uno on peut supprimer tous les Serial et remplacer les Serial1 par Serial. Transmission du smartphone : Marche;Droite;Gauche;\n Réponse de l'Arduino : 1T;Volt;Microsecondes;durée;k\n Marche : 0->Arrêt, 1->Avant, 2->Arrière, 6->impulsion avant Gauche, 7-> impulsion arrière Gauche 8->impulsion avant Droite, 9-> impulsion arrière Droite Droite : puissance du moteur à droite de 0 à 255 Gauche : puissance du moteur à gauche de 0 à 255 Volt : tension de la pile mesurée à l'aide d'un diviseur de tension de 2*10k sur Vin vers A0 (0 à 1023 pour 10 V) Microsecondes : durée mesurée par le capteur à ultrason HC-SR04 avec un timeout de 30ms durée : nombre de ms entre la réception de 2 instructions du smartphone (environ 200ms) k : nombre d'instructions reçues sans interruption supérieure à 600 ms http://appinventor.mit.edu/explore/ Créer un compte puis Projects\Import project (.aia)from my computeur... */ /* 1) Zone 1 : les déclarations */ // 1.c) Les variables globales // Pattes Arduino const int Da=3,Db=5,Ga=11,Gb=9; // Cablage du pont en H const int Trig1=8,Echo1=7; // Cablage du HC-SR04 // Variables const int impulsion=150; // Durée de l'impulsion en ms pour virage int Marche, Droite, Gauche; float cm; unsigned long t=0; // durée entre 2 instructions du smartphone unsigned int dt; // Mesure en Microseconds de la distance par le capteur US int i,j,k; float V; // Tension pile en Volt boolean Obstacle; // Vrai si obstacle à moins de 35 cm /* 2) Zone 2 : Initialisation (le setup) */ void setup() { pinMode(Da, OUTPUT); // Déclaration des pattes en sorties ou entrées ... ... // initialisation port série 0 et 1 Serial.println("Format de transmission retenu : Marche;Droite;Gauche; exemple : 1;150;150; +LF (code ascii 10)"); } /* 3) Zone 3 : le Programme Principal */ void loop() { /* Si un ordre est reçu */ { // Répondre en envoyant sur le port série les mesures effectuées Obstacle=!Ultrason(&dt,&cm); // Mesure de la disctance en cm et en Microsecondes (dt) V=10.0*analogRead(A0)/1024.0; // Tension des piles à la sortie du diviseur de tension par 2 ... // Formatage de la réponse // Analyse de l'ordre et action sur les moteurs ... // Si Marche =0 ... // Si Marche =1 ... // Si Marche =2 ... // Si Marche =6 ... // Si Marche =7 ... // Si Marche =8 ... // Si Marche =9 } /* Si aucun ordre n'est reçu au bout de 600ms */ { // Arrêt des moteurs } } /* 4) Zone 4 : les sous programmes (ou fonctions) */ boolean Ultrason(unsigned int *t,float *centi) { // Pour s'entraîner à utiliser un pointeur : http://forum.arduino.cc/index.php?topic=101780.0 // Cf TP Ultrason ... // Déclenchement du trigger *t = ... // *t pointeur temps, mesure le temps pour la réception Timeout = 30000 µs ... // Si timeout (*t=-1) *t=30000 *centi = ... // Calcul du pointeur *centi distance en cm if (*centi > 35) return true; // Si plus de 35 cm pas d'obstacle delayMicroseconds(30000-*t); // Quelque soit la distance la durée de cette fonction est de 30 ms return false; // Obstacle à moins de 35 cm }