基于RFID技术的智能语音播报系统设计
引言
射频识别(Radio Frequency Identification,RFID)作为一种非接触式的自动识别新技术,近年来得到了迅速的发展并逐步走向成熟。其原理是基于无线射频信号的传输特性,进行非接触式自动识别,从而自动识别被标识对象,获取对应数据进行交换。最常见的识别方法是一个串行存储号码识别一个人或物体。在此介绍一种基于RFID和单片机技术的智能语音播报系统,可广泛应用于旅游景点自助导游、博物馆自助讲解、公交车站自动报站等场合。
1 系统总体设计
本系统由两大部分组成:RFID电子标签和智能终端。RFID电子标签内部由RFID晶片和外界线圈组成,每张电子标签有唯一的ID号。智能终端主要包括AT89S52单片机、最小系统电路、RFID读卡器、语音模块等。其中语音模块由WT588D语音芯片、编程器和用于语音下载、编程、模式设置的上位机软件WT588D VioceChip组成。系统整体框图如图1所示。
智能终端在有效读取范围内检测到RFID电子标签时,产生串行中断,单片机通过RXD引脚读取并存储电子标签ID值,然后查询与读取的ID号对应的语音地址,单片机通过一线串口控制模式控制语音模块完成对应语音信息的准确播报。
2 系统硬件设计
2.1 RFID读卡器模块DM-S28140
本系统采用中科鸥鹏公司的串口通信版DM—S28140读卡器模块实现RFID电子标签的ID值的读取。DM-S28140读卡器具有低功耗被动读取RFID标签、串口通信、波特率为2 400 bps、输入使能允许软件启用或禁用等特点。可以读取EM4100无源只读系列125 kHz标签卡,每个标签包含一个唯一的标识符,由RFID读卡器读取后,通过串行接口传输。
2.1.1 读卡原理
当RFID读卡器工作时,读卡器的控制电路将电流注入线圈,产生低频电磁场。若RFID电子标签放置在有效读取范围内(10 cm内),电子标签的线圈就会感应低频电磁场,共振耦合产生电流,供给其晶片足够的电源,在充分的电源供应下,晶片就可以将内存中唯一的ID信号转换成射频信号,传送给读卡器。只要有充分的电源,电子标签就会持续不断地发送ID值。
2.1.2 硬件连接
RFID读卡器串行接口版本可以与微控制器仅用4个信号(VCC、/ENABLE、SOUT、GND)互连。读卡器外观及引脚功能如图2所示。其中,SOU T连接到AT89S52的P3.0(RXD)引脚实现串口通信,使能引脚/ENABLE由P3.2控制。
AT89S52与WT588D的连接如图3所示。选择AT89S52 P1.4引脚连接AT89S52 RESET控制复位信号,AT89S52的P1.5引脚连接P03作为数据输出端,选择PWM音频输出方式,PWM引脚接至扬声器。
2.1.3 通信协议
当RFID射频识别卡开始工作时,且RFID标签放置在有效读取的范围内,唯一的ID以12位ASCII字符串方式发送给主机,如图4所示。
其中,起始位和停止位有助于识别一个正确的接收信息串,中间10位是实际标签唯一ID号。
2.2 语音模块
语音模块包括16个引脚的语音芯片WT588D、一个对语音模块进行语音下载的编程器和上位机软件Vioce Chip。WT588D语音芯片是一款可重复擦除烧写的语音单片机芯片。表1为各个引脚的功能描述。
图5为一线串口控制模式时序及电平占空比示意图。配套WT588D VioceChip上位机操作软件可随意更换WT588D语音单片机芯片的任何一种控制模式,把信息下载到SPI-Flash上即可,可控制220个语音地址,每个地址位能加载组合128段语音。支持DAC/PWM两种输出方式,PWM输出可直接推动0.5W/8Ω扬声器。支持加载WAV,音频格式,以及MP3控制模式、按键控制模式、一线串口控制模式、三线串口控制模式。本系统采用一线串口控制模式接收待合成的文本,直接合成为语音输出。
一线串口只通过一条数据通信线控制时序,依照电平占空比不同来代表不同的数据位。先拉低RESET复位信号5 ms,然后置于高电平等待17 ms,再将数据信号拉低5 ms,最后发送数据。高电平与低电平数据占空比为1:3,代表数据位0;高电平与低电平数据位占空比为3:1,代表数据位1。高电平在前,低电平在后。
3 系统软件设计
3.1 主函数及语音编程
软件系统主要由主函数main、读卡函数getRFID()、语音播放函数Send oneline(uint8_tcmd)组成。主函数完成系统初始化(定义标签卡ID数组)、调用读卡函数实现标签卡ID信息的读取、查询ID卡号对应的语音地址、调用语音播报函数实现信息的准确播报。流程图如图6所示。
值得注意的是,播放的语音必须下载到语音芯片SPI-Flash存储器中,通过语音编程器及VioceChip上位机软件进行语音模块的编程(即语音的装载、模式设置等),编程流程如图7所示。
语音下载后,须将语音地址与下载的语音文件一一对应起来,这是单片机读取语音并且准确播报的重要参考点,语音地址对应关系如表2所列。
3.2 读卡功能的实现
读卡函数getRFID()程序流程图如图8所示。首先进行UART初始化,当读卡器检测到标签卡时产生串行中断,按照12位通信协议按位读取数据,直到接收到停止位0x0D结束。
截取有效数据后4个字节,有效数据是指每个字节的大小在指定范围内(即0x30~0x46),对应字符为0~F,程序中只需要0x0D(停止字节)前的4个字节。
例如这4个字节分别为0x41、0x32、0x36、0X46,对应的字符为A26F,转换成十进制数,则数值等于41 583。因此,主程序定义的标签卡数组元素应为每个标签卡后5位十进制ID对应的十六进制数。
3.3 语音播报功能的实现
根据图3和图5,语音播报函数Send_oneline(uint8_tcmd)程序流程图如图9所示。函数中的形参cmd即语音的地址。
结语
本文使用AT89S52单片机、DM-S28140读卡器和WT588D语音模块,配合RFID电子标签,实现了智能语音播报系统。
实践证明,此方案可行并且可靠,可用于旅游景点自助导游、博物馆的自助讲解、公交车站智能报站等场合,具有较高的实用价值。