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灯。

猜你喜欢

转载自blog.csdn.net/m0_61543203/article/details/126194116