用LD3322实现嵌入式语音控制的儿童玩具*
2018-12-07,,,
,,,
(长沙师范学院 信息科学与工程学院,长沙 410100)
引 言
随着传感技术、计算机科学、人工智能等相关学科的迅速发展,玩具机器人正向智能化方向发展。智能玩具机器人控制系统包括计算机技术、自动控制技术、传感器技术和人工智能技术等。目前,开发模块化、功能强大、价格低廉的智能语音互动玩具已成为全国智能玩具的发展趋势[1],而智能语音互动玩具在国内外市场占有巨大的市场[2]。在全球,智能玩具领域几乎被美国、日本等国家垄断。在中国,智能玩具是一个新兴的领域,语音控制玩具将为玩具市场注入新的活力。
1 系统结构与总体方案
本系统的设计主要以STC89C52单片机、LD3320语音芯片构成的ASR M08-A语音识别模块为核心,设计实现了具有语音交互[3]的智能玩具,它能够在蓝牙和语音两种方式的控制下实现前进、后退、左转和右转等功能。蓝牙和语音两种控制方式增强了人与玩具车的交互性,操作方便、实用性强。本设计主要由5大功能模块组成:
① 语音识别模块,可以实现与小朋友的简单对话、语音控制播放儿歌、古诗等。语音控制小车移动(语音指令是:“直走”、“后退”、“左转”、“右转”、“结束”)。
② LED灯阵模块,是玩具的小眼睛,实现开关机闪烁效果以及视觉美感。
③ 电源模块,在底盘小车的上面做成两个连在一起的圆柱形腿,脚下直接连接轮子(圆柱形内放置电池)。
④ 蓝牙控制模块,手机APP通过蓝牙通信方式控制玩具的简单动作[4](比如滑动、走向等)。
⑤ 避障模块设置超声波检测传感器用于检测玩具运动方向上的障碍物,同时提供避障信息。
2 系统硬件设计
设计一个实用的智能儿童玩具,不仅要求包含一定的智能功能,还要求在使用时具有交互友好性,运行稳定性和可靠性,同时还具备经济性。本设计中的玩具具有运动功能(前进、后退、左行、右行),为了使玩具能够稳定运行和成功实现语音控制功能,对抗干扰的能力就要求比较强,这样的玩具才能在不同的环境稳定移动,玩具中的语音交互功能更适合宝宝的使用。
2.1 硬件总体设计
本玩具系统设计的主控电路核心器件为STC89C52单片机,运动控制功能由其完成[5],开启和复位玩具由按键完成。蓝牙模块构成玩具的移动系统(前进、后退、左行、右行、避障等),另外单片机控制语音识别模块实现语音控制玩具播放音频或者作出回应以及LED灯的闪烁。
玩具运动功能采用四轮驱动来调节轮子的转速,从而达到控制转向的目的。将单片机主控芯片和语音识别模块通过铜柱的支撑装在底盘上面,当人发出语音操作指令并被语音识别模块检测到时,系统做出反应,如唱歌、放古诗、简单问答等。系统总框架图如图1所示。
图1 系统总框架图
2.2 语音和蓝牙控制
本设计是一个可以语音控制的玩具机器人,语音识别部分主要实现的功能是:首先实现与小朋友之间的简单问答的指令检测;其次通过检测不同语音指令进入不同控制模式,包括蓝牙控制和语音控制;最后,语音识别模块检测到不同的语音指令,从而控制玩具电机的转速和正反转方向,使玩具实现左转、右转、前行和后退。
蓝牙模块:利用手机APP发送信息实现单片机对玩具电机的控制,蓝牙模块主要作用是智能无线数据传输,利用主从一体功能来实现手机蓝牙控制玩具动作。该模块主要是对电机驱动模块和蓝牙模块的传输数据进行分析,从而控制电机的转速、启动和停止以及蓝牙无线数据的传输。
语音模块:首先对接收到的语音信号进行一系列的运算处理,然后和关键词列表中所有的关键词进行对比,对每一个关键词的相似度打分,得分最高的那个关键词就认为是正确的,最后输出。这样,当接收到相似度比较高的语音时,可以通过设置“无用关键词”把它过滤掉,这是一个非常有效的手段,设置“无用关键词”越多,误识别率越低,但是不可避免地要牺牲关键词列表地址。语音模块串口与51单片机相连时的接线方法如图2所示。
图2 语音串口接线图
3 系统软件设计
软件设计分为两个部分,即主程序框架部分和语音控制部分。主控部分整个系统的软件流程如图3所示,主要是模式选择和蓝牙控制部分。当主程序开始时,首先是对单片机、蓝牙、语音识别模块进行初始化,保证各个部分都能正常工作。对单片机设定其工作模式、开启外部中断,在语音模块有识别结果输出的时候会输出一个中断信号,这时单片机就可以读取相关寄存器的识别结果了。
图3 系统主程序流程图
3.1 语音识别原理
在嵌入式系统中,语音识别的难点主要在于语音信号的动态性和连续性。主流的语音识别技术原理如图4所示。
图4 主流的语音识别技术原理图
在本设计中,与主流的语音识别技术相同,但是语音参考库没有主流识别技术丰富。本设计的语音参考库是自己建立的,首先通过ASR设置器(界面如图5所示)将需要的指令写入语音识别模块中,进行语音训练,提取该指令的十六进制特征参数。其次将提取的特征参数与自建库中的参数比较,输出相符的参数完成语音识别。最后将参数传送至STC89C52单片机中执行相应的操作。还可以利用ASR设置器中的“添加关键词”写入系统所需的语音指令,通过查询关键词获取语音库。
图5 ASR设置器界面图
3.2 语音识别模块的波特率设置
波特率是指串行端口每秒内可以传输的波特位数。在使用串口做通信时,一个很重要的参数就是波特率,只有上位机和下位机的波特率一样,才可以进行正常通信。通过查找语音识别模块的使用手册可知,模块支持1 200、2 400、4 800、7 200、9 600、14 400、19 200、38 400、57 600、115 200 Baud共10种波特率。如果波特率较低,ASR设置器界面显示的中文会出现乱码,同时STC89C52单片机通常使用9 600 Baud的波特率,所以波特率设置为9 600 Baud。
语音识别模块的波特率设置可以直接通过ASR设置器中的波特率设置模块直接设置,发送指令“Baud,9600,$”。
单片机会以16倍波特率的速度进行采样,而在本设计中用到的是10位异步收发方式,因此要将SM0置0,SM1置1。而其中的10位有8位数据位,第一位和最后一位是发送数据的起始与结束。采用高的波特率就不会出错。单片机的串行接口有4种工作方式,对应三种波特率。由于输入的移位时钟来源不同,所以各种方式的波特率计算公式也不相同。
3.3 语音识别模块的两种检测模式
(1)普通检测模式
同一时间内,50条关键词的任何一条都能被识别到,但是这种方式如果“垃圾关键词”吸收工作做得不好,会带来一定的误识别。
(2)口令式检测模式(又称密码式检测)
ASR M08-A 模块对关键词的返回值“254”做了特殊的处理,返回值“254”作为整个关键词列表的识别入口。在口令式检测模式下,写入一条关键词,然后将其返回值设定为“254”,这条关键词便成为了“口令关键词”。这时候,只有在识别到此“口令关键词”之后的8 s内才能对其他关键词进行识别,8 s过后,入口关闭,除了“口令关键词”能再被识别之外,其他所有关键词均不能被识别。
由于口令检测模式有效降低了误识别带来的严重后果,大大提高了系统的可靠性,使得语音识别模块能应用在普通的智能控制系统当中,缺点是响应一个动作需要讲两个关键词。
3.4 语音识别模块初始化
图6 语音检测流程图
语音识别模块初始化程序如下:
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不倍增
TMOD=0x20;
//定时器1工作于8自动重载模式,用于产生波特率
EA=1; //打开串口中断
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //设置波特率为9 600
TR1=1;
本设计是一个可以语音控制的玩具机器人,因此语音识别部分主要实现的功能包括:① 实现与小朋友之间的简单问答的指令检测;② 通过检测不同语音指令判断是进入蓝牙控制模式还是语音控制模式;③ 语音识别模块检测到不同的语音指令,从而控制玩具电机的转速和正反转方向,使玩具实现左转、右转、前行和后退。图6为语音检测模式流程图,表1为语音识别模块的返回值列表,表2为语音识别模块指令集。
表1 语音识别模块返回值表
表2 语音识别模块指令集
4 系统测试
① 电机正反转测试:开机后,玩具按照程序设定的模式运动,即来回跑动。
② 语音功能测试:开机后,ASR M08-A语音模块上电,发出指定的语音指令,玩具能做出相应的回答。
③ 语音控制玩具运动测试:开机后,ASR M08-A语音模块上电,玩具轮子不转,当发出“直走”的语音指令时,可以观察到轮子(按规定的前方)正转;当发出“后退”的语音指令时,可以观察到轮子反转;当发出“左转”指令时,两边轮子的转速不同(左轮大于右轮),从而开始左转;同理,发出“右转”指令时,开始右转。当发出的语音指令不是所设定的指令时,轮子停止转动,原因是正转、反转同时进行导致的轮子不动。
④ 蓝牙控制测试:开机后,首先由语音指令进入蓝牙模式,然后可以实现蓝牙控制。
⑤ LED模块测试:开机后,由语音指令可以实现LED灯阵的功能。