Instructables
Picture of Speech Recognition with Arduino
BitVoicerTest2_2_800x600.jpg
BitVoicerTest2_1_800x600.jpg
In this project I use BitVoicer’s speech recognition features (http://www.bitsophia.com/BitVoicer.aspx), one Arduino board and one electret microphone (https://www.sparkfun.com/products/9964) to control a few LEDs.

This project is similar to the one in my first post (http://www.instructables.com/id/Speech-Recognition-with-BitVoicer-and-Arduino/), but now I use audio streaming to send audio to BitVoicer.

The fritzing schematic I added to this instructable shows how I wired my Arduino board.

I’m also adding a few pictures and a YouTube video of the project running.


Unfortunately, the sketch I wrote for my first post is no longer supported by the new version of BitVoicer. Here is the new sketch:

#include <BitVoicer11.h>

//Instantiates the BitVoicerSerial class
BitVoicerSerial bvSerial = BitVoicerSerial();

//Stores true if the Audio Streaming Calibration tool
//is running
boolean sampleTest = false;
//Stores the data type retrieved by getData()
byte dataType = 0;
//Sets up the pins and default variables
int pinR = 3;
int pinY = 5;
int pinG = 6;
int lightLevel = 0;

void setup()
{
  //Sets the analog reference to external (AREF pin)
  //WARNING!!! If anything is conected to the AREF pin,
  //this function MUST be called first. Otherwise, it will
  //damage the board.
  bvSerial.setAnalogReference(BV_EXTERNAL);
  //Sets up the microcontroller to perform faster analog reads
  //on the specified pin
  bvSerial.setAudioInput(0);
  //Starts serial communication at 115200 bps
  Serial.begin(115200);
  //Sets up the pinModes
  pinMode(pinR, OUTPUT);
  pinMode(pinY, OUTPUT);
  pinMode(pinG, OUTPUT);
}

void loop()
{
  //Captures audio and sends it to BitVoicer if the Audio
  //Streaming Calibration Tool is running
  if (sampleTest == true)
  {
    //The value passed to the function is the time
    //(in microseconds) that the function has to wait before
    //performing the reading. It is used to achieve about
    //8000 readings per second.
    bvSerial.processAudio(46);
  }
 
  //Captures audio and sends it to BitVoicer if the Speech
  //Recognition Engine is running
  if (bvSerial.engineRunning)
  {
    //The value passed to the function is the time
    //(in microseconds) that the function has to wait before
    //performing the reading. It is used to achieve about
    //8000 readings per second.
    bvSerial.processAudio(46);
  }
}

//This function runs every time serial data is available
//in the serial buffer after a loop
void serialEvent()
{
  //Reads the serial buffer and stores the received data type
  dataType = bvSerial.getData();
 
  //Changes the value of sampleTest if the received data was
  //the start/stop sampling command
  if (dataType == BV_COMMAND)
      sampleTest = bvSerial.cmdData;
 
  //Signals BitVoicer's Speech Recognition Engine to start
  //listening to audio streams after the engineRunning status
  //was received
  if (dataType == BV_STATUS && bvSerial.engineRunning == true)
    bvSerial.startStopListening();
 
  //Checks if the data type is the same as the one in the
  //Voice Schema
  if (dataType == BV_STR)
    setLEDs();
}

//Performs the LED changes according to the value in
//bvSerial.strData
void setLEDs()
{
  if (bvSerial.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);
    lightLevel = 0;
  }
  else if (bvSerial.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);
    lightLevel = 0;
  }
  else if (bvSerial.strData == "RH")
  {
    digitalWrite(pinR, HIGH);
    lightLevel = 255;
  }
  else if (bvSerial.strData == "RL")
  {
    digitalWrite(pinR, LOW);
    lightLevel = 0;
  }
  else if (bvSerial.strData == "YH")
  {
    digitalWrite(pinY, HIGH);
    lightLevel = 255;
  }
  else if (bvSerial.strData == "YL")
  {
    digitalWrite(pinY, LOW);
    lightLevel = 0;
  }
  else if (bvSerial.strData == "GH")
  {
    digitalWrite(pinG, HIGH);
    lightLevel = 255;
  }
  else if (bvSerial.strData == "GL")
  {
    digitalWrite(pinG, LOW);
    lightLevel = 0;
  }
  else if (bvSerial.strData == "ALLON")
  {
    digitalWrite(pinR, HIGH);
    digitalWrite(pinY, HIGH);
    digitalWrite(pinG, HIGH);
    lightLevel = 255;
  }
  else if (bvSerial.strData == "ALLOFF")
  {
    digitalWrite(pinR, LOW);
    digitalWrite(pinY, LOW);
    digitalWrite(pinG, LOW);
    lightLevel = 0;
  }
  else if (bvSerial.strData == "brighter")
  {
    if (lightLevel < 255)
    {
      lightLevel += 85;
      analogWrite(pinR, lightLevel);
      analogWrite(pinY, lightLevel);
      analogWrite(pinG, lightLevel);
    }
  }
  else if (bvSerial.strData == "darker")
  {
    if (lightLevel > 0)
    {
      lightLevel -= 85;
      analogWrite(pinR, lightLevel);
      analogWrite(pinY, lightLevel);
      analogWrite(pinG, lightLevel);
    }
  }
  else
  {
    bvSerial.startStopListening();
    bvSerial.sendToBV("ERROR:" + bvSerial.strData);
    bvSerial.startStopListening();
  }
}


The BitVoicer Voice Schema I used can be downloaded from: http://www.justbuss.xpg.com.br/BitVoicerTest2.zip (you need to have BitVoicer installed to be able open it).

Now I want to control a few things (lights and celling fan) at home. Suggestions are very welcome.
1-40 of 48Next »

please i want to use arduino can i make a robot wch recognisie the voice n by THAT voice only vil b the password for dat robot .that robot is for only storing d data n keeping voice as a password for security?

please i want to ask you if i can do something like number recognition on arduino by a camera ? and another question if i can program the camera on number recognition on matlab then i attached it in arduino ?

leandro4b (author)  nadeen.sadoun9313 days ago

I am sorry, but I really didn't understand your question. What do you mean by "recognition on arduino by a camera"? Are you talking about image recognition? If so, then I'm sorry but I do not know anything about it.

shubhank00819 days ago

Really nice and easy to understand quick guide, but a question, do you need bitvoicer running on a PC always to make the voice recog. work ? How about for a wireless device which you want to be independent from a PC, considering the case you want to control a device (like a mobile) with VR or send your voice to the device

leandro4b (author)  shubhank00818 days ago

Please read the answers bellow that you will find the answers to all of your questions.

kkazakov2 months ago

Does this schematic need Arduino connected to Windows all the time, or it's just for setup? I could not really understand this part.

leandro4b (author)  kkazakov2 months ago

Microcontrollers simply do not have the processing power to perform speech recognition like this, so your Arduino will need a logical connection to the PC all the time.

Not all, that's true. I'm exploring Arduino DUE's possibilities, as it's 84 MHz, 32-bit and have plenty of memory available ...

Otherwise - this whole instructable is not very helpful, if you need your microcontroller _connected_ to a _windows_ machine all the time.

Thanks for clarifying this, almost bought BitVoicer.

leandro4b (author)  kkazakov2 months ago

Well, BitVoicer uses almost 5% of my quad core 2.5GHz processor and the English language database has about 23MB. Even the DUE would take forever to process the audio and search a database this big. Besides, BitVoicer is speaker independent and you can create an unlimited number of sentence variations. I have already tried some devices with simple, inaccurate and speaker dependent speech recognition. They don't even get close to the BitVoicer performance.

hi, it's very good tutorial I've tried it and succes. But I wanna ask, is the bitVoicer can recognize sentences with unlimited number, like I wanna give command 'turn all lamps on without the red ones'. So, all lamps turn on without the red one. can I? if yes, how to do that?

hi, it's very good tutorial I've tried it and succes. But I wanna ask, is the bitVoicer can recognize sentences with unlimited number, like I wanna give command 'turn all lamps on without the red ones'. So, all lamps turn on without the red one. can I? if yes, how to do that?

hi, it's very good tutorial I've tried it and succes. But I wanna ask, is the bitVoicer can recognize sentences with unlimited number, like I wanna give command 'turn all lamps on without the red ones'. So, all lamps turn on without the red one. can I? if yes, how to do that?

hi, it's very good tutorial I've tried it and succes. But I wanna ask, is the bitVoicer can recognize sentences with unlimited number, like I wanna give command 'turn all lamps on without the red ones'. So, all lamps turn on without the red one. can I? if yes, how to do that?

my goal is a bit different, but thank you for clarifying.

leandro4b (author)  kkazakov2 months ago

I forgot to mention something that may help you. I added WiFi conectivity to this project. Here is the Instructable on how to implement a RN171XV module (Microchip: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en560635) in this project: http://www.instructables.com/id/Wireless-Audio-Streaming-and-Speech-Recognition/

eddieBeg1 month ago

hye I have a question...did you change the setting in the bitvoicer?....

I have bought all the equipment needed but it seem my microphone does not work...

need ur help ASAP....tQ

leandro4b (author)  eddieBeg1 month ago

Well, I had to set up the communication settings in the preferences.

lchouhan2 months ago

bitvoicer11.h missing

plz give this code

leandro4b (author)  lchouhan2 months ago
You can find the library inside the BitVoicer installation folder.
bbenedict12 months ago

really great job!but we are having defficulties in having product key for bitvoicer..
can anyone send me ur own product key?it would really help us a lot ..

by da way name is benedict,from philippines!Godbless!

leandro4b (author)  bbenedict12 months ago

A product key can be activated on one computer only. It will not work on another computer if it has already been activated.

josedbet34 months ago

hi leandro i downloaded bitvoicer i did the same project i bought the microphone and it seems no to work for me i'm using the same resistors and electret microphone the testing bitvoicer program and the leds doesn't turn on the only difference is that i am using arduino due for the same project , my question is how does the bitvoicer connects with arduino and how the microphone of my pc have something to do with the microphone of the project please help

hi leandro i downloaded bitvoicer i did the same project i bought the microphone and it seems no to work for me i'm using the same resistors and electret microphone the testing bitvoicer program and the leds doesn't turn on the only difference is that i am using arduino due for the same project , my question is how does the bitvoicer connects with arduino and how the microphone of my pc have something to do with the microphone of the project please help

photo.JPG
leandro4b (author)  josedbet32 months ago

I am not sure, but I think their Arduino library does not work with the Duo board. You will have to make some changes to the library or find someone who has.

leandro4b (author)  josedbet34 months ago

Well, your computer's microphone really has nothing to do with the microphone you use in your project. I suggest you take a good look into their manual to find out how BitVoicer connects with your Arduino. I also know that their library was not designed to work with the Arduino Due, so you will have to rewrite the library for the Due.

soniiasosa5 months ago

Hi!!! We are trying to use the speech recognition feature for a project, we bought the program, the microphone, and we connect everything but it seems not to work... What resistors are you using?? We are also using a sensor shield.. but we are connecting it to A0, just like yours.. If you can help us it will be awesome!!! PS: we are using your BitVoicer program and your arduino code

leandro4b (author)  soniiasosa5 months ago

I used 330 ohm resistors for the LEDs. Is the calibration tool showing any readings?

mina samy6 months ago

hey , I have a problem with BitVoicer that i cant find the activation key in any place to activate the program and start my work .. please tell me where can I find it .. thanks in advance :)

leandro4b (author)  mina samy5 months ago

You have to buy the product key from their website.

donromeo6 months ago

Great work Leandro.

Got BitVoicer, bought myself a license, activated it, ran it as administrator, installed Spanish library, but then ...

... when I click the link for the Voice Schema nothing happens. (Same for the old version and same for the wireless version)

I'm Arduino proficient, so as soon as I learn how to use your Voice Schema I'll be able to make it work. Please give me a hint on how to download your schema.

Thanks for the help.

Romeo

leandro4b (author)  donromeo6 months ago

Do your mean the Voice Schema link in the end of the post? It is working here?!

Yes, the link does not work, it produces a blank page. I tried both Chrome and IE. I tried even wget and what I get is a zero sized file.

leandro4b (author)  donromeo6 months ago

Well, I just checked again and it is working here. The files are available and the downloaded ZIP has a functional voice schema. Is anybody else unable to download the file?

donromeo donromeo6 months ago

Never mind, I learned from the BitVoicer examples how to write my own.

Thanks anyways.

mcaro26 months ago

Hey, I am trying to replicate this project but I don't know these programs. Do you have a list of steps I can follow in order to not get lost? You dont have steps but if you do can you please share? Its awesome btw!

asd2u20048 months ago

hello , i'm trying to compile the code but I have this issue

Arduino: 1.5.5-r2 (Windows 8), Board: "Arduino Duemilanove or Diecimila, ATmega328"

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp: In constructor 'BitVoicerSerial::BitVoicerSerial()':

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp:20: error: ambiguous overload for 'operator=' in '((BitVoicerSerial*)this)->BitVoicerSerial::strData = 0'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:86: note: candidates are: String& String::operator=(const String&)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:87: note: String& String::operator=(const char*)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:88: note: String& String::operator=(const __FlashStringHelper*)

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp: In member function 'void BitVoicerSerial::setData(byte, int)':

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp:108: error: ambiguous overload for 'operator=' in '((BitVoicerSerial*)this)->BitVoicerSerial::strData = 0'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:86: note: candidates are: String& String::operator=(const String&)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:87: note: String& String::operator=(const char*)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:88: note: String& String::operator=(const __FlashStringHelper*)

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp:125: error: ambiguous overload for 'operator=' in '((BitVoicerSerial*)this)->BitVoicerSerial::strData = 0'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:86: note: candidates are: String& String::operator=(const String&)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:87: note: String& String::operator=(const char*)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:88: note: String& String::operator=(const __FlashStringHelper*)

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp:135: error: ambiguous overload for 'operator=' in '((BitVoicerSerial*)this)->BitVoicerSerial::strData = 0'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:86: note: candidates are: String& String::operator=(const String&)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:87: note: String& String::operator=(const char*)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:88: note: String& String::operator=(const __FlashStringHelper*)

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp:145: error: ambiguous overload for 'operator=' in '((BitVoicerSerial*)this)->BitVoicerSerial::strData = 0'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:86: note: candidates are: String& String::operator=(const String&)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:87: note: String& String::operator=(const char*)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:88: note: String& String::operator=(const __FlashStringHelper*)

C:\Program Files (x86)\Arduino\libraries\BitVoicer11\BitVoicer11.cpp:167: error: ambiguous overload for 'operator=' in '((BitVoicerSerial*)this)->BitVoicerSerial::strData = 0'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:86: note: candidates are: String& String::operator=(const String&)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:87: note: String& String::operator=(const char*)

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:88: note: String& String::operator=(const __FlashStringHelper*)

This report would have more information with

"Show verbose output during compilation"

enabled in File > Preferences.

Found the solution just put "" instead of NULL for strData in BitVoicer11.cpp

leandro4b (author) 1 year ago
I added a wireless module to this project. Here is the Instructable link: http://www.instructables.com/id/Wireless-Audio-Streaming-and-Speech-Recognition/
ibrazzis leandro4b10 months ago
hello
am called ibrahim and i live in Rwanda
very interested by you technology but am stacked by two things:
- product key for bitvoicer
- sketch_nov15g:4: error: 'BitVoicerSerial' does not name a type
what can i do? the library of bitvoicer i think is missing so that the codes can work to arduino
waiting for your replay
leandro4b (author)  ibrazzis9 months ago
Well, you will have to buy the product key. The library is in the BitVoicer installation folder.
1-40 of 48Next »