前言
今天,我将分享一次成功将Arduino与LU-ASR01语音识别模块进行通信的实验经历。这次实验不仅加深了我对语音识别技术的理解,也让我体验到了DIY项目的乐趣。希望通过这篇博客,能为同样对这方面技术感兴趣的朋友提供一些参考和帮助。
其中参考了一位博主分享的案例,动手过程中也是遇到了很多问题,但只要付出耐心,问题一定会迎刃而解。参考案例如下: https://www.toymoban.com/news/detail-446770.html
实验准备
硬件准备
- Arduino开发板: 我使用的是Arduino Uno,因其易用性和广泛的社区支持。
- Lu-Asr01语音识别模块: 该模块支持多种指令识别,可用图形编程烧录程序,是入门语音识别的不错选择。
- 连接线4条: 杜邦线即可,用于连接Arduino与lu-asr01模块。
软件准备
- Arduino IDE: 用于编写和上传代码到Arduino开发板上。官网在这:https://www.arduino.cc/en/software
- 天问Block: 图形编程软件,内含丰富的语音识别库文件,可以简化开发过程。官网在这:http://www.twen51.com/new/twen51/index.php
- CH340串口驱动安装: 要上传程序,需要这个驱动识别端口号。官网在这:https://www.wch.cn/downloads/CH341SER_EXE.html
实验步骤
1.编写代码
Arduino程序:
- 打开Arduino IDE,创建一个新项目。注意项目路径中尽量不要含有中文,可能会引起报错。
- 编写代码,通过串口接收lu-asr01模块发送的识别结果,并作出相应处理。这里需注意设置Arduino的串口波特率与lu-asr01模块相匹配(我设置的9600)。
#include <HardwareSerial.h>
#include <SoftwareSerial.h>
const int PIN_SW = 13;//这里我用的是开发板上的板载灯,没有多余LED灯展示
char TX;
char RX;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(PIN_SW, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0)
{
RX = char(Serial.read());
if(RX == 0x21)
{
Serial.write(RX);
digitalWrite(PIN_SW, HIGH);
}
if(RX == 0x22)
{
Serial.write(RX);
digitalWrite(PIN_SW, LOW);
}
if(RX == 0x20)
{
Serial.write(RX);
for(int i=0;i<3;i++)
{
digitalWrite(PIN_SW, HIGH);
delay(100);
digitalWrite(PIN_SW, LOW);
delay(100);
}
}
delay(2);
}
}
- 上述代码是通过IDE工具烧录到Arduino开发板,后面讲烧录细节。
Lu-Adr01语音识别模块程序:
- 打开天问Block,新建项目,程序编写如下:
- 可以先添加一个鹿小班的官方扩展,在页面的左下角的添加扩展里,点击进去,选择这个添加即可。
- 编写图形化代码后,先在右上角生成模型后,在进行编译下载。注意若没有自动识别端口号,需要手动选择匹配。
- 另外,上传这个程序时,要把Arduino IDE工具的串口监视器关闭,可能会占用串口,编译下载会提示串口打开失败!
2.上传代码
- 这里我遇到了一个恶心的上传问题,不知道是我IDE的问题(因为我升级成最新版本了)还是我串口的问题。在上传代码是会弹出这样的报错:
经过检查,端口号和开发板已经选好了。
后来发现是需要打开串口监视器(在右上角图案打开),可能新版本的IDE监测到代码有调用串口通信函数,需要打开串口监视器吧,就可以正常上传成功。
硬件连接
- 这里使用TX和RX端口,LU-ASR01则使用IO6端口作为发送数据的软TX,IO7端口作为接收数据的软RX。由Arduino提供5V电源给LU-ASR01(下图中的橙棕色2线,橙色电源线;棕色接地),Arduino的TX连接到LU-ASR01的IO7端口(软RX),Arduino的RX连接到LU-ASR01的IO6端口(软TX),连接图如下:
- 注意:我这里用了Arduino扩展板,所以就连接到扩展版的UART通信区;若是Uno板子就按照上述连接,TX和RX需要反接。
测试
- 通过向LU-ASR01模块说出预设的指令,观察Arduino IDE的串口监视器是否输出相应的识别结果。