任务书
公交报站器由控制模块STC89C52单片机作为控制核心,硬件电路分为12864液晶屏、ISD1730语音芯片、温湿度传感器和红外传感器等模块。该系统的功能是:首先可以通过八个按键实现“上行报站”、“下行报站”、“语音重播”、“报站器复位”四个功能以及完成时钟参数设置等功能,其次可以实现站点信息语音组合播报和温湿度检测及相应提示;最后可以通过红外传感器自动感应公共汽车是否到达站台,检测到站台后,自动触发报站器语音播报站点信息,和提示语信息。
开发思路:
这个系统的设计需要完成硬件平台和软件平台的搭建,主要的一个特点是涉及的外设比较多,所以对于程序部分的逻辑设计显得尤其重要,另外使用的51单片机,所以性能不一定够用,而且其内部的资源也确实少的可以,
硬件平台:
根据题目的要求,我打算采用以核心板为中心,分别通过外部引线的方式,将不同的模块进行连接,实现这个系统的功能,也就是最后会将各个模块用杜邦线的形式进行连接,因为考虑到任务的时间太短,不能最更高程度的集成化处理,所以打算采用模块化设计。而不是这个做一个集成化的实物。
note:初步的设想是有两个比较重大的节点,如果程序调试进展顺利,在时间允许的条件下,我会选择使用PCB做一个底板,将所有的模块放在一个板子上;但是如果程序调试不顺利,那我我会把时间更多的分配到功能的实现上,而不是做系统的美化处理。
需要购置的模块:
-
Stc89c52核心板:
担心内部资源不够使用,时序跟不上外设的执行过程 -
Oled显示屏: iic接口(2个)
对于这个模组,主要担心的是能否在51单片机的程序中加入字库 -
矩阵按键模块:实现扫描显示(占用的引脚数目至少是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’,当发送函数检测到结束符时,则结束发送。
按照任务书的要求,可以通过定义不同的字符串,从而实现不同的语音播报,具体在程序中是通过发送不同的字符串,来实现不同的语音播报。
(2)矩阵键盘
上图是矩阵键盘的原理图,在程序中,先进行列扫描,设置键值为0~3,然后再进行行扫描,发现每一行是上一行的加4。从而通过确定列数和行数,得到最终的键值。然后根据键值的不同,实现不同的功能。比如任务书中的上下行切换,重复播报,初始化。
(3)红外模块
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。目前大量的使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通φ5发光二极管相同。
常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。
数字量电平信号输出(白线高电平,黑线低电平)。到这里,手头的模块算是全部完成了调试了,其他模块,就只能等快递小哥的到来了。
(4)RTC模块
(5)OLED 屏幕
(6)温湿度模块
2)第二步是进行脱机程序的调试,考虑程序能否在既定的程序框架中完成运行。如果不可以,则需要考虑调整系统的响应速度,提升系统的实时性;或者更改系统的执行次序。
3)第三步是将调试完成的系统,从单片机上转移到核心板上,进行最终的产品包装。
note:在最后交付的时候,我想将调试完成的设备,用两块宽为15长为20cm的洞洞板和螺栓进行固定,最后用胶带将四周完全密封。只留出需要交互的模块即可 。