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板,完整程序如下:
// 定义引脚
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灯。