top of page

FĆ©vrier 2017 , par Techno_fabrik

DifficultƩ :

ā€‹

DurƩe :

Projet : Robot commandƩ par smartphone

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.

ā€‹

ā€‹

MATƉRIEL :

ā€‹

ā€‹

  1 module ARDUINO UNO 

  4 LEDs de couleurs

  4 rĆ©sistance 1000 Ohms 

  1 module US 

  1 module Bluetooth (HC-06)

  2 moteurs fort couple

  1 batterie 12V

  1 batterie 6V (4xpile AA)

  1 module pont en H (sn745441one)

  1 interrupteur

PRƉREQUIS :

ā€‹

Connaissance des risques Ć©lectriques. Montage rĆ©alisable par tous. Notion d'Ć©lectronique et bases en programmation.

ā€‹

ā€‹

RƉALISATION

ā€‹

ā€‹

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.

ā€‹

 

Programme (codƩ en C)

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

APPLICATION SMARTPHONE
VIDEO REALISATION
Robot smartphone
Lire la vidƩo
bottom of page