最近做了一款语音识别的App,想着利用手机控制arduino实现RGB的调节,开发思路:基于讯飞语音识别做一款能识别我们语音的App,识别出语音之后,对应的文字转UTF-8编码,通过蓝牙串口通讯发送到arduino,实现对RGB的控制。
优点:
1、相对于LD3320语音识别模块成本更低
2、误识别率低
软件下载地址
硬件只需 arduino主控模块、蓝牙模块、RGB灯、可联网的智能手机,就能用语音控制RGB变换各种颜色。
具体效果请观看下面的视频
1、进入app界面后点击搜索蓝牙设备
2、找到你蓝牙设备的名称点击就可以连上了
3、连接上蓝牙之后的界面如下,先点击初始化然后才能点击开始语音识别(建议使用网络引擎)
识别的语音文件显示的是对应你点击开始语音识别按钮说的话
发送到蓝牙的数据这是对应语音文本的UTF-8编码
蓝牙模块和arduino UNO连线
//Arduino串口读取蓝牙接收到的语音文本的UTF-8编码的例程(汉字的UTF-8编码可以通过https://www.qqxiuzi.cn/bianma/guojima.php查询)
char x;//缓存函数
String comdata = "";//字符串函数
void setup() {
Serial.begin(115200);//打开串口波特率115200
}
void loop()
{
if (Serial.available() > 0)//判读是否串口有数据
{
comdata = "";//缓存清零
while (Serial.available() > 0)//循环串口是否有数据
{
x = Serial.read();
comdata += x;//叠加数据到comdata
delay(2);//延时等待响应
}
if (comdata.length() > 0)//如果comdata有数据
{
Serial.println(comdata);//打印comdata数据
}
}
}
视频中演示效果的程序
/*
* 通过语音APP控制RGB
*
*/
#include <avr/pgmspace.h>
#include <Adafruit_NeoPixel.h>
#define red 16711680 //红色
#define blue 153 //蓝色
#define yellow 16777011 //黄色
const char string_0[] PROGMEM = "E68993E5BC80E7BAA2E889B2E79A84E781AF"; //红色utf-8编码 打开红色的灯 // "String 0" etc are strings to store - change to suit.
const char string_1[] PROGMEM = "E68993E5BC80E8939DE889B2E79A84E781AF"; //蓝色utf-8编码 打开蓝色的灯
const char string_2[] PROGMEM = "E9BB84E889B2"; //黄色
const char string_3[] PROGMEM = "101X";
const char string_4[] PROGMEM = "102X";
const char string_5[] PROGMEM = "String 5";
const char string_6[] PROGMEM = "String 6";
char x;//缓存函数
String comdata = "";//字符串函数
bool flag;
const char* const string_table[] PROGMEM = {
string_0, string_1, string_2,
string_3, string_4, string_5, string_6
};
char buffer1[30]; // make sure this is large enough for the largest string it must hold
Adafruit_NeoPixel rgb_display_3 = Adafruit_NeoPixel(16, 3, NEO_GRB + NEO_KHZ800);
void RGB_show(long x)
{
rgb_display_3.setBrightness(50);
for (int i = 1; i <= 16; i = i + (1))
{
rgb_display_3.setPixelColor(i - 1, x);
rgb_display_3.show();
}
}
void setup()
{
Serial.begin(115200);
rgb_display_3.begin();
flag = false;
rgb_display_3.setBrightness(0);
for (int i = 1; i <= 16; i = i + (1))
{
rgb_display_3.setPixelColor(i - 1, 0x000000);
rgb_display_3.show();
}
}
void loop()
{
if (Serial.available() > 0)//判读是否串口有数据
{
flag = true;
comdata = "";//缓存清零
while (Serial.available() > 0)//循环串口是否有数据
{
x = Serial.read();
if (x != '%' )
{
comdata += x;//叠加数据到comdata
delay(2);//延时等待响应
}
}
if (comdata.length() > 0)//如果comdata有数据
{
Serial.println(comdata);//打印comdata数据
}
}
if (flag)
{
for (int i = 0; i < 7; i++)
{
strcpy_P(buffer1, (char*)pgm_read_word(&(string_table[i])));
if (String(buffer1) == comdata)
{
Serial.println(String(buffer1));
Serial.println(i);
switch(i)
{
case 0:RGB_show(red);break;
case 1:RGB_show(blue);break;
case 2:RGB_show(yellow);break;
}
}
}
flag = false;
}
}
智能语音APP控制arduino实现RGB灯的控制