公交语音播报调试第三天

任务书

公交报站器由控制模块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 +站代替。

  • 突发状况

    • 当前温度过高请注意防暑降温

(2)矩阵键盘

在这里插入图片描述

上图是矩阵键盘的原理图,在程序中,先进行列扫描,设置键值为0~3,然后再进行行扫描,发现每一行的加4.从而通过确定列和行,得到最终的键值。然后根据键值的不同,实现不同的功能。比如任务书中的上下行切换,重复播报,初始化。

在程序中加入按键释放功能,其意义是确定只有当按键释放后,程序才接着往后执行。

目前总共有16个按键,根据任务书的要求,对不同的键值的功能分配如下:

  • 键值0

    主要是实现站点信息的上行播报功能

  • 键值1

    主要是实现站点信息的下行播报功能

  • 键值2

    主要是当前站点信息语音的重复播报

  • 键值3

    主要是实现对站点信息的复位,暂定从初始位置开始播报语音

  • 键值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)温湿度模块

2)第二步是进行脱机程序的调试,考虑程序能否在既定的程序框架中完成运行。如果不可以,则需要考虑调整系统的响应速度,提升系统的实时性;或者更改系统的执行次序。

3)第三步是将调试完成的系统,从单片机上转移到核心板上,进行最终的产品包装。

note:考虑到产品的目的地需要经过快递这个流程,所以保险起见,我想将调试完成的设备,用两块15*20cm的洞洞板和螺栓进行固定,最后用胶带将四周完全密封。只留出需要交互的界面即可。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值