LOGIN
Ekhtiak Efat
6
Collaborator
Student (Project Leader)
 · PabnaBangladesh
Share
Report
Get Link
TUTORIAL

Making Arduino Voice Controlled Robot Car using Android and Bluetooth

Voice Controlled Robot Car using arduino. It is controlled by android mobile using android app and bluetooth. A simple project using arduino Robotics

Required Elements:

  1. Arduino (any model, i used nano model, uno model also best)
  2. 2WD Robot Car Pack (includes: 2 GEARED DC MOTOR, 2 WHEEL, CASTER WHEEL, ROBOT BASE, SCREWS AND PLATES)
  3. L298N Dual DC Motor Driver
  4. HC-05/HC-06 Bluetooth Module
  5. 9 volt battery or 12 volt battery
  6. 9 volt battery connector/ 12 v
  7. Some connecting wires (normal, male to male, male to female)
  8. Android app for voice control: Boarduino
    link: https://play.google.com/store/apps/details?id=appinventor.ai_Muhandi_prasetyo.Boarduino
  9. Android app for gaming console and move control: Arduino Bluetooth Control
    link: https://play.google.com/store/apps/details?id=com.broxcode.arduinobluetoothfree

Circuit Diagram Link: https://drive.google.com/open?id=0ByHnclGEVDqbbUNMY3lpT1c2cDg

Arduino Coding Zip file Link (or see below) : https://drive.google.com/open?id=0ByHnclGEVDqbTFh2Y2JtVkExLUU

Making Process:
Assemble the circuits according to the circuit design
upload the arduino coding (in the time of uploading remove the bluetooth module)
install the android app
connect the bluetooth in the android app Boarduino
now make voice command like, (should have the internet connection on)
forward
back
left
right
round
Thank you. Please like comment share and subscribe

arduino coding:


//DISCONNECT THE BLUETOOTH MODULE BEFORE UPLOADING THE CODE TO ARDUINO
//COPYWRIGHT OF DIRTY PROJECTS - YOUTUBE CHANNEL
// ASSIGNING MOTOR DRIVER PINS TO ARDUINO PINS
//INTERCHANGE 5 & 6 IF MOTOR A OR LEFT MOTOR ROTATES WRONGLY
//INTERCHANGE 7 & 8 IF MOTOR B OR RIGHT MOTOR ROTATES WRONGLY
const int IN1 = 5; //FORWARD PIN FOR MOTOR A OR LEFT MOTOR
const int IN2 = 6; //BACKWARD PIN FOR MOTOR A OR LEFT MOTOR
const int IN3 = 7; //FORWARD PIN FOR MOTOR B OR RIGHT MOTOR
const int IN4 = 8; //BACKWARD PIN FOR MOTOR B OR RIGHT MOTOR
const int ENA = 9; //MUST BE A PWM PIN TO CONTROLL SPEED OF MOTOR A
const int ENB = 10; //MUST BE A PWM PIN TO CONTROLL SPEED OF MOTOR B
const int TM = 450; //DELAY TIME INTERVAL
const int sP = 100; //SPEED OF MOTOR IN THE RANGE OF 0 TO 255
String rS; //WORD OR DIRECTION VARIABLE TO BE RECEIVED FROM BLUETOOTH MODULE
int rR=1; //NEEDED FOR ROTATION DIRECTION IN THE CASE OF ROUND COMMAND

void setup() {
 Serial.begin(9600);
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN3, OUTPUT);
 pinMode(IN4, OUTPUT);
 pinMode(ENA, OUTPUT);
 pinMode(ENB, OUTPUT);
 

}

void loop() {
 analogWrite(ENA,sP);
 analogWrite(ENB,sP);
  while (Serial.available()) {
   delay(10);  //small delay to allow input buffer to fill
char c = Serial.read();  //gets one byte from serial buffer
   if (c == ',') {
     break;
   }  //breaks out of capture loop to print rS
   rS += c; 
 } //makes the string rS  
rS.toLowerCase(); //MAKING rS LOWER CASE
 if (rS.length() >0) {
   Serial.println(rS); 
   //FOR FORWARD
   if(rS=="1" || rS=="so do i" || rS=="rod" || rS=="pride" || rS=="roar" || rS=="fluoride" || rS=="or large" || rS=="call world" || rS=="call rod" || rS=="ordered" ||  rS=="forward" || rS=="call art" || rS=="photo id" || rS=="for work" || rS=="what do i do" || rS=="how do i" || rS=="water wired" || rS=="not tired" || rS=="call reward" || rS=="call o.r" || rS=="for a large" || rS=="so tired" || rS=="for a wired" || rS=="call wired" || rS=="for a white" || rS=="for the wired" || rS=="call dad" || rS=="out of liar" || rS=="call dart" || rS=="call reward" || rS=="photo on" || rS=="how to wire" || rS=="what tired" || rS=="auto art" || rS=="but tired" || rS=="auto wash" || rS=="set alarm" || rS=="for required" || rS=="400 on" || rS=="walmart" || rS=="for a while" || rS=="call award" || rS=="paul tired" || rS=="call iron" || rS=="auto world" || rS=="auto on" || rS=="call ward"  || rS=="for word" || rS=="call yard" || rS=="call o.r" || rS=="for a large" || rS=="so tired" || rS=="for a wired" || rS=="call wired" || rS=="for a white" || rS=="for the wired" || rS=="call dad" || rS=="out of liar" || rS=="call dart" || rS=="call reward" || rS=="photo on" || rS=="how to wire" || rS=="what tired" || rS=="auto art" || rS=="but tired" || rS=="auto wash" || rS=="set alarm" || rS=="for required" || rS=="400 on" || rS=="walmart" || rS=="for a while" || rS=="call award" || rS=="paul tired" || rS=="call iron" || rS=="auto world" || rS=="auto on" || rS=="call ward"  || rS=="for word" || rS=="or wire"   || rS=="call o.r" || rS=="for a large" || rS=="so tired" || rS=="for a wired" || rS=="call wired" || rS=="for a white" || rS=="for the wired" || rS=="call dad" || rS=="out of liar" || rS=="call dart" || rS=="call reward" || rS=="photo on" || rS=="how to wire" || rS=="what tired" || rS=="auto art" || rS=="but tired" || rS=="auto wash" || rS=="set alarm" || rS=="for required" || rS=="400 on" || rS=="walmart" || rS=="for a while" || rS=="call award" || rS=="paul tired" || rS=="call iron" || rS=="auto world" || rS=="auto on" || rS=="call ward"  || rS=="for word" || rS=="for ward" )
   {
     digitalWrite(IN1,HIGH);
     digitalWrite(IN3,HIGH);
     delay(TM);
     digitalWrite(IN1,LOW);
     digitalWrite(IN3,LOW);
     
   }
   //FOR BACKWARD
   else if(rS=="2" || rS=="back" || rS=="bag" || rS=="beck" || rS=="mac" || rS=="i\'m back" || rS=="a" || rS=="heck" || rS=="hack")
   {
       digitalWrite(IN2,HIGH);
     digitalWrite(IN4,HIGH);
     delay(TM);
     digitalWrite(IN2,LOW);
     digitalWrite(IN4,LOW);
     
   }
   //FOR LEFT
   else if(rS=="4" || rS=="left" || rS=="dave" || rS=="yeah" || rS=="latest" || rS=="hey" || rS=="if")
   {
     digitalWrite(IN3,HIGH);
     delay(TM);
     digitalWrite(IN3,LOW);
     
   }
   //FOR RIGHT
   else if(rS=="3" || rS=="diet" || rS=="tight" || rS=="rice" || rS=="would i" || rS=="tonight" || rS=="write" || rS=="wright" || rS=="right" || rS=="at" || rS=="night" || rS=="alright" || rS=="light" || rS=="bright" || rS=="aight" || rS=="livr" || rS=="died" || rS=="that" || rS=="rides" || rS=="drives")
   {
     digitalWrite(IN1,HIGH);
     delay(TM);
     digitalWrite(IN1,LOW);
   }
   //FOR DOING A ROUND CIRCLE
    else if( rS=="round" || rS=="sound" || rS=="brown" || rS=="don\'t" || rS=="robin" || rS=="around" || rS=="ground" || rS=="hi" || rS=="silent" || rS=="violent" || rS=="down" || rS=="island" || rS=="land" || rS=="and" || rS=="all" || rS=="found" || rS=="bound" || rS=="band")
    { if(rR==1)
    {
     digitalWrite(IN1,HIGH);
     delay(4*TM);
     digitalWrite(IN1,LOW);
     rR=2;
     }
     else 
     {
     digitalWrite(IN3,HIGH);
     delay(4*TM);
     digitalWrite(IN3,LOW);
     rR=1;
     }
   }
   }
   rS=""; //CLEARING THE VARIABLE FOR NEW INPUT
}

New Arduino Code for the Voice Controlled Robot Car. It is for continuous speed and has a turn back and stop function added. Working View video will be uploaded soon

//DISCONNECT THE BLUETOOTH MODULE BEFORE UPLOADING THE CODE TO ARDUINO
//COPYRIGHT OF DIRTY PROJECTS - YOUTUBE CHANNEL
// ASSIGNING MOTOR DRIVER PINS TO ARDUINO PINS
//INTERCHANGE 5 & 6 IF MOTOR A OR LEFT MOTOR ROTATES WRONGLY
//INTERCHANGE 7 & 8 IF MOTOR B OR RIGHT MOTOR ROTATES WRONGLY
const int IN1 = 5; //FORWARD PIN FOR MOTOR A OR LEFT MOTOR
const int IN2 = 6; //BACKWARD PIN FOR MOTOR A OR LEFT MOTOR
const int IN3 = 7; //FORWARD PIN FOR MOTOR B OR RIGHT MOTOR
const int IN4 = 8; //BACKWARD PIN FOR MOTOR B OR RIGHT MOTOR
const int ENA = 9; //MUST BE A PWM PIN TO CONTROLL SPEED OF MOTOR A
const int ENB = 10; //MUST BE A PWM PIN TO CONTROLL SPEED OF MOTOR B
const int TM = 450; //DELAY TIME INTERVAL
const int sP = 100 ; //SPEED OF MOTOR IN THE RANGE OF 0 TO 255
String rS; //WORD OR DIRECTION VARIABLE TO BE RECEIVED FROM BLUETOOTH MODULE
int rR = 1; //NEEDED FOR ROTATION DIRECTION IN THE CASE OF ROUND COMMAND
int sT = 0; //FOR MAKING DOUBLE BACK AS STOP

void setup() {
  Serial.begin(9600);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);


}

void loop() {
  analogWrite(ENA, sP);
  analogWrite(ENB, sP);
  rS = ""; //CLEARING THE VARIABLE FOR NEW INPUT
  while (Serial.available()) {
    delay(10);  //small delay to allow input buffer to fill

    char c = Serial.read();  //gets one byte from serial buffer
    if (c == ',') {
      break;
    }  //breaks out of capture loop to print rS
    rS += c;
  } //makes the string rS
  rS.toLowerCase(); //MAKING rS LOWER CASE
  if (rS.length() > 0) {
    Serial.println(rS);
    //FOR FORWARD
    if (rS == "1" || rS == "so do i" || rS == "rod" || rS == "for what" || rS == "pride" || rS == "roar" || rS == "fluoride" || rS == "or large" || rS == "call world" || rS == "call rod" || rS == "ordered" ||  rS == "forward" || rS == "call art" || rS == "photo id" || rS == "for work" || rS == "what do i do" || rS == "how do i" || rS == "water wired" || rS == "not tired" || rS == "call reward" || rS == "call o.r" || rS == "for a large" || rS == "so tired" || rS == "for a wired" || rS == "call wired" || rS == "for a white" || rS == "for the wired" || rS == "call dad" || rS == "out of liar" || rS == "call dart" || rS == "call reward" || rS == "photo on" || rS == "how to wire" || rS == "what tired" || rS == "auto art" || rS == "but tired" || rS == "auto wash" || rS == "set alarm" || rS == "for required" || rS == "400 on" || rS == "walmart" || rS == "for a while" || rS == "call award" || rS == "paul tired" || rS == "call iron" || rS == "auto world" || rS == "auto on" || rS == "call ward"  || rS == "for word" || rS == "call yard" || rS == "call o.r" || rS == "for a large" || rS == "so tired" || rS == "for a wired" || rS == "call wired" || rS == "for a white" || rS == "for the wired" || rS == "call dad" || rS == "out of liar" || rS == "call dart" || rS == "call reward" || rS == "photo on" || rS == "how to wire" || rS == "what tired" || rS == "auto art" || rS == "but tired" || rS == "auto wash" || rS == "set alarm" || rS == "for required" || rS == "400 on" || rS == "walmart" || rS == "for a while" || rS == "call award" || rS == "paul tired" || rS == "call iron" || rS == "auto world" || rS == "auto on" || rS == "call ward"  || rS == "for word" || rS == "or wire"   || rS == "call o.r" || rS == "for a large" || rS == "so tired" || rS == "for a wired" || rS == "call wired" || rS == "for a white" || rS == "for the wired" || rS == "call dad" || rS == "out of liar" || rS == "call dart" || rS == "call reward" || rS == "photo on" || rS == "how to wire" || rS == "what tired" || rS == "auto art" || rS == "but tired" || rS == "auto wash" || rS == "set alarm" || rS == "for required" || rS == "400 on" || rS == "walmart" || rS == "for a while" || rS == "call award" || rS == "paul tired" || rS == "call iron" || rS == "auto world" || rS == "auto on" || rS == "call ward"  || rS == "for word" || rS == "for ward" )
    {
      digitalWrite(IN2, LOW);
      digitalWrite(IN4, LOW);
      sT = 1;
      digitalWrite(IN1, HIGH);
      digitalWrite(IN3, HIGH);
      while (!Serial.available());

    }
    //FOR BACKWARD
    else if (rS == "2" || rS == "back" || rS == "bag" || rS == "beck" || rS == "mac" || rS == "a" || rS == "heck" || rS == "hack")
    { digitalWrite(IN1, LOW);
      digitalWrite(IN3, LOW);
      if (sT != 2) {
        sT = 2;
        digitalWrite(IN2, HIGH);
        digitalWrite(IN4, HIGH);
        while (!Serial.available());
      }
      else {
        sT = 0;
        digitalWrite(IN2, LOW);
        digitalWrite(IN4, LOW);
        while (!Serial.available());

      }
    }
    //FOR LEFT
    else if (rS == "4" || rS == "left" || rS == "dave" || rS == "yeah" || rS == "latest" || rS == "hey" || rS == "if")
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN4, LOW);
      digitalWrite(IN3, HIGH);
      delay(TM);
      digitalWrite(IN1, HIGH);
      while (!Serial.available());

    }
    //FOR RIGHT
    else if (rS == "3" || rS == "diet" || rS == "tight" || rS == "rice" || rS == "would i" || rS == "tonight" || rS == "write" || rS == "wright" || rS == "right" || rS == "at" || rS == "night" || rS == "alright" || rS == "light" || rS == "bright" || rS == "aight" || rS == "livr" || rS == "died" || rS == "that" || rS == "rides" || rS == "drives")
    {
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      digitalWrite(IN1, HIGH);
      delay(TM);
      digitalWrite(IN3, HIGH);
      while (!Serial.available());
    }
    //FOR DOING A ROUND CIRCLE
    else if ( rS == "round" || rS == "sound" || rS == "brown" || rS == "don\'t" || rS == "robin" || rS == "around" || rS == "ground" || rS == "hi" || rS == "silent" || rS == "violent" || rS == "down" || rS == "island" || rS == "land" || rS == "and" || rS == "all" || rS == "found" || rS == "bound" || rS == "band")
    { if (rR == 1)
      {
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        digitalWrite(IN1, HIGH);
        rR = 2;
        while (!Serial.available());
      }
      else
      {
        digitalWrite(IN3, HIGH);
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN4, LOW);
        rR = 1;
        while (!Serial.available());
      }
    }
    //FOR MAKING THE FRONTSIDE TO TURN BACK
    else if (rS == "5" || rS == "turn back" || rS == "darn back" || rS == "i\'m back" || rS == "don back" || rS == "i\'m")
    {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN4, HIGH);
      digitalWrite(IN3, LOW);
      digitalWrite(IN2, LOW);
      delay(TM);
      digitalWrite(IN4, LOW);
      digitalWrite(IN3, HIGH);
       while (!Serial.available());
          }
          //TO STOP THE CAR
    else if (rS == "6" || rS == "stop" || rS == "you stop" || rS == "he stopped" || rS == "stopped" || rS == "what\'s up" || rS == "the" || rS == "is top" || rS == "now" || rS == "how" || rS == "step")
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
       while (!Serial.available());
 
    }
  }
}

#arduino

Arduino
Electronics
Robotics
Contributions
Ekhtiak Efat

Great tutorial posted by Ek

14 likes 
Like
Award Contribution
Load 11 previous comments
Pranshu Tople
4
Collaborator
Student
 · PuneIndia
Share
Report
Get Link

Here is a thing. It’s voice controlled, but it takes too much time to process. It’s because it uses Google voice recognition. Instead we can use VR module or VR SHIELD for Arduino. That makes it easier and faster processing. The robot I m working on works on VR shield itself. Check it out
https://www.collaborizm.com/project/H1_yA14VW
You can drastically understand the difference in processing speed

Like
2 likes 
Award Contribution
Ekhtiak Efat
6
Collaborator
Student (Project Leader)
 · PabnaBangladesh
Share
Report
Get Link

How much it costs? Can it Detect differen person’s voice? or it needs to be trained for different person?
Pranshu Tople

Like
0 like 
Award Contribution
Yatish Kumavat
3
Collaborator
Student
 · PuneIndia
Share
Report
Get Link

It needs to be trained for every person who will use VR module but in case of HC05 every voice will be recognized and you may see price on internet it may cause UpTo 25$

Like
0 like 
Award Contribution
Rizwan Khan
1
Apprentice
Engneer
 · IslamabadPakistan
Share
Report
Get Link

any one can send me path follower kit programme.

Like
0 like 
Award Contribution
Pranshu Tople
4
Collaborator
Student
 · PuneIndia
Share
Report
Get Link

Rizwan Khan do u mean to say line following robot? Which microcontroller are you using? Arduino or AVR

Like
0 like 
Award Contribution
Ekhtiak Efat
6
Collaborator
Student (Project Leader)
 · PabnaBangladesh
Share
Report
Get Link

My Youtube Account “Dirty Project” was suspended (don’t know why, they did it because of nothing). So uploading videos in another account
Only Voice Mode Working


All (Voice, Accelerometer,console) Modes of working

Making of Voice Controlled Robot Car

Like
0 like 
Award Contribution
Leave a reply...
DISCOVER
CHAT
HIRE
ACTIVITY
FEED
New Post
Help
Start Project
Online Users
Share Link
Write something before you submit it!
Photo updated
Request Sent!
Updated
Copied to Clipboard