公交语音播报调试第四天
任务书
公交报站器由控制模块STC89C52单片机作为控制核心,硬件电路分为12864液晶屏、ISD1730语音芯片、温湿度传感器和红外传感器等模块。该系统的功能是:首先可以通过八个按键实现“上行报站”、“下行报站”、“语音重播”、“报站器复位”四个功能以及完成时钟参数设置等功能,其次可以实现站点信息语音组合播报和温湿度检测及相应提示;最后可以通过红外传感器自动感应公共汽车是否到达站台,检测到站台后,自动触发报站器语音播报站点信息,和提示语信息。
开发思路:
这个系统的设计需要完成硬件平台和软件平台的搭建,主要的一个特点是涉及的外设比较多,所以对于程序部分的逻辑设计显得尤其重要,另外使用的51单片机,所以性能不一定够用,其内部的资源也确实少的可以,
硬件平台:
根据题目的要求,我打算采用以核心板为中心,分别通过外部引线的方式,将不同的模块进行连接,实现这个系统的功能,也就是最后会将各个模块用杜邦线的形式进行连接,因为考虑到任务的时间太短,不能实现最高程度的集成化设计,所以打算采用选用模块化设计。
note:初步的设想是有两个比较重大的节点,如果程序调试进展顺利,在时间允许的条件下,我会选择使用PCB做一个底板,将所有的模块放在一个板子上;但是如果程序调试不顺利,那我会把时间更多的分配到功能的实现上,而不是做系统的美化处理上。
需要购置的模块:
Stc89c52核心板:
担心内部资源不够使用,时序满足不了外设的执行过程,从而影响系统的实时性。提到这个实时性响应,总结一下,一般提升系统实时性响应的方式有如下三种:第一种是最简单粗暴的方式,直接更换高性能的CPU,爱玩游戏的同学不都是这么搞的嘛
第二种是在程序中加入中断,将一些关键性的操作,放在中断中完成,但是也不能在中断中持续操作,因为有可能会因为操作时间过长,而干扰下一次的中断触发。
第三种方式是主动降低程序中不需要时时响应的部分,即降低程序的刷新率。比如:OLED屏幕中长时间不变的部分,温湿度采集的数值,GPS的信号等,均可以降低到一分钟刷新一次的速度。
note:那该如何降低刷新率呢,这个非常简单,就是在程序中加入一个标志位,在执行以前,先判断标志位是否达到了设定的值,达到后,才开始执行程序,这个标志位也可以理解为知道目前整个系统已经执行了多少次。
Oled显示屏: iic接口(2个)
对于这个模组,可以通过对汉字的取模,来实现对对汉字的显示。矩阵按键模块:实现扫描显示(占用的引脚数目至少是8个)
这个模块特别占用引脚数目,单纯不走协议的话,对于4*4的引脚,需要至少8个引脚,来完成电平信号的识别,需要自己对采集的数据进行编码,才可以完成按键键值的确定。(家里有)rtc时钟模块:iic接口(2个)
根据刚才查阅的资料可以知道,它需要注意的就是对于任务书中的星期的处理。剩下的也都还是可以的。(家里没有)ds18b20: spi接口(2个)
这个算是一个可选的方案,对于比较老套设计方案,或者当前的单片机开发板上都是板载的资源。通过一个spi接口,需要两个引脚接口来完成对于数据的采集。(家里也有)温湿度模块:iic接口(集成化的一个温湿度采集模组)(2个)
这是我第一次发现的模块,可以一次性完成湿度和温度的数据采集,需要调研的就是对于数据的采集和处理过程。(家里没有)语音播放模块:串口接口(2个)
经过调研,已经知道这个模块使用的文字转语音模组,可以通过串口将需要说的文字,转化为语音播报。(家里也有)红外传感模块:(1个)
需要占用一个引脚,当检测到外部的障碍物后,发送一个高电平,所以需要配置一个引脚作为外部输入检测。(考虑使用外部中断引脚)来提升系统的响应速度。(家里有)
系统框图
器件选型
红外模块:常规的模块 资料有 一个普通IO
OLED显示屏:带有IIC接口的模块 (手头没有) 资料有 IIC接口
4*4矩阵键盘:普通的4乘4矩阵键盘 资料有 八个普通IO
RTC时钟:PCF8563T带有IIC接口 (手头没有) 资料有 IIC接口
语音播报模块:中文TTS文字转语音模块 (这个是重点啊。。) 资料有 串口接口
温湿度采集模块:GY-SHT30-D带IIC接口的模块 (手头没有) 资料有 IIC接口
电源模组:带有至少5路以上的3.3V和5V的电源模块 (手头有一个,再买一个备用)
经过反复的更正和设想,暂时性完成硬件的选型和设计规划,对于资料也已经收集的很多了。感谢普中的前期工作:
普中开发板
软件调试
开发环境:
- keil4软件
- 串口调试助手
软件设计思路:
分模块单独进行模块的调试,一方面是验证模块的功能性,另一方面是是按照任务书的要求,对模块的独立程序进行探索性开发,预期是达到和任务书的数据接口类型相一致的设计目标。具体的执行计划如下安排:
1)第一步先基于单片机开发板完成初步的功能验证,寻找最优布局和合理的程序架构,因为用开发板,初期不用兼顾硬件的接触不良这个问题。在程序设计中,优先调试逻辑部分,通过串口打印输出需要显示的内容,然后才是通过外设进行脱机处理,比如显示屏显示啊,语音播报等。
(1)串口通信(语音播报)
目前已经可以成功发送字符串了。
51单片机实现字符串的打印输出,在程序实现上是在考验对于C语言中对于字符串操作的部分的理解和掌握。因为串口每次只能发送一个字节(按照编码,一个汉字是采用两个字节进行编码),所以需要先定义一个字符串数组,然后进行发送,需要注意的一点是,字符串的结束标志是‘\0’,当发送函数检测到结束符时,则结束发送。
按照任务书的要求,可以通过定义不同的字符串,从而实现不同的语音播报,具体在程序中则是通过发送不同的字符串,来实现不同的语音播报。
语音信息的数据类型:
起步阶段
- 车辆起步请扶好站好注意安全
- 请主动给老弱病残让座
到站阶段
站点信息+到了
请依次从后门下车下车请注意安全
note:站点信息包括8个站点,打算用ABCDEFGH +站代替。
突发状况
- 当前温度过高请注意防暑降温
下图是语音播报模块的管脚定义:
note:管脚中需要注意串行通信中主从机的TX和RX管脚要交叉连接才可以正常通信。如下图所示:
另一个需要注意的问题是,当前单片机串行通信采用的波特率是4800,而语音通信模块的串行通信波特率要求是9600才可。
又有一个灵感,我可以直接用串口助手,对语音模块进行调试呀。试试呗,争取今晚能听到响!!!
(2)矩阵键盘
上图是矩阵键盘的原理图,在程序中,先进行列扫描,设置键值为0~3,然后再进行行扫描,发现每一行的加4.从而通过确定列和行,得到最终的键值。然后根据键值的不同,实现不同的功能。比如任务书中的上下行切换,重复播报,初始化。
在程序中加入按键释放功能,其意义是确定只有当按键释放后,程序才接着往后执行。
目前总共有16个按键,根据任务书的要求,对不同的键值的功能分配如下:
键值0
主要是实现站点信息的上行播报功能,已经完成了调试,符合任务书要求。
从图中可以分析得出,所谓上行,就是从A站到H站,进行循环执行。
键值1
主要是实现站点信息的下行播报功能,完成了调试工作,符合任务书要求。
从上图中可以发现,所谓下行,就是站点信息从H站到A站进行循环执行。
键值2
主要是当前站点信息语音的重复播报
站点语音信息进行重复播报,如图所示,当前站点是G站,并且通过按键,对G站进行了4次播报,并且在完成了重复播报后,程序依旧正常进行下一个站点的信息播报。
键值3
主要是实现对站点信息的复位,暂定从初始位置开始播报语音
如图所示,当按下初始化站点信息的时候,无论当前执行到何种站点,程序会把站点信息复位到A站。从上图我们也可发现,共进行了两次复位操作。
键值4
实现时钟显示中对年的加操作
键值5
实现时钟显示中对年的减操作
键值6
实现时钟显示中对月的加操作
键值7
实现时钟显示中对月的减操作
键值8
实现时钟显示中对日的加操作
键值9
实现时钟显示中对日的减操作
键值10
实现时钟显示中对小时的加操作
键值11
实现时钟显示中对小时的减操作
键值12
实现时钟显示中对分钟的加操作
键值13
实现时钟显示中对分钟的减操作
键值14
实现时钟显示中对秒的加操作
键值15
实现时钟显示中对秒的减操作
(3)红外模块
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。目前大量的使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通φ5发光二极管相同。
常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。
数字量电平信号输出(白线高电平,黑线低电平)
检测到障碍物的时候,输出低电平,
(4)RTC模块
(5)OLED 屏幕
对于显示内容的分析,重点包括三种信息的显示:
时钟信息,标准的的显示格式:2017年2月23日 星期4 08:45:10
note:注意对于星期的显示需要用一个算法进行实现,判断出初始当天的星期几,然后计算和当前相距的天数,把天数对7取余,将余数和初始的星期相加,即为当前的星期,然后将星期显示到OLED上。
站点信息的提示,即当前所处的站点信息
语音提示的流动显示
因为屏幕太小,而显示的内容过多,所以需要将信息利用流动的形式显示到OLED屏幕上。
当前的温度和湿度信息
由于采用的的是一体化的模块,所以温湿度可以放在屏幕中的一个固定位置。
为了提升系统的实时性,需要对不用长时间显示的内容,降低刷新率,比如温湿度,年月日,星期,站点标识符(station),只需要初始化的时候,将这些信息更新到屏幕上即可。
(6)温湿度模块
今天下午的安排是将矩阵程序整合到串口通信中,然后将站点信息、语音提示和按键键值进行整合处理,先测试一下系统执行的实时性的响应程度。经过下午的奋斗,整个系统程序的架构已经初见成效,到目前为止,系统的响应速度还是可以满足功能的要求的。晚上的安排是验证剩余的三个模块(语音播报,RTC模块,OLED显示,温湿度监测)的功能性如何,初步实现基本功能,然后再加入到系统中,比较重要的一点是,要验证语音播报模块的功能如何?
非常的难过,因为开发板上板载的晶振是12MHz,不能出现9600的波特率,而核心板上的晶振是11.0592Mhz,可以出现9600,所以将芯片搬到了核心板上,然后利用手头仅有的9V 1A的电源供电,后果是唯一的51单片机被挂逼了,结束了自己辉煌而灿烂的一生,可以它还没有看到过三个其他的模块展现生命力的时刻。归根结底是输入电源的功率太大,导致单片机被烧。暂时耽搁了任务进度。
并不是所有的芯片被烧了之后,都会冒烟,现在的异常是在上电后,短时间会感觉到芯片封装会异常的发热。
补救措施:为了防止类似的故障出现,我已经联系好之前实验室的小伙伴,争取明天借一块出来,然后在淘宝上也购买了两块,进行备用。
那就总结一下目前的进度吧,目前已经把软件系统的整个执行过程构建了起来,那么指定一下明天的项目进度安排:
第一步:将剩余的模块进行功能性实验,实现基本的功能,找到对饮的数据接口。
第二步:逐个将模块添加到软件系统中,并梳理所用到的硬件引脚分布。
第三步:对整个系统进行详细的功能测试工作。
2)第二步是进行脱机程序的调试,考虑程序能否在既定的程序框架中完成运行。如果不可以,则需要考虑调整系统的响应速度,提升系统的实时性;或者更改系统的执行次序。
脱机验证,第一次失败了,因为核心板的供电电源输入的功率太高,导致芯片挂逼。
3)第三步是将调试完成的系统,从单片机上转移到核心板上,进行最终的产品包装。
note:考虑到产品的目的地需要经过快递这个流程,所以保险起见,我想将调试完成的设备,用两块15*20cm的洞洞板和螺栓进行固定,最后用胶带将四周完全密封。只留出需要交互的界面
公交语音播报调试第四天相关推荐
- 公交语音播报调试第二天
任务书 公交报站器由控制模块STC89C52单片机作为控制核心,硬件电路分为12864液晶屏.ISD1730语音芯片.温湿度传感器和红外传感器等模块.该系统的功能是:首先可以通过八个按键实现" ...
- 公交语音播报调试第三天
任务书 公交报站器由控制模块STC89C52单片机作为控制核心,硬件电路分为12864液晶屏.ISD1730语音芯片.温湿度传感器和红外传感器等模块.该系统的功能是:首先可以通过八个按键实现" ...
- 公交语音播报调试第一天
任务书 公交报站器由控制模块STC89C52单片机作为控制核心,硬件电路分为12864液晶屏.ISD1730语音芯片.温湿度传感器和红外传感器等模块.该系统的功能是:首先可以通过八个按键实现" ...
- 基于GPS的公交车站点播报调试第四天
基于GPS的公交车站点播报 任务书 本设计的主控芯片单片机为基础,利用GPS获取比较精确的公交位置信息:并由AT89C51进行智能整合处理信息,发送控制指令:利用ISD1700系统语音芯片实现语音播报 ...
- STM32F103ZET6串口调试与语音播报
一.串口调试 1.串口是什么? 串行接口简称串口,也称串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口. 2.通信:串行通信,并行通信 数字信号是8位二进制数,可以使用信号线传输,一种方 ...
- 基于GPS的公交车站点播报调试第五天
基于GPS的公交车站点播报 任务书 本设计的主控芯片单片机为基础,利用GPS获取比较精确的公交位置信息:并由AT89C51进行智能整合处理信息,发送控制指令:利用ISD1700系统语音芯片实现语音播报 ...
- 公交车语音播报系统的使用说明书
关于公交车语音播报的使用指南 先给各位父老乡亲问个好,这是本项目的最后一篇博客了,之所以没有坚持到每天更新一篇的任务达成,是因为整个调试过程不可谓不波折,少芯片的事情对于硬件工程师而言,太普遍了,这个 ...
- 实现百度地图导航Demo的语音播报功能
上文中实现了在本地导入百度地图导航Demo,那么在此基础上如何实现导航的语音播报呢? 一.为该应用申请语音播报(也叫注册) http://developer.baidu.com/map/index.p ...
- TTS语音播报程序部署与配置
本功能已经在Windows7,Windows8.1,Windows10上测试过,其他版本操作系统未进行过测试. 1. 下载程序包 [32位]下载地址:http://pan.baidu.com/s/1i ...
最新文章
- 你为世界杯而战,我为生活而战!
- [C#程序]汉字转拼音缩写的函数
- spring中bean的实例化
- Android 从ImageView中获取Bitmap对象方法
- matlab中gatbx工具箱的添加
- linux创建sudo用户_Linux终极指南-创建Sudo用户
- python网络爬虫系列(十)——chrome在爬虫中的使用
- css hsla和rgba的区别
- day23_内置函数(__del__ item系列 ,模块)
- Word制作音乐简谱(转)
- JAVA连接SQL server2000解决方法
- 史上最详细解说!小白iriver T60拆机
- Linux之iNodeclient客户端定制和安装
- nero incd V4.3.23.3 序列号
- Win10搭建gym运行atari游戏pong
- 免费可视化报表,好用的web报表设计器
- 联邦学习纵向逻辑回归公式推导
- Channel 通道详解
- 提升网站流量和排名的方法,SEO优化要这样做
- Linux系统时区时间修改
热门文章
- css动画,实现落叶效果
- recipe for target 'CMakeFiles/check' failed
- 数据存储技术的相关概念
- 数字疗法 | 精神障碍患者的救命稻草
- 什么是Y4M文件格式
- jeecgBoot后台管理的在线表单的使用
- 关于华硕笔记本电脑飞行堡垒系列打开TPM教程
- Android 在PDA扫描枪上的应用
- PDF Search 10.3 PDF文档搜索工具
- 新概念英语第二册课文电子版_新概念英语全四册app下载-新概念英语全四册 v6.1.1103 手机版...