Voice / Speech Recognition Using Arduino : EasyVR, Bitvoicer & uspeech library

Although Arduino is not able to do voice recognition on its own, but there are many software modules & shields which can make it to do so. We will be going through to some of them in this Article.

Easy-VR Speech Recognition Module/Shield (Currently in v2.0 ) (Hardware)
EasyVR Speech Recognition Module: Voice / Speech Recognition Using Arduino
EASY VR mounted on Arduino UNO (Image Source: easyVR website)

Description: EasyVR is a multi-purpose speech recognition module designed to add versatile, robust and cost effective speech and voice recognition capabilities to virtually any application. EasyVR is the second generation version of the successful VRbot module and builds on the features and functionality of its predecessor. Along with features like 32 user-defined Speaker Dependent (SD) triggers and a host of built-in speaker independent (SI) commands, the EasyVR adds convenient features such as firmware update capability, 8ohm speaker output and additional SI languages.
A simple and robust serial protocol (9600 8-N-1 default) can be used to access these functions from the user's microcontroller boards. The EasyVR can be powered by anywhere between 3.3 and 5.5V, and typically consumes 12mA of current in operation.
  • A host of built-in speaker independent (SI) commands (available in US English, Italian, Japanese, German, Spanish and French) for ready to run basic controls.
  • Supports up to 32 user-defined Speaker Dependent (SD) triggers or commands (any language) as well as Voice Passwords.
  • Easy-to-use and simple Graphical User Interface to program Voice Commands to your robot.
  • Module can be used with any host with an UART interface (powered at 3.3V - 5V) .
  • Simple and robust serial protocol to access and program the module through the host board.
  • 3 GPIO lines (IO1, IO2, IO3) that can be controlled by new protocol commands (3V)
  • Audio output that supports 8 ohm speakers
  • Firmware update capability with two additional lines (/XM, /RST)
  • Sound playback feature:
    • You can make your own sound tables using Sensory QuickSynthesis4 tool
    • The new EasyVR GUI includes a command to process and download custom sound tables to the module (overwriting existing sound table)
    • Note: Default firmware has no sound table, but can Beep using sound index 0 – always available. Custom sounds start at index 1.
    • The VoiceGP DevBoard (sold seperately) is required for programming the EasyVR flash.
  •  1.77 x 0.95" (45 x 24mm)
 Additional Resources With EASYVR: 

Bitvoicer Software By BITSOPHIA (Software)

BitVoicer is the speech recognition software that brings to the microcontrollers the processing and voice analyzing power of the PC. The BitVoicer’s speech recognition technology and the use of communication standards common in the industry (Serial/UART or TCP/IP) make it extremely easy and fast to design complex speech recognition functionalities for virtually any microcontroller available in the market.

Since the UART or TCP/IP protocol is platform independent Bitvoicer can be used with any microcontrollers & microprocessor available in the market.

  These are the main features of Bitvoicer:
  • * BitVoicer can process audio captured by the microcontroller
  • * Speech recognition for the following languages:
    • # Catalan
    • # Chinese (China, Honk Kong and Taiwan)
    • # Danish (Denmark)
    • # Dutch (Netherlands)
    • # English (Australia, Canada, India, United Kingdom and United States)
    • # Finish (Finland)
    • # French (Canada and France)
    • # German (Germany)
    • # Italian (Italy)
    • # Japanese (Japan)
    • # Korean (Korea)
    • # Norwegian, Bokmål (Norway)
    • # Polish (Poland)
    • # Portuguese (Brazil and Portugal)
    • # Russian (Russia)
    • # Spanish (Mexico and Spain)
    • # Swedish (Sweden)
  • * Unlimited number of commands and sentences
  • * Advanced speech recognition schema
  • * Customizable recognition settings:
    • # Minimum Audio Level
    • # Acceptable Confidence Level
    • # Latency Period
    • # Activation Word
  • * USB/Serial or TCP/IP communication interface
  • * Supports wireless communication
  • * All-in-one graphic interface: you can design your Voice Schema, set up commands, follow the communication activity, and the speech recognition status all in one window.
  • * Arduino compatible

    Video Showing Wireless Audio Streaming and Speech Recognition with BitVoicer 
    In this project the doer connecthis Arduino Board to a WiFly module (https://www.sparkfun.com/products/10822) and stream audio to the PC, to BitVoicer (http://www.bitsophia.com/BitVoicer.aspx). Thus by using a wireless adapter, he managed to add speech recognition features without the need of a physical connection with the PC.

The complete project, source code and files can be found at:
Additionally you can also visit for more of it: http://www.instructables.com/id/Speech-Recognition-with-Arduino/ 

µSpeech Speech recognition toolkit for Arduino (Accuracy is less though)

Official Project Page: http://arjo129.github.io/uSpeech/

The uSpeech library provides an interface for voice recognition using the Arduino. It currently produces phonemes, often the library will produce junk phonemes. According to authors a  noise removal function is underway.


  • Letter based recognition
  • Small memory footprint
  • Arduino Compatible
  • 30% - 40% accuracy if based on phonemes, up to 80% if based on words.
  • Plugs directly into analogRead() port
Video For uSpeech Calibration

The developer has provide a sample project: Voice controlled LED using uSpeech


This project was done on an arduino UNO. Stick an LED into pin 13 and ground the negative lead. Any microphone with pre-amp plugged will work.

Visit For More:

Atmega 168/328 Pin Mapping



Frequency Modulation (FM) Simulation / Generation Using MATLAB Code

Frequency Modulation using MATLAB
Frequency modulation (FM) is the encoding of information in a carrier wave by varying the instantaneous frequency of the wave. The amount of frequency variation is proportional to the Modulation index. 
A major advantage of FM as compared  with AM, is improved Signal-to-noise ratio (SNR). The improvement depends on modulation level and deviation. For typical voice communications channels, improvements are typically 5-15 dB.

The following MATLAB code for generating/simulating the Frequency Modulation requires 5 inputs, amplitude of both message & signal, frequency of both message & signal & the modulation index.

MATLAB CODE For FM (Frequency Modulation)

clear all
close all
t = 0:0.001:1;
%upto 1000 samples
vm = input('Enter Amplitude (Message) = ');
vc = input('Enter Amplitude (Carrier) = ');
fM = input('Enter Message frequency = ');
fc = input('Enter Carrier frequency = ');
m = input('Enter Modulation Index = ');
msg = vm*sin(2*pi*fM*t);
%plotting message signal
title('Message ');

carrier = vc*sin(2*pi*fc*t);
%plotting carrier signal
title('Carrier Signal');

y = vc*sin(2*pi*fc*t+m.*cos(2*pi*fM*t));
%plotting FM (Frequency Modulated) signal
title('FM Signal');

Sample MATLAB Input:
Enter Amplitude (Message) = 5
Enter Amplitude (Carrier) = 5
Enter Message frequency = 8
Enter Carrier frequency = 100
Enter Modulation Index = 10

MATLAB's Output For The Above Input:
Frequency Modilation (FM) Simulation / Generation Using MATLAB Code
Frequency Modilation (FM) Simulation / Generation Using MATLAB Code
#Matlab Christmas Tree Plot- Christmas celebration through matlab way - Merry Christmas!


Simulation / Generation of PAM Signal using MATLAB Code : Pulse Amplitude Modulation Using MATLAB

Pulse-amplitude modulation (PAM), is a modulation scheme where the message is encoded in the amplitude of a series of amplitude pulses. Its an analog modulation scheme in which the amplitudes of a train of carrier pulses are varied according to the amplitude of message signal. (This code assumes that the M is very large for a M-PAM Modulation).

MATLAB Code For PAM  (Pulse-amplitude modulation)
close all;
clear all;
a = input('Enter the amplitude = ');
f = input('Enter the frequency  = ');
t = 0:0.02:2;
% for a total of 16 samples
x1 = 1;
%generation of an impulse signal
x2 = a*sin(2*pi*f*t);
%generation of sine wave
y = x1.*x2;
%modulation step
%for impulse signal plot
title('Impulse Signal');
ylabel('Amplitude ');
subplot(3,1,2) %for sine wave plot
title('Sine Wave');
xlabel('Time ');
ylabel('Amplitude ');
subplot(3,1,3) %for PAM wave plot
title('PAM Wave');

Sample Input At MATLAB Command Window:
Enter the amplitude = 4
Enter the frequency  = 3 
Output of PAM wave in MATLAB
Simulation / Generation of PAM Signal using MATLAB Code : Pulse Amplitude Modulation Using MATLAB
Simulation / Generation of PAM Signal using MATLAB Code : Pulse Amplitude Modulation Using MATLAB