一、主要功能
系统运行后,当对语音模块说出“小易小易”时,收到回复信息后,开始说出控制指令,项目中已设计:开门、关门、开灯、关灯、晚安指令,每当说控制指令前,必须先说“小易小易”,等待回复后才能继续。如果没有回复,系统会提示要说对应的指令。对应指令可控制舵机和LED的开关。
二、硬件资源
1.硬件准备
项目所需要的硬件资源如下:
1、51单片机开发板1个
2、SG90舵机模块1个
3、LD3320A语音识别模块1个
4、USB线1条(用于供电和程序下载)
5、杜邦线若干
6、JQ8900-16P语音模块1个
2.硬件连接
SG90舵机模块-->单片机IO
MOTOR-->P21
VCC-->5V
GND-->GND
LD3320A语音识别模块-->单片机IO
5V-->5V
GND-->GND
TXD-->P30
RXD-->P31
JQ8900-16P语音模块-->单片机IO
VPP-->P11
GND-->GND
VCC-->5V
SPK-/SPK+-->喇叭
三、软件设计
1.软件结构
2.主要代码
//语音识别控制
void speech_recognition_control(void)
{
u8 len=0;
u8 i=0;
u8 res=0;
steer_control(0);
while(1)
{
if(UART_RX_STA&0x8000)//判断串口是否接收完数据
{
len=UART_RX_STA&0X3FFF;
for(i=0;i<len;i++)
UART_SendData(UART_RX_BUF[i]);
UART_RX_BUF[len]='\0';
if(strcmp((const char*)UART_RX_BUF,"收到")==0)sys_str.sta=1;
else if(strcmp((const char*)UART_RX_BUF,"请叫小易小易")==0)sys_str.sta=2;
else if(strcmp((const char*)UART_RX_BUF,"没听清")==0)sys_str.sta=3;
else if(strcmp((const char*)UART_RX_BUF,"开门")==0)sys_str.sta=4;
else if(strcmp((const char*)UART_RX_BUF,"关门")==0)sys_str.sta=5;
else if(strcmp((const char*)UART_RX_BUF,"开灯")==0)sys_str.sta=6;
else if(strcmp((const char*)UART_RX_BUF,"关灯")==0)sys_str.sta=7;
else if(strcmp((const char*)UART_RX_BUF,"晚安")==0)sys_str.sta=8;
memset(UART_RX_BUF,0,len);
UART_RX_STA=0;//清除标记,等待下次接收
}
//根据语音识别播放
if(sys_str.sta)
{
play_song_num(sys_str.sta);
switch(sys_str.sta)
{
case 4: steer_control(1);break;//开门
case 5: steer_control(0);break;//关门
case 6: LED=0;break;//开灯
case 7: LED=1;break;//关灯
}
sys_str.sta=0;
}
}
}
//应用控制系统
void app_control_sys(void)
{
time0_init();//初始化定时器0
lcd12864_init();//LCD12864初始化
UART_Init();
ES=1;
while(1)
{
speech_recognition_control();//语音识别控制
}
}
四、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
作者B站链接:https://space.bilibili.com/444388619
可提供手把手教学服务,资料获取请联系作者QQ:3443792007
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。