基于语音识别模块控制机器人动作时,首先需要通过语音配置上位机,把需要的关键字让语音识别模块识别。一旦发出匹配的语音,语音识别模块就会通过串口发出4个字节的匹配地址命令,底层控制板接收到4个字节的匹配信息后,最终做出判断该执行什么样的动作。
下面举一个例子做说明。
如果要通过语音识别模块控制机器人左转或者右转,即发出左转命令,机器人就会左转,发出右转命令,机器人就会右转,那么该如何操作呢?
首先使用上位机进行关键字匹配,匹配代码如下:
0:11 22 33 44:xiao mi za::
1:A5 07 07 5B:zuo zhuan:p14=1:01
2:A5 08 08 5B:you zhuan:p14=0:01
通过上面介绍的方法将下载到语音识别模块中,然后把语音识别模块设置为串口输出模式。
接下来需要对底层控制板进行编程,根据识别信息控制机器人运动。底层控制板的程序代码如下:
/*
语音识别模块使用模拟串口
* RX is digital pin 2 (connect to TX of other device)
* TX is digital pin 3 (connect to RX of other device)
通过语音模块控制机器人左转或右转
*/
#include 〈Software Serial.h〉
Software Serial my Serial(2, 3);// RX, TX
Char addr[4];
int INA = 4; //电机 A 正反转控制端
int PWMA = 5;//电机 A 调速端
int INB = 7; //电机 B 正反转控制端
int PWMB = 6;//电机 B 调速端
void motospd(int sp1,int sp2) //电机速度控制函数,括号内分别为左右电机速度值
{ //范围-255~+255,正值为正转,负值为反转
if(sp1〉0)
digital Write(INA, HIGH);
else
digital Write(INA, LOW);
if(sp2〉0)
digital Write(INB, HIGH);
else
digital Write(INB, LOW);
analog Write(PWMA,abs (sp1));
analog Write(PWMB,abs (sp2));
}
void setup(){
my Serial.begin(9600);
}
void loop(){
if(my Serial.available()==4)//接收到4个字节
{
Addr[0] = my Serial.read();
Addr[1] = my Serial.read();
Addr[2] = my Serial.read();
Addr[3] = my Serial.read();
}
if(addr[1] == 0x07)
{
motospd(50,100);//左转
}
else if(addr[1]==0x08)
{
motospd(100,50);//右转
}
else motospd(100,100);//直行
delay(50);
}
在这个例子中,主要判断第二个字节就可以判断出识别的是哪一个声音,因为左转(A5 07 07 5B:zuo zhuan:p14=1:01)和右转(A5 08 08 5B:you zhuan:p14=0:01)的第一个字节全部为“0x A5”,无法判断,而第二个字节,一个为“0x08”,一个为“0x07”,则很容易判断出来。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。