我的创客初体验

    李文浩

    

    

    

    低学龄孩子写作业往往是一件令家长头疼的事。孩子们写一会儿作业就喊着要吃东西、喝水或是上厕所,不能高效安静地完成作业,家长们看着只能干着急。孩子小,注意力不集中是其中的原因之一。那么,怎样训练孩子的注意力,使其能够专注地写作业呢?笔者设计了一款培养孩子专注力的作品,现分享如下。

    ● 设计思路

    具体的设计思路是:①在孩子准备写作业前,提醒孩子做好准备。②孩子写作业过程中,若有交互需求,给3次机会和孩子交流,并温馨提醒孩子专心写作业。③倒计时。默认给孩子20分钟时间专心写作业,倒计时时间到了,询问作业写好了没有,若孩子作业写完了,给予孩子表扬,鼓励孩子的进步;若孩子作业没有完成,也要用激励性的语言给孩子加油,同时提醒孩子休息10分钟,为下一段学习时间做好准备。④其他简单的语音交互功能。⑤简单娱乐功能,如语音点播歌曲。

    ● 系统硬件设计

    1.硬件准备

    (1)Arduino主控板

    笔者选择了Arduino平台的Nano板作为主控板。Nano是一款基于ATmega328P的开发板,它有14路数字输入输出口,6路模拟输入口,支持串口、I2C接口和SPI接口三种通信方式,方便外接各种传感器,小巧而又便宜,适合编程造物。为了方便调试和使用,系统还选配了一块扩展板(如图1)。

    (2)语音识别模块

    自动语音识别技术(Automatic Speech Recognition)是一种将人的语音转换为文本的技术,简称ASR。本作品大量使用了语音识别功能,笔者选择了图2这款语音识别模块,它是一款非特定人语音识别模块,只需要在主控MCU的程序中设定好要识别的关键词语列表,并动态地把这些关键词语以字符的形式传送到芯片内部,就可以对用户说出的关键词语进行识别。它具有不需要用户事先训练和录音、不需要联网就可实现离线语音识别、响应速度快等优点。该模块可以设置50个词条,每个词条可以是单字、词组或短句,长度不超过10个汉字或者79个字母。该语音识别模块集成了LD3320芯片以实现汉语语音识别,有循环检测模式、口令检测模式和按钮检测模式三大识别检测模式,适应不同的应用场景。它采用了I2C总线接口,节省了主控板的IO口,能够方便地与主控芯片进行通信。

    (3)DS1302时钟模块

    作品需要为孩子实时呈现时间,还需要经常使用倒计时功能,所以选用了一款非常实用的时钟模块DS1302(如图3),它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,采用三线接口与主控板进行同步通信,可以为系统提供准确的时间信息,而且断电不掉时。

    (4)TM1650四位数码管(带冒号)

    为方便显示实时时间,系统选用了数码管(如图4),而TM1650四位数码管采用I2C总线接口,只占用单片机两个IO口,减少了主控板IO口的占用。

    (5)MP3语音模块及TF卡

    语音输出是语音交互必不可少的,为节约成本,作品中选用了如图5所示的MP3语音模块,使用前将需要输出的语音内容列出清单,使用语音合成工具软件生成MP3文件,需要播放语音时用主控板按文件名的方式控制本模块播放TF卡中对应的MP3文件。

    (6)微型数字功放模块

    MP3模块播放的声音较小,只能供耳机使用,不能驱动喇叭,为驱动小喇叭播放交互的语音,系统中使用了如图6所示的微型数字功放模块。它是D类功放,效率极高,可配4-8欧姆2-8瓦的喇叭。

    (7)小喇叭

    如下图页7所示是4Ω3W的小喇叭。

    2.硬件連接

    硬件连接如下页图8所示。为方便各功能模块的连接与调试,笔者选配了Nano扩展板,步骤如下:①将Nano主控板插到扩展板中;②将各功能模块接入扩展板的引脚上;③将DS1302时钟模块的CLK、DAT和RST引脚分别接入扩展板数字接口11、10和9引脚;④将MP3语音模块RX、TX引脚分别接入扩展板串口的TX、RX引脚;⑤将MP3语音模块的L、R引脚分别接入微型数字功放的L、R引脚;⑥将各模块中的5V、VCC引脚接入扩展板中对应的5V引脚;⑦将各模块中的GND引脚接入扩展板中的GND引脚。

    由于扩展板只有一个I2C通信接口,但TM1650四位数码管模块和语音识别模块都使用了I2C通信方式,经查阅资料后笔者发现,扩展板上I2C接口的SDA、SCL引脚实际上是和A4、A5引脚连通的,所以将TM1650模块的SDA和SCL引脚分别接入扩展板的A4、A5引脚,将语音识别模块的SCL、SDA引脚分别接入扩展板的对应SCL、SDA引脚,主控板依据它们的地址访问这两个模块,互不干扰。

    由于Nano板上传程序是通过串口与电脑通信的,而系统中MP3模块也是通过串口通信,在上传程序时会出现冲突。在上传程序时,将MP3模块的电源线暂时从扩展板上拔下即可解决串口通信冲突的问题。

    3.造型设计

    为使作品兼具美观性、便携性,作者还为作品设计了一个3D造型,并将造型3D打印出来。作者选用了3DONE这款软件进行3D造型设计,3DONE是一款专为中小学素质教育开发打造的3D设计软件。该软件实现了3D设计和3D打印软件的直接连接,并提供丰富的案例库包括本地磁盘和网络云盘资源,为中小学生提供一个简单易用、自由畅想的3D设计平台。图9是作品的3D造型设计效果图,它是由宠物鸡造型[注],六面体盒子和盒子后盖三个部分组成的,其中六面体盒子用来安装各种电子模块,在设计时先用游标卡尺精确测量各电子模块的尺寸大小,再在盒子内设计各种卡槽和孔眼,方便后期的模块的安装调试。

    ● 系统软件设计

    系统的软件设计基于Arduino IDE软件开发环境,使用C/C++编程语言。Arduino有丰富的库文件以供开发使用,利用库文件简化了程序开发工作。整个系统的软件设计可以分为五个部分:初始化模块、主循环loop函数、语音识别(ASR)功能模块、其他功能函数和其他功能模块程序。下面对软件系统的各个子模块分别加以阐述。

    1.初始化模块

    初始化模块主要完成系统的初始化工作。各种标准库头文件的引入、全局变量的定义、时钟模块等各种对象的实例化都是在此模块中完成的。

    需要注意的是,系统时间的设置和词条的录入也是在本模块中完成的。但系统时间的设置和词条的录入不必每次都去编译,因此笔者这里使用了条件编译#if指令,预处理器可以在编译前处理c程序,这样的处理不会在目标代码中占用空间,减少程序运行时间。例如,要修改系统语音识别的关键字词条,只需要将“#if 0”修改成“#if 1”,编译时即可调用ASR对象的AddWords()方法将新的词条烧录进语音识别模块。

    2.主循环loop函数

    主程序主要负责整个系统的时序流程。流程大致分三个部分:①调用displayTime函数,更新数码管,按“时:分”的模式显示实时的时间信息;②调用isTime函数,判断是否有倒计时时间到了,若时间到了则语音提示“时间到”;③监听语音,并根据语音识别的结果执行相应的处理。图10为系统主程序流程图。

    3.语音识别功能模块

    幻尔科技提供了语音识别模块的Arduino参考例程,笔者将其改造成了语音识别模块头文件和语音识别模块函数实现两个子模块,方便系统的使用。

    (1)语音识别模块头文件(ASR.h)

    语音识别模块头文件主要完成ASR类的声明和宏定义,这里有语音识别模块中需要的成员函数的声明和各类地址、参数的宏定义。

    (2)语音识别模块函数实现部分(ASR.CPP)

    本模块单元的主要内容是语音识别类(ASR)的成员函数的实现。增删、修改语音识别关键字词条的成员函数AddWords()就在此模块中,当需要修改关键字词条时,只需先在此模块中增删、修改AddWords()中的词条,然后将初始化模块中的条件编译“#if 0”修改成“#if1”,编译时即可将新的词条录入语音识别模块中。在函数ASRAddWords(unsigned char idNum,unsigned char *words)中,idNum是词条对应的识别号,1~255随意设置。当识别到该号码对应的词条语音时,模块会将识别号存放到ASR_RESULT_ADDR处,等待主机读取,读取后清0,words为要识别汉字词条的拼音,汉字之间用空格隔开。

    4.其他功能函数

    为实现系统的功能,软件系统中还设计了一些其他的功能函数:①我要写作业函数(iWanttoWork)实现写作业的整个交互流程;②displayTime函数实现数码管更新显示实时时间功能;③倒计时函数(daoJiShi)和时间到了函数(isTime)实现设置倒计时时间和判断倒计时时间是否到了的功能。下页图11為“iWanttoWork”功能函数的流程图。

    5.其他功能模块程序

    本系统中还使用了其他的功能模块,诸如MP3音频模块、DS1302时钟模块、TM1650数码管模块。但由于在Arduino平台上使用这些模块很方便,相比语音识别模块这些模块的头文件和范例程序在Arduino IDE中很容易获取和使用,在此就不一一阐述了。

    在Arduino IDE上获取所需模块的库文件的方法:项目→加载库→管理库,在弹出的“库管理器”窗口中输入关键词即可搜索到所需的库文件。

    ● 结语

    本文主要对基于Arduino和语音识别(ASR)的专注力提升神器的设计与实现进行了阐述。系统的设计工作主要包括系统硬件平台的搭建和软件的实现。经过反复测试和修改,该系统在无噪或低噪环境下运行良好,可以实现非特定人声语音识别和交互,识别精度非常高,系统各项功能运行正常,能实现陪伴孩子写作业、提高孩子写作业时的专注力、帮助孩子养成良好习惯的设定目标。

    参考文献:

    [1]Arduino Nano引脚分配图及定义详解DB/[EB/OL].https://blog.csdn.net/malcolm_110/article/details/95320094,2019-7-10.

    [2]深圳市幻尔科技有限公司.语音识别模块用户手册[EB/OL].https://pan.baidu.com/share/init?surl=lThpvkv6UdTjHB7iTE6fAQ,2020-5-14.

    注:宠物鸡的造型借鉴了网络资源:http://www.aigei.com/s?q=%E5%8D%81%E4%BA%8C%E7%94%9F%E8%82%96%E5%AE%A0%E7%89%A9%E9%B8%A1&type=3d&detailTab=file