Project tutorial
Remote-controlled robot with an Android App

Remote-controlled robot with an Android App © GPL3+

Robot project with ultrasonic sensors and an application android for control

  • 3,067 views
  • 5 comments
  • 9 respects

Components and supplies

Apps and online services

About this project

French version : (the english one is below)

Bonjour à tous,

Ce projet a été commencé fin juin 2016, il consiste à contrôler un robot avec 2 moteurs + une roue folle grâce à un smartphone avec le bluetooth. Ce robot évite aussi les obstacles qu'il rencontre en s'arrêtant. le code pourrait être modifié afin de le faire changer de direction lorsqu'il détecte un obstacle avec les capteurs à ultrasons.

Les différents composants utilisés sont dans le fichier .ino (le code), j'ai également mis en ligne sur Github:

  • le code arduino en .ino, contenant entre autre les principales instructions permettant le fonctionnement de ce robot.
  • Une capture d'écran .pnj du schéma de montage des différents composants sur la carte Arduino, et le fichier.fzz du schéma que vous pouvez ouvrir avec le logiciel fritzing.
  • Le fichier .aia qui correspond à l'application que j'ai créée sur AppInventor2, permettant de contrôler le robot avec n'importe quel smartphone sous Android équipé du bluetooth (tous à ma connaissance !!) Vous devez télécharger ce fichier, vous rendre sur AppInventor, ouvrir le fichier .aia, aller sur l'onglet "blocks" en haut à droite et changer l'adresse 98:D3:32:30:5C:96 en l'adresse de votre module bluetooth. Quand ceci est fait, vous allez sur l'onglet build et choisissez l'une des 2 options pour récupérer le fichier .apk que vous installerez sur votre téléphone. Ensuite, allumez votre bluetooth, et ouvrez l'application, si votre téléphone vibre, vous êtes connecté, sinon, essayez d'appairer votre module et votre smartphone. Les touches de contrôle sont les 4 flèches et le Stop est le bouton start (pas très logique, je l'avoue...).
  • 4 photos du projet fini .jpg : 2 photos de la carte avec tous les composants (+ un haut parleur et un lecteur de carte SD que j'essaierais sûrement d'intégrer au programme), et 2 photos avec la carrosserie faite en carton.

Vous n'avez donc pas besoin de brancher de haut parleur et de lecteur de carte SD pour le moment.

Tous les retours sont évidemment les bienvenus !!

Merci,

Théo

English version : (google translate, sorry)

Hello everyone,

This project was started at the end of June 2016, it consists of controlling a robot with 2 motors + a crazy wheel thanks to a smartphone with bluetooth. This robot also avoids the obstacles it encounters when stopping. The code could be modified to change direction when it detects an obstacle with the ultrasonic sensors.

The different components used are in the .ino file (the code), I also put online in Github:

  • The arduino code in .ino, containing among other things the main instructions allowing the operation of this robot.
  • A screenshot .pnj of the assembly diagram of the various components on the Arduino board, and the file.fzz of the schema that you can open with the fritzing software.
  • The .aia file that corresponds to the application I created on AppInventor2, allowing to control the robot with any Android smartphone equipped with bluetooth (all to my knowledge !!) You must download this file, go to AppInventor, open the .aia file, go to the "blocks" tab at the top right and change address 98: D3: 32: 30: 5C: 96 to the address of your bluetooth module. When this is done, you go to the build tab and choose one of two options to retrieve the apk file that you will install on your phone. Then turn on your bluetooth, and open the application, if your phone vibrates, you're connected, otherwise try pairing your module and your smartphone. The control keys are the 4 arrows and the stop is the start button (not very logical, I admit ...)
  • 4 photos of the finished project .jpg: 2 photos of the card with all the components (+ a speaker and an SD card reader that I would surely try to integrate into the program), and 2 pictures with the body made of cardboard .

So you do not need to plug in speaker and SD card reader yet.

All returns are obviously welcome !!

Thank you,

Theo

Code

Arduino codeC/C++
/*================================================================Robot v2.4================================================================
 * 
 * Ecrit par Théo Nogues et commencé le 25/06/2016
 *     
 *
 * Principaux composants du robot :
 *  -> Controle de 2 moteurs avec Adafruit Motor Shield 
 *  -> 2 capteur à ultrasons SR-04 qui detectent les potentiels obstacles et font s'arrêter le robot
 *  -> Controle avec module bluetooth hc-05 via une application android créée sur AppInventor2 
 *  
 * A venir : 
 *   -> ?? Controle à l'aide d'un joystick avec AppInventor2 ?? 
 *   -> Controle via capteur infrarouge et telecommande quelconque (TV,Radio...) 
 *  
 * Alimentation du robot :
 *   -> PowerBank 2000mAh 5V (Batterie d'appoint pour smartphone) pour alimenter l'arduino et les composants
 *   -> Batterie LiPo 7.4V 1000mAh pour alimenter le shield moteur et les moteurs (ATTENTION, enlever le jumper VIN de la shield car 2 alims séparées !!!)
 *  
 *  
 *  Liens utiles :
 *  
 *  Adafruit Motor Shield
 *  http://www.robotshop.com/eu/fr/kit-blindage-controleur-moteur-arduino-v2.html
 *  
 *  Capteur à ultrasons SR-04
 *  http://www.robotshop.com/eu/fr/module-sonar-hc-sr04.html
 *  
 *  Module Bluetooth HC-05 :
 *  http://www.cdiscount.com/maison/bricolage-outillage/xcsource-bluetooth-serial-6pin-transceiver-emetteu/f-1170456-xcs4894479245408.html
 *  
 *  PowerBank 5V :
 *  http://www.boulanger.com/ref/8000530?xtor=SEC-1296-GOO&xts=171153&origin=%7Badtype%7D&kwd=%7Bkeyword%7D&gclid=CjwKEAjw_LG8BRDb1JTxm8uP_UwSJADu_8pWjdmGIgpBdGtNaQZRz9bE3nREWq4l1iHQy8_JWnqAPhoCZW7w_wcB
 *  
 *  Batterie 7.4V :
 *  http://www.breizh-modelisme.com/PBSCProduct.asp?ItmID=20843610&AccID=99195&PGFLngID=0&gclid=CjwKEAjw_LG8BRDb1JTxm8uP_UwSJADu_8pWPSqlrkLCkGMJ73WhNgyyp5bDIpoLI6U0gpiGid4NIRoCv2fw_wcB
 *  
 *  Site AppInventor 2 :
 *  http://ai2.appinventor.mit.edu
*/ 
                    
#include <SoftwareSerial.h>                              // Bibliothèque pour changer la voie serie du bluetooth                                             
#include <Adafruit_MotorShield.h>                        //
#include <Wire.h>                                        // Bibliothèque et fichiers du shield moteur
#include "utility/Adafruit_MS_PWMServoDriver.h"          //
 

#define bluetoothRX       3   // Broche RX                   > MODULE BLUETOOTH
#define bluetoothTX       4   // Broche TX                   > MODULE BLUETOOTH

#define trigPin1          6   // Broche Trig 1               > CAPTEUR A ULTRASONS
#define echoPin1          7   // Broche Echo 1               > CAPTEUR A ULTRASONS
#define trigPin2          8   // Broche Trig 2               > CAPTEUR A ULTRASONS
#define echoPin2          9   // Broche Echo 2               > CAPTEUR A ULTRASONS


 
                     // Variables :
char bluetoothData;               // Données envoyées par le module Bluetooth
int distance1, distance2;         // Distance mesurée par le capteur 1 et 2 (en cm)
long duree1, duree2;              // Durée de l'ultrason du capteur 1 et 2 
int limite = 50;                  // Limite de distance des capteurs (en cm)
int vitesseMoteurs = 60;          // Vitesse des moteurs /255


SoftwareSerial bluetooth (bluetoothTX, bluetoothRX); //Change les pins de la voie série

Adafruit_MotorShield AFMS = Adafruit_MotorShield();   // Initialise la shield moteur
 
Adafruit_DCMotor *moteurGauche = AFMS.getMotor(1);    // Le moteur 1 est le moteur gauche
Adafruit_DCMotor *moteurDroit = AFMS.getMotor(2);     // Le moteur 2 est le moteur droit


void setup() 
{
  pinMode(echoPin1, INPUT);  // La broche Echo du capteur 1 est une entrée
  pinMode(echoPin2, INPUT);  // La broche Echo du capteur 2 est une entrée
  pinMode(trigPin1, OUTPUT); // La broche Trig du capteur 1 est une sortie
  pinMode(trigPin2, OUTPUT); // La broche Trig du capteur 2 est une sortie

  AFMS.begin(); // Démarre la connexion avec la shield moteur

  moteurDroit->setSpeed(vitesseMoteurs);  // Défini la vitesse du moteur droit /255
  moteurGauche->setSpeed(vitesseMoteurs); // Défini la vitesse du moteur gauche /255
  
  bluetooth.begin(9600); // Démarre la voie série avec le module Bluetooth (9600bits/sec)
  
          
}

void loop() 
{
  
  while(bluetooth.available()==0)     // Si le module bluetooth ne reçoit pas de données, ne rien faire 
      {
      }
      
   while(bluetooth.available()>0)            // Si le module bluetooth reçoit des données, les stocker dans la variable bluetoothData
     {
      bluetoothData = bluetooth.read();
     }
     
          switch(bluetoothData)
          {
            case 0 : // Avancer quand le module bluetooth reçoit le chiffre 0 
            {
             capteur1();  // Appel des fonctions des capteurs à ultrasons
             capteur2();
             
                while (bluetooth.available()==0 && distance1 > limite && distance2 > limite )   // Tant que le module ne reçoit pas d'autres donnéees,
                {                                                                               // et que la distance mesurée par les capteurs est au dessus de la limite,
                  capteur1();                                                                   // le robot avance mais s'arrête quand une des condition n'est plus respectée
                  capteur2();
                  moteurDroit->run(FORWARD);  
                  moteurGauche->run(FORWARD);
              
                }
                
                moteurDroit -> run (RELEASE);
                moteurGauche -> run (RELEASE); 
                break; 
            }
            
            
            case 1 : // Reculer quand le module bluetooth reçoit le chiffre 1
            {
             moteurDroit -> run(BACKWARD);  // Le moteur droit recule
             moteurGauche -> run(BACKWARD); // Le moteur gauche recule
           
             break;
            }
        
          
            case 2 : // Aller à droite quand le module bluetooth reçoit le chiffre 2 
            {
             capteur1();  
             capteur2();
             
                while (bluetooth.available()==0 && distance1 > limite && distance2 > limite )  // Tant que le module ne reçoit pas d'autres donnéees,
                {                                                                              // et que la distance mesurée par les capteurs est au dessus de la limite,
                  capteur1();                                                                  // le robot avance mais s'arrête quand une des condition n'est plus respectée
                  capteur2();
                  moteurDroit->run(RELEASE);  
                  moteurGauche->run(FORWARD);
             
                }
                
                moteurDroit -> run (RELEASE);
                moteurGauche -> run (RELEASE); 
                break; 
            }
        
            
            case 3 : // Gauche quand le module bluetooth reçoit le chiffre 3 
            {
             capteur1();  
             capteur2();
             
                while (bluetooth.available()==0 && distance1 > limite && distance2 > limite ) // Tant que le module ne reçoit pas d'autres donnéees,
                {                                                                             // et que la distance mesurée par les capteurs est au dessus de la limite,
                  capteur1();                                                                 // le robot avance mais s'arrête quand une des condition n'est plus respectée
                  capteur2();
                  moteurDroit->run(FORWARD);  
                  moteurGauche->run(RELEASE);
           
                }
                
                moteurDroit -> run (RELEASE);
                moteurGauche -> run (RELEASE); 
                break; 
            }
           
            
            case 4 : // Stop quand le module bluetooth reçoit le chiffre 4
            {
             moteurDroit -> run (RELEASE); // Le moteur droit s'arrête
             moteurGauche -> run (RELEASE); // Le moteur gauche s'arrête
         
             break;
            }
           }
  }

int capteur1()    // Fonction du capteur ultrason 1
    {
      digitalWrite(trigPin1, LOW); 
      delayMicroseconds(2);             // trigPin1 niveau bas pendant 2µs
    
      digitalWrite(trigPin1, HIGH);
      delayMicroseconds(10);            // trigPin1 niveau haut pendant 10µs
      digitalWrite(trigPin1, LOW);
      
      duree1 = pulseIn(echoPin1, HIGH); // Retourne la durée du capteur 1
      distance1 = duree1*0.034/2;       // Calcule la distance du capteur 1 
    }
    
int capteur2()   // Fonction du capteur ultrason 1
    {
      digitalWrite(trigPin2, LOW);
      delayMicroseconds(2);               // trigPin2 niveau bas pendant 2µs
      digitalWrite(trigPin2, HIGH);
      delayMicroseconds(10);              // trigPin2 niveau haut pendant 10µs
      digitalWrite(trigPin2, LOW);
      
      duree2 = pulseIn(echoPin2, HIGH);   // Retourne la durée du capteur 2
      distance2 = duree2*0.034/2;         // Calcule la distance du capteur 2
    }
Github
Github link with the pictures, the code, and the schema

Custom parts and enclosures

Android Application
Open this file in AppInventor2 and change address 98:D3:32:30:5C:96 to the address of your bluetooth module. Then, you have just to take the .apk in your phone.
Robot3.aia

Schematics

Schema Fritzing
Open it with Fritzing
drxzLMsT7lsE0XDRTZ0j.fzz
Schema
35m8lccganngrdkun8qt

Comments

Similar projects you might like

Control Arduino Robot Arm with Android App

Project tutorial by Slant Concepts

  • 9,001 views
  • 7 comments
  • 26 respects

Android controlled robot car

Project showcase by Isara Naranirattisai

  • 7,756 views
  • 2 comments
  • 13 respects

Make your first Arduino robot - The best beginners guide!

Project tutorial by Muhammed Azhar

  • 44,084 views
  • 15 comments
  • 98 respects

MeArm Robot Arm - Your Robot - V1.0

Project tutorial by Benjamin Gray

  • 19,302 views
  • 3 comments
  • 34 respects

Two Mode Robot Controlling through Android and Windowsphone8

Project tutorial by Anas Siddiqui

  • 16,314 views
  • 9 comments
  • 48 respects

Controlling A Roomba Robot With Arduino And Android Device

Project tutorial by MJRoBot

  • 11,220 views
  • 4 comments
  • 12 respects
Add projectSign up / Login