快捷搜索: 王者荣耀 脱发

Arduino的智能语音输入实现——Arduino与LU-ASR01的连接

Arduino是目前比较流行的一个基于易于使用的硬件和软件的开源电子平台,它可以使用现有的电子元件实现智能电子控制。LU-ASR01是一款支持离线语音识别的开发板,它可以通过识别中文语音输入,进行相应的处理。本文通过连接Arduino和LU-ASR01,利用LU-ASR01进行语音识别,然后通过串口通信方式实现Arduino的中文语音输入,再用Arduino对连接的其它电子设备进行相应的操作。

LU-ASR01语音识别的开发板一共8个I/O,1路输出的串口TX,1路传感器接口DHT。其中I/O1-I/O6可以输出PWM信号,I/O7、I/O8不能输出PWM信号,开发板采用USB接口进行供电,并可进行程序的烧录,板子的外观如下图:

本次实验连接Arduino UNO和LU-ASR01后,通过呼叫“打开灯光”,Arduino板上连接的LED灯就会被点亮,呼叫“关闭灯光”,则Arduino板上连接的LED灯会被熄灭。

硬件连接非常简单,因为采用串口通信方式,所以我们首先连接LU-ASR01的TX口到Arduino的RX口,然后在Arduino的D13口接上一个LED管的正极,负极接到相邻的地。连接图如下:

下面说一下程序的实现方法。首先我们对LU-ASR01进行编程,通过“天问block”的图形化编程实现。程序编写和烧录过程略过(注意一点:烧录程序前,务必断开二块板子TX到RX连的连接线),读者可自行查看相关资料。下面给出在“天问block”上的完整程序:

然后我们将下面的程序下载到Arduino UNO板,完整程序如下:

/*

Arduino与ASR01语音识别模块的串口通讯实验

*/

// 定义引脚

const int LedPin = 13; // led连接的引脚,作为LED灯的正极

String st=""; //串口读取的字符数据的字符串变量

//初始化

void setup() {

Serial.begin(9600); //设置串口波特率9600

pinMode(LedPin, OUTPUT); //设置LedPin

}

void loop() {

st="";

while(Serial.available() > 0){//当串口缓冲区有数据

st+=char(Serial.read());//将缓冲区数据累加读入st

delay(2);

}

if(st.length()>0){//st不为空

if(st=="t001") digitalWrite(LedPin, HIGH);//st为“t001”则LedPin置高电平,即开灯

if(st=="t002") digitalWrite(LedPin, LOW);//st为“t002”则LedPin置低电平,即关灯

if(st=="hello"){//st为“hello”则Led灯闪3下

for(int i=0;i<3;i++){

digitalWrite(LedPin, HIGH);

delay(100);

digitalWrite(LedPin, LOW);

delay(100);

}

}

}

}

最后连接二块板子TX到RX连的连接线,通上电源后,喇叭会发出“我们正在进行实验,请呼唤我“不赦先生”唤醒我”。然后我们呼叫“不赦先生”,LU-ASR01板会通过串口发出’hello’,Arduino收到’hello’后,LED灯会闪3下后熄灭。接着我们可以呼叫“打开灯光”,LU-ASR01板会通过串口发出’t001’(同时播报:已请阿杜打开灯了),Arduino收到’t001’后,就会点亮LED灯,我们可以再呼叫“关闭灯光”,LU-ASR01板会通过串口发出’t002’(同时播报:已请阿杜关闭灯了),Arduino收到’t002’后,就会熄灭LED灯。

经验分享 程序员 微信小程序 职场和发展