本帖最后由 liliuyang 于 2017-10-24 21:47 编辑
超声波测距播报系统 江西理工大学因仑班
该项目为超声波测距语言播报,其主要为:使用超声波进行测距,在四位数码管中进行显示,然后在得到信号后,进行语言播报。其主要结构如下图所示:
这个项目是对语言合成芯片的一次尝试地运用,在这之后,还可以将这个语言合成模块扩展到电梯,小车倒车系统等一些需要进行人机交互的项目之中。
一、HC-SR04超声波测距模块HC-SR04超声波测距可提供2cm-400cm的非接触式测距功能。采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信号。模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;若有信号返回,则会通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。
二、TM1637四位数码管TM1637是一种带键盘接口的LDE驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动、键盘扫描等电路。微处理器的数据通过两线总线接口和 TM1637 通信,在输入数据时当 CLK 是高电平时,DIO 上的信号必须保持不变;只有 CLK 上的时钟信号为低电平时,DIO 上的信号才能改变。数据输入的开始条件是 CLK为高电平时,DIO 由高变低;结束条件是 CLK 为高时,DIO 由低电平变为高电平。TM1637 的数据传输带有应答信号 ACK,当传输数据正确时,会在第八个时钟的下降沿,芯片内部会产生一个应答信号 ACK 将 DIO 管脚拉低,在第九个时钟结束之后释放 DIO 口线。 - /********************************************
- 函数名称:I2CStart()
- 入口参数:void
- 返回参数:void
- 函数功能:发送I2C起始信号
- *********************************************/
- void I2CStart(void)
- {
- clk = 1;
- dio = 1;
- Delay_us(2);
- dio = 0;
- }
- /********************************************
- 函数名称:I2Cask()
- 入口参数:void
- 返回参数:void
- 函数功能:发送I2C应答信号
- *********************************************/
- void I2Cask(void)
- {
- clk = 0;
- Delay_us(5);
- while(dio); //等待应答信号
- clk = 1;
- Delay_us(2);
- clk=0;
- }
- /********************************************
- 函数名称:I2CStop()
- 入口参数:void
- 返回参数:void
- 函数功能:发送I2C停止信号
- *********************************************/
- void I2CStop(void)
- {
- clk = 0;
- Delay_us(2);
- dio = 0;
- Delay_us(2);
- clk = 1;
- Delay_us(2);
- dio = 1;
- }
- /********************************************
复制代码在CLK下降沿后由DIO输入的第一个字节作为一条指令。经过译码,取最高B7、B6两位比特位以区别不同的指令。 如果在指令或数据传输时发送STOP命令,串行通讯被初始化,并且正在传送的指令或数据无效(之前传送的指令或数据保持有效)
三、XFS5352CE模块XFS5152CE 是一款高集成度的语音合成芯片,可实现中文、英文语音合成;并集成了语音编码、解码功能,可支持用户进行录音和播放;除此之外,还创新性地集成了轻量级的语音识别功能,支持 30 个命令词的识别,并且支持用户的命令词定制需求。XFS5152CE 芯片支持 UART 接口、I2C 接口、SPI 接口三种通讯方式,可通过 UART 接口、I2C 或 SPI 接口接收上位机发送的命令和数据,允许发送数据的最大长度为 4k 字节。在该设计中,我们使用的是UART通信方式,其设定为1位起始位,8位数据位,1位停止位。上位机发送给 XFS5152CE 芯片的所有语音合成命令都需要用“帧”的方式进行封装后传输。帧结构由帧头标志、数据区长度和数据区三部分组成。数据区是由命令字和命令参数组成的,上位机使用命令字来实现语音合成芯片的各种功能。 - void XFS_FrameInfo(uint8_t *HZdata)
- {
- /****************需要发送的文本**********************************/
- unsigned char xdata Frame_Info[50]; //定义的文本长度
- unsigned int HZ_Length;
- unsigned int i=0;
- HZ_Length =strlen(HZdata); //需要发送文本的长度
-
- /*****************帧固定配置信息**************************************/
- Frame_Info[0] = 0xFD ; //构造帧头FD
- Frame_Info[1] = 0x00 ; //构造数据区长度的高字节
- Frame_Info[2] = HZ_Length+2; //构造数据区长度的低字节
- Frame_Info[3] = 0x01 ; //构造命令字:合成播放命令 Frame_Info[4] = 0x01; //文本编码格式:GBK
- /*******************发送帧信息***************************************/
- memcpy(&Frame_Info[5], HZdata, HZ_Length);
- PrintCom(Frame_Info,5+HZ_Length); //发送帧配置
- }
复制代码XFS5152CE 芯片在上电初始化成功时会向上位机发送一个字节的“初始化成功”回传,初始化不成功时不发送此回传。XFS5152CE 芯片收到一个命令帧后会判断此命令帧正确与否,如果命令帧正确返回“收到正确命令帧”回传,如果命令帧错误则返回“收到错误命令帧” 回传。 要注意的是:如前一帧文本还没有合成完,就再次发送文本到 XFS5152CE 会中断前次合成,而执行新的合成。
四、 工作流程 整个系统的工作流程如下图所示,先用超声波来进行测距,然后用数码管来进行显示,最后用按键来控制语音模块来进行语言播报功能。
演示视频地址:https://www.bilibili.com/video/av15685150/
|