Control your Arduino with voice commands using an Android smartphone! Before we make a voice activated home automation system, we must first learn the basic principles of the experiment. This guide will let you command the Arduino using your Android smartphone and a HC-05 Bluetooth module.

The designer of the app did not include a sample code. I looked for alternatives in Google's PlayStore but none was as good as the app that I've found. Luckily, I was able to figure it out although it took me a while to program it. Sorry IOS users, this app isn't available in Apple's app store :/

How Does It Work?
Have you ever encountered Android's speech recognition? Yes android has one and you can use it to control your Arduino, via Bluetooth. The App works by pressing the mic button, then the it will wait for you to say a command. The app will then display the word's that you've stated and will send data strings for the Arduino to process.

Home Automation System (on July 4, 2014):
A month from now/ I'll be releasing a highly sophisticated home automation + security system. It's my biggest project ever! Our current agenda is to program a better smartphone app that work's like Siri (talks back) and sends strings (data types) to the Arduino via bluetooth. If you want to take a sneak peek of the project and it's concept, kindly skip to the last step. The prototype that I'm working on now is composed of a network of wireless switch boxes that connects to a main control panel via WiFi/ Bluetooth.

Here's A Quick Video Demo:

Step 1: Parts & Materials

If your having trouble in finding them, I'm sure RadioShack has all of them. If you want to buy online try searching on Amazon or DealExtreme.

Thing that you'll need:
- 5 LED Indicators (the color of your choice)
- Arduino UNO (a clone works fine)
- HC-05 Serial Bluetooth Module
- Solderless Breadboard
- Jumper Cables


Step 2: Assemble The Mini Bluetooth Shield

My JY-MCU (DX Bluetooth Module) is still installed on my robots, what I have right now is the bare HC-05 module.

As we all know, the HC-05 doesn't come with a PCB. Soldering wires, directly to the metal conductors, isn't a good idea since the conductors could chip off anytime. As a solution, you can cut a fraction of perf-board then mount the HC-05 on it. I mistakenly connected my LED indicator on a blank (N/A) pin so mine doesn't work.
Too lazy to assemble a Bluetooth shield? DX.com has a ready made version (click here). I've used the DX Bluetooth module on my robots, it's tested and it's 100% ok! You can visit Bluetooth related projects (Bluetooth Sumobot and Bluetooth FPV Rover) as reference.

Step 3: Connect The Bluetooth Module

Grab some jumper cables and power the Bluetooth module with 3.3 volts. Remember, the bare HC-05 run on 3.3v and not on 5v. On the other hand, the JY-MCU has a built in regulator, it can run on a 5v line.

Now connect the RX (pin #0) of the Arduino to the TX pin of the Bluetooth module and the TX (pin #1) of the Arduino to the RX pin of the Bluetooth module. (refer to the image above)

Step 4: Connect The LEDs

Connect the positive leads of each LED on pins # 2,3,4,5,6 of the Arduino. The negative leads of each LED goes to the negative rail of the breadboard. The negative rail of the breadboard goes to the Arduino's ground.

Step 5: Programming The Arduino

Understanding The App: 
Before you program the arduino, you must first learn how the app works. The app work by recognizing your voice command, it will then display the words that you've spoken then sending data/ strings to the arduino via bluetooth. What's a string? A string is like a word, you can make conditional statements out of it [ex: if (voice == "*computer on") {// turn Pin #2 on} ]. The "voice" is your string, "==" is your condition (means equal to), "*computer on" is your command and the code inside the curly-braces "{ }" are the codes to be executed once your string matches the command condition. 

What's the format of the string? How does it know when the next command kicks in? How does it differentiate a set of words from a new command? The app sends strings in this format *command#, the asterisk (*) indicates the start of a new command and the hash-tag (#) indicates the end of a command. I was able to remove the hash-tag (#) after each word in the conditional statement was not able to remove the asterisk (*). You'll need to start your command condition with an asterisk otherwise the sketch will not work. 

How Can I Change The Commands?
You can see that the "*TV on" is highlighted from the image above. If you want to change the command to ,humm let's say "open garage door", you can replace the "*TV on" with "*open garage door". Always remember to start the command with an asterisk.

//Coded By: Angelo Casimiro (4/27/14)
//Voice Activated Arduino (Bluetooth + Android)
//Feel free to modify it but remember to give credit

String voice;
led1 = 2, //Connect LED 1 To Pin #2
led2 = 3, //Connect LED 2 To Pin #3
led3 = 4, //Connect LED 3 To Pin #4
led4 = 5, //Connect LED 4 To Pin #5
led5 = 6; //Connect LED 5 To Pin #6
//--------------------------Call A Function-------------------------------// 
void allon(){
     digitalWrite(led1, HIGH);
     digitalWrite(led2, HIGH);
     digitalWrite(led3, HIGH);
     digitalWrite(led4, HIGH);
     digitalWrite(led5, HIGH);
void alloff(){
     digitalWrite(led1, LOW);
     digitalWrite(led2, LOW);
     digitalWrite(led3, LOW);
     digitalWrite(led4, LOW);
     digitalWrite(led5, LOW);
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
void loop() {
  while (Serial.available()){  //Check if there is an available byte to read
  delay(10); //Delay added to make thing stable
  char c = Serial.read(); //Conduct a serial read
  if (c == '#') {break;} //Exit the loop when the # is detected after the word
  voice += c; //Shorthand for voice = voice + c
  if (voice.length() > 0) {
  //----------Control Multiple Pins/ LEDs----------// 
       if(voice == "*all on") {allon();}  //Turn Off All Pins (Call Function)
  else if(voice == "*all off"){alloff();} //Turn On  All Pins (Call Function)
  //----------Turn On One-By-One----------//
  else if(voice == "*TV on") {digitalWrite(led1, HIGH);}
  else if(voice == "*fan on") {digitalWrite(led2, HIGH);}
  else if(voice == "*computer on") {digitalWrite(led3, HIGH);}
  else if(voice == "*bedroom lights on") {digitalWrite(led4, HIGH);}
  else if(voice == "*bathroom lights on") {digitalWrite(led5, HIGH);}
  //----------Turn Off One-By-One----------//
  else if(voice == "*TV off") {digitalWrite(led1, LOW);}
  else if(voice == "*fan off") {digitalWrite(led2, LOW);}
  else if(voice == "*computer off") {digitalWrite(led3, LOW);}
  else if(voice == "*bedroom lights off") {digitalWrite(led4, LOW);}
  else if(voice == "*bathroom lights off") {digitalWrite(led5, LOW);}
voice="";}} //Reset the variable after initiating

Step 6: Learn To Use The App

Download The Free App Here: Android Meets Robots : Voice 

5 Simple Steps:
1st.)  Download the app from Google PlayStore
2nd.) Tap on options menu then select "Connect Robot"
3rd.)  Click on your BT-Module (in my case it's the HC-05)
4th.)  Wait until it says Connected to BT-Module (HC-05)
5th.) Tap on the mic icon and state your command!

Here's A Quick Demo Video:

Step 7: Next Project: Highly-Sophisticated Home Automation (Network)

Here's a drawing of what to expect on my next Arduino project!

Sorry for the terrible doodle :)
<p>will this work with HC-06&gt;&gt;&gt;&gt;?</p>
<p>how do i use two commands to do the same thing?, i have tried this but the system confused and any randome commands was accepted. PLZ help</p><p>else if(voice == &quot;*fan on&quot; || &quot;*stop&quot;)</p><p>{</p><p>digitalWrite(led2, HIGH);</p><p>digitalWrite(led1, LOW);</p>
<p>We tried everything perfectly but leds are not blinking as per the commands. plz help us to solve this problem...</p>
<p>Works perfectly. I have plans to use this in my living room.</p>
<p>Can we move the robot using voice record. Please help me to make a robot move.</p><p>I mean with programming and items to make it..! because its my first project !!..</p><p>THANK YOU!!</p>
what compiler shld we use for tis program?
<p>Hey! </p><p>I made this project</p><p>Everything works perfectly</p><p>My voice is recognized</p><p>but my LEDs aren't performing the command</p><p>why? :C</p>
Did you rectify this problem <br>Can you tell me how?
<p>I am facing the same error<br>my voice is recognized but LEDs aren't glowing. </p><p>and output on Serial terminal is also some different string</p>
I did everything correctly and my voice is recognised but the leds wont work why
<p>showing &quot;voice was not declared in this scope&quot;</p><p>Help me with this !</p>
<p>//Copy this line to the beginning of your code. </p><p>String voice;</p>
<p>great intructables, if you want upload sketch over bluetooth use android could follow this instructables http://www.instructables.com/id/Program-Your-Arduino-With-an-Android-Device-Over-B/</p>
<p>Is it also possible to control servo`s through arduino with voice control, using a bluetooth conection with my phone?</p>
<p>yes is possible :)</p>
<p>i followed all steps you wrote . <br>but why i can`t upload the code in ardino . ? </p><p>Arduino: 1.6.5 (Windows 8.1), Board: &quot;Arduino Uno&quot;</p><p>Sketch uses 4,714 bytes (14%) of program storage space. Maximum is 32,256 bytes.</p><p>Global variables use 382 bytes (18%) of dynamic memory, leaving 1,666 bytes for local variables. Maximum is 2,048 bytes.</p><p>avrdude: ser_open(): can't open device &quot;\\.\COM1&quot;: The system cannot find the file specified.</p><p>Problem uploading to board. See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.</p><p> This report would have more information with</p><p> &quot;Show verbose output during compilation&quot;</p><p> enabled in File &gt; Preferences.</p>
<p>Check if your com port is correct .....</p>
<p>can you parse whatever string is stored inside voice? so for example, if voice is equal to &quot;please turn on the light&quot;, can I write an if statement saying: &quot;if voice contains on and contains light, then turn on the light&quot; instead of only doing checks for equality?</p><p>thanks!</p>
<p>Teacher~</p><p>send the code to my mail id.</p><p><br>milkso77@gmail.com</p>
I am getting this error while pressing upload.I am new to this and doing this is my first project please help me please
<p>Hello, I also get this message. The serial port is the right one, I've tried all the suggestions described here. I don't know what else to do. Can anyone help please?</p>
You should compile before connecting the pin 0 (RX). It worked for me.
Disconnect the RX and TX pin and upload
<p>Check for the COM port of Your Arduino connected to the computer from 'Device Manager'. Then select it from 'serial port' in 'Tools' menu in Your IDE. Then Upload. </p><p>And then, kindly reply me!</p>
<p>I did it with a Bluetooth 4.0 (HMsoft) .. And it's not connecting using the AMR_Voice. Any way to fix it without changing bluetooth module? :(</p>
<p>try to use a phone that supports Bluetooth 4.0 technology.\</p>
<p>Will this work with any bluetooth modules? Or just JY-MCU?</p>
<p>hey</p><p>i wired all the stuffs like you do </p><p>but when i start to talk to my phone the hc-05 start to recive garbage and wrong thinks </p><p>for example when i said Hello it recives </p><p>&bdquo;&lrm;</p><p>and Hi</p><p>- </p><p>and nothing will hapend </p>
<p>very good project </p><p>can you please provide the code of voice controlling for arduno-bluetooth controlled car(robot).</p><p>ridvik97@gmail.com</p><p>hoping you will reply.</p>
<p>Very cool project!</p><p>We used the same app to add vocal control to our domotic framework</p><p>http://freedomotic.com/content/plugins/bt-speech-recognition</p>
What if i want to use it at my home to switch on and off light fans etc.<br>Does we have to make any change?<br>Pls help me out i want to use it in my room!
Connect a relay to arduino then
In that video arduino is connected to what through usb cable cant we remove that?
It's for power supply to adruino...instead of USB you can use a 9v battery
<p>wow i did it</p>
<p>i m speaking tv off and the lights are getting on</p><p>y is it soo ?????</p>
For controlling any ac appliance like tv,computer ,fan bulb then u should use relay and a trasister amplifing circuit to the port of led connected boss..
Can you make the app work without having to touch the screen? It would continuously listen for an activation command instead. Thanks.
<p>error &quot;voice&quot;</p><p>i want blurtooth library</p>
In that video arduino is connected to what through usb cable cant we remove that?
I want the app like siri which will work by enabling the Bluetooth module
<p>sir, can you please send me the code of this project.. victenor21@gmail.com</p><p> thank you </p>
The code is already there on the zip file
How to ON or OFF my computer with voice...
How to ON or OFF my computer with voice...
<p>i made everything as u write sir, but not recognizing the voice.. and continuosly voltage on the all outputs.</p>
<p>hey is it fine that u dont use any voltage divider from the arduino to the blutooth module?</p>
<p>can you tell me hoe to connect my bb8 (DIY) </p><p>with this project to enable voice control for his voice module</p><p>pls reply</p>
<p>Hey nice job! This was something me and my friend made when we got bored and stuff and it was pretty cool to try it out. Thank you very much. I've written about this and also posted a video showing us just playing with the stuff trying to get it to listen to us :P. You can see that at igeorge.in :)</p>
Can we design this using 8051 microcontroller?

About This Instructable




Bio: Hi I'm Angelo! I am a 17 y/o Physics Major at the DLSU and I use my course as an inspiration for making ... More »
More by ASCAS:DIY Life-Size Phone Controlled BB8 Droid Rig A Car Horn To Your Alarmclock! Build A Smartphone Projector With A Shoebox  
Add instructable to: