loading
The main goal of this project was to test the speech recognition performance of BitVoicer (http://www.bitsophia.com/BitVoicer.aspx). For this purpose, I designed a simple led control sketch which I integrated with BitVoicer. Of course you can do anything you want once you have received the commands from Bitvoicer, but to keep things simple, I thought a led test would do just fine.

Here is the YouTube video with the results:


This is the Arduino sketch that controls the leds and retrieves data sent from BitVoicer:

//Includes the BitVoicer library to the sketch
#include <BitVoicer.h>

//Sets up the pins and default variables
int pinR = 3;
int pinY = 5;
int pinG = 6;
int blinkDelay = 250;
int sequenceDir = 0;
int lightLevel = 0;

//Creates a new instance of the BitVoicerSerial class
//Sets up serial port to 0
BitVoicerSerial bitVoicer = BitVoicerSerial(0);

void setup()
{
  //Starts serial communication and sets up the pinModes
  Serial.begin(9600);
  pinMode(pinR, OUTPUT);
  pinMode(pinY, OUTPUT);
  pinMode(pinG, OUTPUT);
}

void loop()
{
  //Retrieves data from serial buffer 
  bitVoicer.getData();
 
  //Quits the loop if no string data was returned from getData
  if (bitVoicer.strData == "")
  {
    return;
  }
 
  //Each of the next 'if' statements performs a different
  //task based on the data received from BitVoicer
  if (bitVoicer.strData == "wake")
  {
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    delay(200);
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    delay(200);
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    delay(200);
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    delay(200);
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    delay(200);
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    bitVoicer.strData = "";
    lightLevel = 0;
  }
  else if (bitVoicer.strData == "sleep")
  {
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    delay(200);
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    delay(200);
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    delay(200);
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    bitVoicer.strData = "";
    lightLevel = 0;
  }
  else if (bitVoicer.strData == "RH")
  {
    digitalWrite(pinR, HIGH);
    bitVoicer.strData = "";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "RL")
  {
    digitalWrite(pinR, LOW);
    bitVoicer.strData = "";
    lightLevel = 0;
  }
  else if (bitVoicer.strData == "YH")
  {
    digitalWrite(pinY, HIGH);
    bitVoicer.strData = "";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "YL")
  {
    digitalWrite(pinY, LOW);
    bitVoicer.strData = "";
    lightLevel = 0;
  }
  else if (bitVoicer.strData == "GH")
  {
    digitalWrite(pinG, HIGH);
    bitVoicer.strData = "";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "GL")
  {
    digitalWrite(pinG, LOW);
    bitVoicer.strData = "";
    lightLevel = 0;
  }
  else if (bitVoicer.strData == "blink")
  {
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    delay(blinkDelay);
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    delay(blinkDelay);
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "BF")
  {
    blinkDelay = 100;
    bitVoicer.strData = "blink";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "BFF")
  {
    switch (blinkDelay)
    {
      case 500:
        blinkDelay = 250;
        break;
      case 250:
        blinkDelay = 100;
        break;
      default:
        break;
    }
    bitVoicer.strData = "blink";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "BS")
  {
    blinkDelay = 500;
    bitVoicer.strData = "blink";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "BSS")
  {
    switch (blinkDelay)
    {
      case 100:
        blinkDelay = 250;
        break;
      case 250:
        blinkDelay = 500;
        break;
      default:
        break;
    }
    bitVoicer.strData = "blink";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "sequence")
  {
    if (sequenceDir == 0)
    {
      digitalWrite(pinR, HIGH);
      delay(250);
      digitalWrite(pinR, LOW);
      digitalWrite(pinY, HIGH);
      delay(250);
      digitalWrite(pinY, LOW);
      digitalWrite(pinG, HIGH);
      delay(250);
      digitalWrite(pinG, LOW);
    }
    else
    {
      digitalWrite(pinG, HIGH);
      delay(250);
      digitalWrite(pinG, LOW);
      digitalWrite(pinY, HIGH);
      delay(250);
      digitalWrite(pinY, LOW);
      digitalWrite(pinR, HIGH);
      delay(250);
      digitalWrite(pinR, LOW);
    }
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "revert")
  {
    if (sequenceDir == 0)
    {
      sequenceDir = 1;
    }
    else
    {
      sequenceDir = 0;
    }
    bitVoicer.strData = "sequence";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "ALLON")
  {
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    bitVoicer.strData = "";
    lightLevel = 255;
  }
  else if (bitVoicer.strData == "ALLOFF")
  {
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    bitVoicer.strData = "";
    lightLevel = 0;
  }
  else if (bitVoicer.strData == "brighter")
  {
    if (lightLevel < 255)
    {
      lightLevel += 85;
      analogWrite(pinR, lightLevel);
      analogWrite(pinY, lightLevel);
      analogWrite(pinG, lightLevel);
    }
    bitVoicer.strData = "";
  }
  else if (bitVoicer.strData == "darker")
  {
    if (lightLevel > 0)
    {
      lightLevel -= 85;
      analogWrite(pinR, lightLevel);
      analogWrite(pinY, lightLevel);
      analogWrite(pinG, lightLevel);
    }
    bitVoicer.strData = "";
  }
  else
  {
    Serial.println("ERROR:" + bitVoicer.strData);
    bitVoicer.strData = "";
  }
}


This sketch uses the BitVoicer Arduino Library that can be downloaded from their website: www.bitsophia.com.

The BitVoicer Voice Schema that recognizes the speech shown in the video is available at: http://www.justbuss.xpg.com.br/BitVoicerTest.zip (you need to have BitVoicer installed in order to open it).

I hope you guys have fun with it!
<p>I have problem in this line </p><p>BitVoicerSerial bitVoicer = BitVoicerSerial(0);</p><p>and I try to solve it. but failed. Please help me</p>
<p>The code on this Instructable no longer works with the new BitVoicer library. Take a look at the example on <a href="http://www.instructables.com/id/Speech-Recognition-with-Arduino/" rel="nofollow">this </a>other Instructable and make the appropriate adjustments to the code.</p>
<p>thank you very much. </p>
<p>I have a problem.. when i upload this program to arduino... i got an error of </p><p>#include &lt;BitVoicer.h&gt;</p><p>can you help me plzzzz it's urgently...</p>
<p>What is the exact error message? Have you placed all the library files in the right folder? More information here: <a href="http://www.arduino.cc/en/Guide/Libraries" rel="nofollow">http://www.arduino.cc/en/Guide/Libraries</a></p>
<p>sir plzzz help me</p>
<p>shows error on compiling</p><p>error:'BitVoicerSerial' does not name a type????..pls help</p>
<p>Chiragc, this post is too old and the last BitVoicer version no longer has the BitVoicer.h library. Take a look at this post: http://www.instructables.com/id/Speech-Recognition-with-Arduino/. It is newer and uses the current version of the BitVoicer library.</p>
<p>I Do I need to connect arduıno to computer for this project? please answer quick . It's important to me.</p>
<p>yes bit voicer sends the data to arduino and the arduino performs the function according to the received string</p>
<p>&quot;<strong>BitVoicerSerial bitVoicer = BitVoicerSerial(0);&quot; this line has an error i think when i write &quot;</strong><strong>BitVoicerSerial(0);</strong><strong>&quot; the sketch was not compiling and when i write &quot;</strong><strong>BitVoicerSerial(0);</strong><strong>&quot; it compiled. Is their any mistake in this line??</strong></p>
<p>I am sorry Aditya, but I don't get any erros compiling this sketch. Make sure you have installed the library correctly. Also, I do not see the difference between &quot;BitVoicerSerial(0);&quot; and &quot;BitVoicerSerial(0);&quot;???</p>
<p>sorry, i did a mistake above, <br>when i write &quot;BitVoicerSerial(0);&quot; it give an error and when i write &quot;BitVoicerSerial();&quot; the code compiles successfully. <br><br>The difference is &quot;(0)&quot; and &quot;()&quot;. </p>
<p>You are right Aditya. The problem is that the code above was written for the first version of the BitVoicer library. The current version does not take an argument with the constructor. You must use the setAudioInput function to set up the pin.</p>
<p>ok..got it thankuu</p>
<p>hey,, tnx,, i have a question,, what is the resistor size?</p>
330 ohms.
tnx,,
I have a problem.I downloaded the bitvoicer but i cannot find the activation key!!!Whyy???Where is it? please help.
<p>It appears that it is possible to do voice recognition with Arduino using an Android phone and accompanying app. Here is an Instructable that demonstrates this <a href="http://www.instructables.com/id/Voice-Activated-Arduino-Bluetooth-Android/" rel="nofollow">http://www.instructables.com/id/Voice-Activated-Ar...</a></p><p>There are other Instructables that demonstrate the same thing.</p><p>And here is the app they are using <a href="https://play.google.com/store/apps/details?id=robotspace.simplelabs.amr_voice" rel="nofollow">https://play.google.com/store/apps/details?id=robo...</a></p><p>Good luck!</p>
<p>Thanks!That was really helpfull !</p>
BitVoicer is not a free software. You have to buy the product key at their website, but it's only $4.50.
Is there any similar FREE software that I could use in case I do not want to pay????:)Thanks a lot! <br>
Sorry, I don't know any other program like this. Besides, as I said, it's only $4.50.
<p>shows error on compiling</p><p>error:'BitVoicerSerial' does not name a type????..pls help</p>
<p>Acknowledged you in my Instructable - http://www.instructables.com/id/Speech-Controlled-Quadropod/</p>
<p>excellent post..great job indeed.</p>
You didn't use a USB cable or a Bluetooth slave , so how did you connect between the Arduino and the computer ( how did you use the computer microphone ) ?
In this project I am using a USB cable. The cable is not very visible, but it is there. On this post I use a wireless module from sparkfun:&nbsp;<a href="http://www.instructables.com/id/Wireless-Audio-Streaming-and-Speech-Recognition/" rel="nofollow">http://www.instructables.com/id/Wireless-Audio-Streaming-and-Speech-Recognition/</a>
Hi leandro4b, <br>I would like to make your awesome project. I wonder that what kind of microphone you used. Please help me where I find it? link pls. Thanks for your help.
In this project I used the computer microphone, but in this one (<a href="http://www.instructables.com/id/Speech-Recognition-with-Arduino/" rel="nofollow">http://www.instructables.com/id/Speech-Recognition-with-Arduino/</a>) I used an electret microphone from sparkfun. Here is the link to the mic:&nbsp;<a href="https://www.sparkfun.com/products/9964" rel="nofollow">https://www.sparkfun.com/products/9964</a>. I made a small modification to the breakout board to reduce the frequency range, although the results with the original board were very good.
I added a wireless module and a microphone to this project. Here is the Instructable link: <a href="http://www.instructables.com/id/Wireless-Audio-Streaming-and-Speech-Recognition/" rel="nofollow">http://www.instructables.com/id/Wireless-Audio-Streaming-and-Speech-Recognition/</a>
BitSophia released a new version of BitVoicer and the above sketch no longer works with it. I'll post a new instructable as soon as I figure out how to stream audio to BitVoicer.
Its really very funny technology.
I use your steps to make it ,but my arduino not work
Is the Arduino enviroment able to compile your sketch?
I use arduino uno and my sketch can upload my board
The second line of my sketch had an error. I don't know why, but when I wrote this post part of the code was not copied. It should work now.
very cool, do you think there's any way to do this without a computer?
I believe it is impossible to perform this kind of speech recognition without a computer. Microcontrollers simply do not have enough processing power.

About This Instructable

33,267views

70favorites

License:

More by leandro4b:2WD Voice Controlled Robot with Arduino and BitVoicer Server Speech Recognition and Synthesis with Arduino Speech Recognition with Arduino and BitVoicer Server 
Add instructable to: