资源预览内容
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
地图地图“会唱歌会唱歌”在学习地理和音乐的知识时,我的脑海里突然冒出一个想法:能不能制作这样一 块地图板,在说出其区域名称后,该区域的 LED 灯立即闪烁,并播放该区域的代表民歌? 在家人的支持下,我开始了有关语音交互和民歌播放地图板的制作实践。 一、构思设计 语音芯片使用 LD3320 Board,开发平台使用入门级的双核开源平台 Fireduino IDE, 存储器用 Micro SD Card(TF-Card)模块,再加上一个音频输出模块和小喇叭。结构如图 1 所示。 软件流程的构思如下:对着语音模块说出一个省级地区的名称,然后播放该地区的 代表民歌,与此同时,地图板上对应的省份区域内的 LED 灯开始闪烁。当使用者说出“暂 停”后,停止播放当前歌曲并等待下次语音播放。 二、硬件设计 硬件设计中的主控板选择了 Fireduino 控制板。这块控制板拥有双核 Cortex-M3 处 理器,集成高质量音频 Codec 和 Wi-Fi 模组,具备良好的 IOT 扩展性能,能完美兼容 Arduino IDE 和 Arduino 标准接口,并支持 FireBlock 图形化编程软件。 一块 Fireduino 控制板=2Arduino UNO+Wi-Fi 模块+音频模块+RTC 模块+Flash 模块。主芯片采用 Rockchip 双核 Cortex-M3 主控芯片 RKNanoD,它拥有超高的运行频率, 并且板载 8M 字节的大容量 SPI Flash。 硬件设计中的语音识别部分采用 LD3320 Board 模块。该模块采用 SPI 通信方式,其 芯片具有非特定人语音识别技术,不需要用户进行录音训练,只需把识别的关键词以字符串的形式传送进芯片,即可在下次R 别中生效。 比如,用户在 51 等 MCU 的编程中简单地通过设置芯片的寄存器,把诸如“你好”的 识别关键词的内容动态地传入芯片,芯片就可以识别设定的关键词语了。同时,可在用户 自由编辑的 50 条关键词语中进行识别,终端用户可根据场景需要,随时编辑和更新这 50 条关键词语的内容。 以上两大模块只需使用 9 根杜邦线连接,再将 SPI 控制线的 3 根线一一对应接上, SS 芯片选择线接 9 号引脚,IRQ 外部中断引脚接 2 号引脚,WR 串并口选择线接地选择 SPI 方式控制即可。 三、软件程序 以江苏省为例。对着语音模块说出“江苏”,此时开始播放歌曲茉莉花 ,播放过程 中说出“暂停”,暂停当前歌曲,再说出“继续”,继续播放歌曲,说出“停止”,终止播放当 前歌曲。终止播放歌曲后,说出其他省份才开始播放当地代表歌曲。 1.伪指令 需要初始化的内容包括:串口、TF 卡功能、Audio 功能、LD3320 模块。 添加识别语句:如“江苏”等各省份的名字。 死循环处理:如果说出“程序开始”,那么跳出死循环,否则继续等待。 2.主程序 判断选择(识别语句)判断省份播放民歌并驱动闪烁显示若暂停,停止解码若继续,恢复解码播放结束退出循环。 Fireduino 关于 Audio 的例程中有针对查询解码的例程,且暂停、恢复、停止的解码 都有相关的函数,只需按照伪程序的思路编写就可以完成。 四、调试过程 Fireduino 控制板与电脑的 USB 连接,根据官方维基百科的提示来安装驱动,上位 机 Arduino IDE 选择端口后下载 Blink 例程,可以看到板上的 LED 灯开始闪烁,说明程序 下载正确。再插上 TF 卡和小喇叭,根据官方的播放音乐驱动进行循环播放。 1.调试 TF 卡和小喇叭 先在 TF 卡中下载一个名为 test.mp3 的音频文件,然后模仿官网例程操作。 以上程序的说明为: (1)初始化串口,以便后续打印调试信息。 (2)初始化 TF 卡,后续需从 TF 卡读取音乐文件用于解码。 (3)初始化 Audio,并且采用 AUDIO_SD 方式。 (4)如果初始化 Audio 成功,播放 MP3 文件。 短暂调试过后,如果听到声音,说明 TF 卡和小喇叭已调试成功,然后开始调试 LD3320 芯片模块。 2.使用 Arduino UNO 板对 LD3320 进行开发 接好线后,下载语音模块的官方例程,再接一个 LED 灯在 8 号脚上,编译程序并下 载好后,对着模块说出“开灯”,LED 灯点亮,说明例程没有问题。说出“关灯”,LED 灯熄 灭。 在 Arduino UNO 调试成功后,再将 LD3320 与 Fireduino 连接并调试。 3.再次调试 在详细检查官方的驱动文件后,发现官方的 Arduino 驱动采用模拟 SPI 的方式进行, 且函数名字也相同,与 Fireduino 的 SPI 函数有冲突。为解决这个问题,将 LD3320.h 和 LD3320.cpp 的驱动文件中关于 SPI 部分的文件采用硬件 SPI 的方式后,才将程序烧录进去。 之后多次调试还是没有成功。 经过反复实验后发现,Fireduino 是 ARM 内核,且运算频率高达 200MHz,delay()函数过于短暂,LD3320 对不上 Fireduino 的 SPI 握手协议。为解决这 个问题,需增加驱动中需要延时的地方的时长,并反复调试直至成功。 至此,Fireduino 的 TF、Audio 与 LD3320 全部调试成功。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号