Introduction: [ARDUINO DIY] - ROBOT Controlled by Smartphone ( by TechnoFabrique)

About: Tech, DIY and Arduino Realisation If you liked it , come check our sites Website :http://technofabrique.wixsite.com/techno-fabrik Google +:https://plus.google.com/109229784299061111421

FR

LE PROJET

Piloter un robot qui se déplace grâce à deux moteurs indépendants l'un de l'autre. Le smartphone commandera le robot avec une application créée sur app inventor 2. On commandera la puissance des moteurs, deux sens de rotations, et un module utra-son commandera l'arrêt des moteurs selon une certaine distance. On ajoute une option 'MODE AUTOMATIQUE' ou le robot se déplacera en évitant les murs.

Step 1: Materials

1 ARDUINO UNO

4 LEDs

4 résistance 1000 Ohms

1 module US

1 module Bluetooth (HC-06)

2 moteurs 12V

1 batterie 12V

1 batterie 6V (4xpile AA)

1 CI (sn745441one)

1 switch

Step 2: Setup

FR

ETAPE 1 : Moteurs & module H

Le module H nous permet de commander deux moteurs, dans deux sens de rotations, tout en modulant leur vitesse. Sur le circuit intégré, la broche 1 est la PWM, tandis que les broches 2 et 7 (violet) sont les broches 'avancer' et 'reculer'. Les broches 3 et 6 se lient au moteur et 4,5 à la masse. De l'autre côté, c'est la même chose ,de la broche 9 à 16.

ETAPE 2 : Module Bluetooth On connecte Tx <--> Rx entre le module et la carte, puis le Vcc au +5V et le GND à la masse. Cela va nous permettre de commander le robot avec le smartphone.

ETAPE 3 : Batterie pile On réalise une batterie grâce à 4 des piles AA reliées en série. ETAPE 5 : Module capteur US On branche de la même manière que le module Bluetooth le VCC et GND, puis on connecte le trigger et echo selon le code. Nous pourrons alors détecter les murs devant soit.

Step 3: The Code

/ 19/02/2017 - Programme C - Commandes basique de deux moteurs en commandes séparéments ( pour commander un robot) par smartphone, via bluetooth - App inventor 2 utilisé - Carte Arduino ( UNO ) , module Bluetooth HC-06// Ce programme a pour objectif de : // - Connecter les moteurs + module bluetooth au module arduino // - Envoyer un mot/phrase/nombre au smartphone // - Recevoir une ou plusieurs commande via smartphone : ici le déplacement d'un robot // Programme réalisé par Techno_Fabrik

//********************BIBLIOTHEQUES**************************** // // bibliothèque permettant d'utiliser les commandes pour servomoteurs facilement // //********************DECLARATIONS**************************** word w; // mot recu par le bluetooth int wpui; int wcmd; int wdist; const int motD_A = 4;// on  va relier les moteurs à un module H ( qui va permettre de commander deux moteurs, dans les deux sens, avec la puissance( vitesse; rapport cyclique) voulu)  const int motD_R=5;  const int puiD=3;  const int puiG =2;  const int motG_A=9;  const int motG_R=8;  int dre=6;  int gre=7; //MODULE US : 2 entrées pour echo/trig , 2 variables utilisées pour la conversion, lecture   int echo = 10;  int trig=11;  long lecture_echo;  long cm;  //*************************INITIALISATION ********************** void setup() {   Serial.begin(9600);// communiquer avec le module BT  pinMode(motD_A, OUTPUT); pinMode(motD_R, OUTPUT); pinMode(motG_A, OUTPUT); pinMode(motG_R, OUTPUT);  pinMode(puiD,OUTPUT); pinMode(puiG,OUTPUT); pinMode(trig,OUTPUT); pinMode(echo,INPUT); pinMode(dre,OUTPUT); pinMode(gre,OUTPUT); digitalWrite(trig,LOW); } // **************** FONCTIONS / PROCEDURES *********************************** void recevoir() // fonction permettant de recevoir l'information du smartphone {    if (Serial.available())    {     w = Serial.read();     if(w>=0 && w<9) wcmd=w;     if(w>=10 && w<111) wpui=w;     if (w>=200 && w<401) wdist=w-200;     delay(100);     Serial.flush();// attend que l'information est reçue avant de demander une nouvelle information   } } //*************************************** BOUCLE *************************** void loop()  {   int puissance ;   recevoir();// on recoit la variable w du smartphone   // on recoit l'information en allumant pendant 10 ms le trig   digitalWrite(trig,HIGH);   delayMicroseconds(10);   digitalWrite(trig,LOW);   lecture_echo = pulseIn(echo,HIGH);  //on lit avec lecture echo   cm=lecture_echo/58; // conversion pour avoir la valeur en centimètre   puissance=map(wpui,10,110,0,255); // mappage permettant de mettre la puissance de 0 a 100 (%) au lieu de 0 a 255 comme le veut le module   if ( cm >wdist)   {       switch ( wcmd) // On va coder sur App inventor, de maniere a envoyer un chiffre de 0 a 8, et qui seront les deplacements       {         case 0: digitalWrite(motD_A,LOW); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,LOW);digitalWrite(gre,LOW);Serial.println("STOP");delay(100);break;         case 1: digitalWrite(motD_A,HIGH); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,HIGH);digitalWrite(gre,LOW);Serial.println("DROITE AVANT");delay(100);break; // 1  = tourner à gauche ;         case 2: digitalWrite(motD_A,LOW); digitalWrite(motD_R,LOW);digitalWrite(motG_A,HIGH); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,HIGH);digitalWrite(gre,LOW);Serial.println("GAUCHE AVANT");delay(100);break;         case 3: digitalWrite(motD_A,HIGH); digitalWrite(motD_R,LOW);digitalWrite(motG_A,HIGH); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,HIGH);digitalWrite(gre,LOW);Serial.println("EN AVANT ");delay(100);break;         case 4: digitalWrite(motD_A,LOW); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,HIGH);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,LOW);digitalWrite(gre,HIGH);Serial.println("GAUCHE ARRIERE");delay(100);break;         case 5: digitalWrite(motD_A,LOW); digitalWrite(motD_R,HIGH);digitalWrite(motG_A,LOW); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,LOW);digitalWrite(gre,HIGH);Serial.println("DROITE ARRIERE");delay(100);break;         case 6: digitalWrite(motD_A,LOW); digitalWrite(motD_R,HIGH);digitalWrite(motG_A,LOW); digitalWrite(motG_R,HIGH);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,LOW);digitalWrite(gre,HIGH);Serial.println("EN ARRIERE");delay(100);break;         case 7: digitalWrite(motD_A,HIGH); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,HIGH);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,HIGH);digitalWrite(gre,HIGH);Serial.println("DEMI TOUR DROITE");delay(100);break;         case 8: digitalWrite(motD_A,LOW); digitalWrite(motD_R,HIGH);digitalWrite(motG_A,HIGH); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,HIGH);digitalWrite(gre,HIGH);Serial.println("DEMI TOUR GAUCHE");delay(100);break;         default:break;       }   }   else// dans le cas ou l'on est face à un mur   {    Serial.println("MUR, vous devez reculer ");   digitalWrite(motD_A,LOW); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);delay(50);   switch(wcmd)   {     case 0: digitalWrite(motD_A,LOW); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);Serial.println("STOP");delay(100);break;         case 1: Serial.println("impossible");delay(100);break;         case 2: Serial.println("impossible");delay(100);break;         case 3: Serial.println("impossible");delay(100);break;         case 4: digitalWrite(motD_A,LOW); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,HIGH);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,LOW);digitalWrite(gre,HIGH);Serial.println("GAUCHE ARRIERE");delay(100);break;         case 5: digitalWrite(motD_A,LOW); digitalWrite(motD_R,HIGH);digitalWrite(motG_A,LOW); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,LOW);digitalWrite(gre,HIGH);Serial.println("DROITE ARRIERE");delay(100);break;         case 6: digitalWrite(motD_A,LOW); digitalWrite(motD_R,HIGH);digitalWrite(motG_A,LOW); digitalWrite(motG_R,HIGH);analogWrite(puiD,puissance);analogWrite(puiG,puissance);digitalWrite(dre,LOW);digitalWrite(gre,HIGH);Serial.println("EN ARRIERE");delay(100);break;         case 7: digitalWrite(motD_A,HIGH); digitalWrite(motD_R,LOW);digitalWrite(motG_A,LOW); digitalWrite(motG_R,HIGH);analogWrite(puiD,puissance);analogWrite(puiG,puissance);Serial.println("DEMI TOUR DROITE");digitalWrite(dre,HIGH);digitalWrite(gre,HIGH);delay(100);break;         case 8: digitalWrite(motD_A,LOW); digitalWrite(motD_R,HIGH);digitalWrite(motG_A,HIGH); digitalWrite(motG_R,LOW);analogWrite(puiD,puissance);analogWrite(puiG,puissance);Serial.println("DEMI TOUR GAUCHE");digitalWrite(dre,HIGH);digitalWrite(gre,HIGH);delay(100);break;         default : break;   }   }   }