BTS Mesure BTS Mesure
DomotiqueGPSGPS et SportRobot

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 …

 Jeudi 5 Février :  Décorticage de App Inventor.

Le programme final et son application App Inventor V3.


/*
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
}