彭井花,胡永森
(1.阳光学院 人工智能学院,福建 福州 350015;2.福大北斗通信科技有限公司,福建 福州 350001)
随着科技的发展,语音识别技术因具有简便、快捷、灵活的优点,其在智能家居、智能汽车、虚拟/增强现实等领域日益被广泛应用[1-2].目前语音识别技术在智能家居领域的研究处于起步阶段,其应用大部分基于手机APP控制[3],但这些基于手机APP控制的智能家居系统的安装和使用较为复杂,运营维护成本比较高,不利于推广、普及化[4-5],尤其不便于老年人掌握和使用[6-7].另外,因系统能够远程控制,因此系统的安全可靠性会受到影响[8-9],并且一旦网络出现问题,系统将无法工作[10].针对智能家居系统的上述问题,本文利用语音识别、语音合成、红外编码自学习、无线通信、双层保护机制、双重模式切换、电池充放电等技术,提出了一种用于智能家居的语音控制方法,并经测试表明该方法可实现通过语音控制家居设备.
本方法将系统主要分为手持端、红外控制端和电闸端,通过433MHz的无线串口模块进行通信.手持端、红外控制端和电闸端的电路框图分别如图1、图2、图3所示.
图1 手持端电路框图
图2 红外控制端电路框图
图3 电闸端电路框图
手持端主要具有语音识别功能和语音合成功能,语音识别功能采用ICRoute公司的LD3320方案实现,而语音合成功能则采用宇音天下公司的SYN6288芯片来实现,并且使用STC11L08XE单片机作为主控芯片,方便与同为3.3V工作电压的LD3320进行通信.由于手持端具有可移动性,所以需在电路中加入相应的充电电路以及电压转换电路.本方法以聚合物锂电池作为手持端的电源,通过TP4056芯片对电池进行充电.由于无线串口模块在5V供电时能达到较大的发射功率,所以电路中还加入了SX1308芯片进行电压转换.
红外控制端的主要功能是学习并发射红外编码.因为家用电器种类较多,其控制方式也具有多样性,如有的只要完成物理上的接通与断开即可,而有的则需要借助红外线,且所使用的红外编码也不同,所以红外控制端的主要任务是学习并发射红外编码.由于红外编码的存储需要用到较大的EEPROM空间,所以选用STC12C5A16S2单片机作为主控芯片,其利用ISP/IAP(在系统编程/在应用编程)技术可将芯片内的Data Flash当做EEPROM使用,其内部的EEPROM达到了45KB,可以满足本方法的要求.红外控制端使用HX1838一体化红外接收头接收红外编码,供单片机学习,通过红外发光二极管将自学习到的红外编码发射出去.
电闸端的主要功能是对电器的开关状态进行控制,其主控芯片与红外控制端相同,使用继电器对电路的通断进行控制,继电器与单片机之间使用光电耦合器进行电磁隔离,具有较强的稳定性;使用AC-DC模块将220V交流电转化为5V直流电供电闸端使用.
语音识别技术按照不同说话人来区分可分为特定人语音识别和非特定人语音识别.本方法采取的是基于非特定人语音识别的关键词识别技术,即不需要在使用前进行相关的录音训练,系统会对所有人员发出的语音进行识别,更加方便用户使用.
本方法使用的是ICRoute公司的LD3320方案,该芯片集成了麦克风接口、A/D转换器、D/A转换器、语音识别处理器和声音输出接口等电路,不需要在电路上扩展Flash芯片或RAM芯片就能实现语音识别功能.用户只需把产品的语音指令以字符串的形式写到芯片内部的特定寄存器中,即可在下一轮识别循环中生效[5].该芯片每次识别的语音指令数量最多支持50条,每条语音指令可以是一个字,一个词语或者较短的句子,不过指令的长度最多只能达到10个汉字或79个字节的拼音串.另外,可以根据不同应用场景的需求更改LD3320的识别指令,因此本方法可以移植到不同应用环境下进行使用.
语音识别芯片LD3320的电路原理图如图4所示.其中,并行接口P0—P7经上拉电阻与MCU相连用于传输数据;为芯片控制引脚;MIC-P与MIC-N为麦克风输入引脚,其经滤波、偏置电路后与麦克风相连;EQ1~EQ3为扬声器音量控制引脚,音量放大倍数约为电阻R21与R20的比值;VREF为声音信号参考电压引脚;芯片有VDD(数字电路用电源)、VDDIO(数字I/O电路用电源)、VDDA(模拟电路用电源)3组输入电源,一般情况下使用3.3V电源即可.
图4 LD3320电路原理图
为了达到用户与设备之间的语音交互,即在识别出用户的语音指令之后,能够以语音的形式给予用户相应的反馈,本方法还应具有语音合成功能,语音合成技术采取了宇音天下的SYN6288芯片来实现.SYN6288芯片可通过异步串行口与主控单片机进行通信,接收单片机发来的待合成文本数据,实现文本到声音的转换[11].其特点有:
(1) 芯 片 支 持BIG5、GBK、GB2312和UNICODE内码格式的文本,具有较好的通用性;
(2)通过智能的文本分析处理算法,芯片可以识别待合成文本中的号码、数值、时间日期;
(3)在合成文本时可使用控制标记提高芯片处理数据的正确率,使语音合成的效果更加自然;
(4)支持16级音量调整和6级语速调整,适用于多种场合.
另外,芯片还固化有多首和弦乐与提示音,使用方便.芯片体积小,有利于节省电路板面积.由于这些特点,SYN6288具有很强的应用能力,主要可应用于排队叫号机、车载导航系统、公交车报站系统、考勤机、智能仪器仪表与智能家居等设备上.SYN6288语音合成芯片的电路原理图如图5所示.由于该芯片有多组外接电源,为了消除来自电源的干扰,保证供电的稳定性,本设计在每组电源上都并联了电容.
图5 SYN6288电路原理图
虽然SYN6288与主控单片机之间的通信使用的是用异步串行口,但其收到的数据必须是反相的,因此在单片机与SYN6288之间加入了三极管反相电路,用于将上位机发送的数据取反.三极管反相电路原理图如图6所示.
图6 三极管反相电路原理图
为了控制通过红外线进行操作的电视、空调等电器,本方法还设计了红外学习/发射电路,其中红外学习电路使用了HX1838一体化红外接收头,此接收头中集成了红外接收、放大、滤波和解调等电路,可直接将基带信号输出给单片机.由于接收头内部增益较大,为了减小干扰,所以在电源引脚上接入滤波电容、串联电阻,如图7所示.若HX1838红外接收头接收到空间中的38KHz红外信号时,则在输出端输出低电平供单片机读取.
图7 HX1838电路原理图
红外发射电路主要由三极管和红外LED组成.单片机产生调制好的38KHz信号,通过三极管将电流放大,从而驱动红外LED,将信号发射出去.另外,在实际使用中,电器可能会分散在房间中的各个位置,因此本方法使用了多个红外LED,能同时向各个方向发射红外信号,方便用户的使用,其原理图如图8所示.
图8 红外发射电路原理图
本方法使用了成都亿佰特电子科技有限公司的E32-TTL-100模块做为系统的无线通信方案.E32-TTL-100是一款功率为100mW的无线串口模块,工作频段为410MHz到441MHz,可实现数据的透明传输.无线通信模块的电路原理图如图9所示,若单片机的TXD输出低电平则三极管导通,此时无线串口模块的RXD接口读取到低电平信号.反之,三极管截止,无线串口模块的RXD被电阻拉至高电平;当无线串口模块的TXD输出为高电平时,单片机的RXD被内部上拉电阻拉至高电平,否则单片机RXD接口的电压被钳位在0.7V(与二极管类型有关),为低电平.
图9 无线通信模块的电路原理图
本方法使用继电器控制如电灯这类仅通过电源的开启或断开就能达到控制效果的电器.继电器能通过线圈的通电情况来控制触点的断开或吸合实现“小电流控制大电流”,被广泛应用于通过电气控制的各种场合.其电路原理图如图10所示,由于单片机I/O口的驱动能力较弱,所以使用了三极管放大电流.因为继电器中含有线圈,为了避免感应电流对系统造成影响,设置了一个续流二极管用以保护电路,同时加入了光耦隔离电路,使单片机与继电器之间充分隔离,具有较强的稳定性.
图10 继电器电路原理图
由于手持端具有可移动性,需电池供电,因此本方法以聚合物锂电池作为手持端的电源,使用单节锂电池充电芯片TP4056,这款充电芯片的热反馈功能使其可以在充电时自动调节充电电流,所以在大电流充电的情况下,芯片的温度能得到有效的控制,避免芯片因自身过热而损坏.锂电池充电电路原理图如图11所示.其中,通过改变电阻Rp的阻值可以设置不同的充电电流,最大充电电流能达到1A,方便设计人员根据不同的应用场景对充电电流进行设置.当TP4056检测到充电器被移除时,芯片将会自动进入低电流的状态,电池的漏电流可控制在2uA以下,避免电能浪费,提高设备待机时间.
图11 锂电池充电电路原理图
本方法包含了3个电压转换电路:(1)手持端上将锂电池电压转为5V的SX1308电路;(2)将 5V转化为 3.3V的AMS1117-3.3电路;(3)电闸端上将220V交流电转化为5V直流电的HLK-PL01电路.
在手持端,由于无线串口模块在5V供电下能达到更大的发射功率,所以选用SX1308将锂电池电压转为5V.SX1308是一款具有极小体积的电流模式升压变换器,其工作频率高达12MHz,具有过热保护、电流限制和输入欠压锁定等实用功能.SX1308的电路原理图如图12所示.为了确保芯片输入电压与输出电压的稳定,在芯片的输入端与输出端都放置了一个多层陶瓷电容器,其在拥有较大容值的同时还拥有较小的ESR(等效串联电阻)和ESL(等效串联电感),所以很适合在电子产品的振荡、滤波、耦合和旁路电路中应用.通过设置R6和R7的值可以改变电路输出的电压,当需要输出5V电压时,R6选择73.2K,R7选择10K.
图12 SX1308电路原理图
由于手持端的STC11L08XE单片机和LD3320语音识别芯片的工作电压为3.3V,所以本设计方法选用AMS1117-3.3将5V转化为3.3V.该系列稳压器内部集成了过热保护和限流电路,输出电流可达1A,且工作电压差可低至1V.其具有外围电路简单、体积小和廉价等特点,适合在本方法使用,其电路原理图如图13所示.
图13 AMS1117-3.3电路原理图
电闸端的电源来自于220V交流电,所以需要经过AC-DC(交流转直流)的降压电路将电压转至5V,本设计采用了深圳市海凌科电子有限公司的HLK-PL01隔离电源模块.该模块具有低波纹、低噪声、输出过载保护功能,且具有较小的体积,其额定输入电压为100V~240V,输出电流在600mA以上,其应用电路图如图14所示.
图14 HLK-PL01应用电路图
综上所述,手持端PCB图如图15a所示,红外控制端PCB图如图15b所示,电闸端PCB图如图15c所示.
图15 系统PCB图
对于嵌入式系统来说,应充分考虑程序的运行有可能出现的异常,增强程序的鲁棒性能够提高整个系统的稳定性.
手持端程序主要包括语音识别、语音合成、防误触发和串口通信部分,其流程图如图16所示.
图16 手持端程序流程图
(1)语音识别部分.程序先对LD3320进行初始化,然后将识别列表写入芯片.当用户说话时,LD3320会对输入的声音进行频谱分析,再提取其语音特征,最后将特征与识别列表中的数据进行匹配,若匹配成功则主控制器通过继电器模块执行相应动作,否则主控制器视接收到的字符串为无效信息或干扰信息,不执行任何操作.LD3320每次识别结束都会产生一个中断信号,由于在电路上LD3320的中断输出脚与单片机的中断输入脚相连,所以单片机要在相应的中断服务函数中读取相关寄存器的值,从而获得识别结果.
(2)语音合成部分.当程序检测到用户的语音指令后,会依据识别结果反馈语音信息给用户.程序进行语音合成时,会先将语音信息中所有汉字的GBK编码打包成SYN6288芯片指定的帧格式,再通过串口发给SYN6288芯片.芯片收到数据后便会进行合成工作,最终通过扬声器播放语音.
(3)防误触发部分.在实际使用中,手持端所处的环境并非严格可控,环境中将会有许多与控制无关的说话声以及环境噪音.这些声音有可能被LD3320识别到,从而造成误触发.比如用户在和他人交流时,说的话中包含了“开电视”这个词,即使用户的本意并不是希望系统将电视打开,但是这个词依然有可能被LD3320检测到,然后将电视打开,形成误触发.为了避免这种情况的产生,程序中设置了双层保护机制:其一是采用了包含两级口令的语音识别流程,即先完成第一级指令的识别,才能进入对第二级指令检测.比如将第一级指令设置为“管家”,将第二级指令设置为各种语音命令,如“开电视”等.这样当用户需要打开电视时,就需要先说出“管家”,待系统识别成功后再说出“开电视”即可.其二是在手持端设置了模式选择键与PTT(Push to Talk)键.模式选择键可将识别模式设置为“自动模式”与“手动模式”,在“自动模式”下,系统使用上述的两级口令识别流程.在手动模式下,用户只需按住PTT键,然后直接说出二级指令即可.通过这双层保护机制,可以大大降低误触发的情况.
(4)串口通信部分.手持端设备上的无线串口模块和语音合成芯片都需要使用单片机的串口资源,但STC11L08XE单片机只搭载了一个串口,所以程序上使用了“分时复用”的方法让两种外设共用同一个串口.由于语音合成芯片只有在需要反馈语音信息时才会被使用到,其他时间不需要占用串口资源,所以程序默认将串口与无线串口模块的P1口通信,当需要进行语音合成时再切换到与语音合成芯片的P3口通信,完成数据发送工作后立即切换回默认设置,从而能通过1个串口分别向两个外设发送数据.
红外控制端的程序主要包括OLED显示、串口通信、红外发射和红外编码自学习等子函数,如图17a、17b、17c、17d 所示.
图17 红外控制端程序流程图
(1)红外发射部分.以红外线作为信道,将基带二进制信号调制为一系列的脉冲串信号,通过红外发射管向空间发射出去.本方法所使用的载波是频率为38KHz,占空比为50%的红外信号,基带信号来自于在学习阶段存入EEPROM的数据.当进入红外发射程序时,若要输出脉冲,定时器会以13us的周期溢出产生中断,在中断服务函数中将相应的I/O口取反,通过三极管电路驱动红外LED,即可产生频率为38KHz、占空比为50%的红外信号.若要输出空闲,则在程序中将定时器的中断使能位置0,同时将I/O口置1即可.
(2)红外编码自学习部分.当程序进入红外学习状态时,首先会关闭所有中断,清零相关变量,等待红外信号的到来.当检测到红外脉冲后,程序会将每段电平的时间长度存入EEPROM中,避免数据因系统掉电而丢失.测量脉冲电平长度的原理是:当某一电平到来时,程序会以15us为周期对计数变量进行累加,直到下一个电平到来,这样被检测的电平长度可以计算出来.如果计数变量使用unsigned char型,那么其最大能够测量3.825ms长度的电平,可是很多协议的引导码都超过了这个范围,比如常用的NEC协议的引导码就由9ms的红外脉冲与4.5ms的空闲组成,一帧完整的NEC编码如图18所示.显然,unsigned char型变量的计数范围满足不了引导码的电平长度,所以本方法使用了unsigned int型变量与unsigned char型变量同时存放电平的长度,即先用unsigned int型变量对电平进行测量,再根据所得值的大小将数值保存到不同类型的数组中,这样既保证程序能学习编码,又减少了用于存储数据的空间.
图18 NEC遥控器编码
(3)OLED显示部分.设备开机后便会对OLED进行初始化、清屏等工作,然后根据系统运行时的状态定期刷新显示内容,使用户能够清晰地了解到系统运行情况.
(4)串口通信部分.红外控制端设备的串口仅用于接收手持端的数据,设备开机后便会对串口进行初始化,然后串口就会一直处于等待数据的状态,当收到数据后,便对串口字节流进行缓存、校验等操作,最终将校验正确的数据发给数据解析函数处理.
电闸端程序主要包括串口通信和继电器控制部分,其流程图如图19所示.
图19 电闸端程序流程图
(1)串口通信程序.终端之间需要传输的数据包括了指令、发送方地址、接收方地址等内容,为了提高每一帧数据的可读性,本方法使用了字符型数组.字符型数组中的数据以ASCII码存储在存储单元,有利于系统的调试和维护.
(2)继电器控制程序.继电器控制程序主要根据串口收到的数据对继电器进行控制,从而实现对电器的控制.
对本文设计的用于智能家居语音控制的LD3320和SYN6288方案在不同环境不同种类电器的控制中进行了语音识别反馈测试,得出的语音识别反馈准确率见表1.由表1可知,本文设计的LD3320语音识别和SYN6288语音合成反馈方案,其语音识别反馈的准确率较高,尤其是在安静环境下控制信号比较简单的电器.
表1 语音识别反馈准确率统计表
本文利用语音识别、语音合成、红外编码自学习、无线通信、双层保护机制、双重模式切换、电池充放电、电压转换等技术设计了一种无需联网的用于智能家居的语音控制方法.本方法经测试表明,用户通过语音就能简便控制智能家居设备,实现了人和机器之间的语音智能交互,用户既可以通过语音指令来控制电器,也可以通过实体开关对电器进行控制,具有使用成本低、智能化、老人交互简便、双重模式切换自如、性能稳定等优点,较好地解决了目前市面上综合性的智能家居系统存在的一些问题.由于人机交互模块是针对非特定人语音,故该项研究结果对其它公共场所的语音控制过程也有一定的适用性,具有可移植性,较好地满足当今语音控制领域的特点,具有广泛的应用前景.但为了能更好地将语音控制功能应用到不同领域,还需将语音识别控制准备率进一步提高,因此今后还需在硬件芯片选择和软件设计方面进一步优化改进.