基于GPS的公交车站点播报调试第三天

基于GPS的公交车站点播报

任务书

本设计的主控芯片单片机为基础,利用GPS获取比较精确的公交位置信息;并由AT89C51进行智能整合处理信息,发送控制指令;利用ISD1700系统语音芯片实现语音播报,并通过LCD液晶模块加以显示信息。具体的功能有以下三点:

  1. GPS定位站点:在GPS自动播报模式下,系统自动实时检测当前所处GPS坐标,并与设置的站点坐标比对,当当前坐标与某个站点的坐标误差在指定范围,则认为到了指定的站点

  2. 手动切换模式:人工通过上一站、下一站按键到了指定站点,则播放对应站点的语音提示。
    GPS自动播报/人工播报模式切换:人工播报模式时,根据往返设置以及按上一站、下一站按键来确定需要播放语音的站点;GPS自动播报则是通过GPS坐标来检测到了哪个站点,此时往返键不起作用。

  3. 显示屏显示对应的站点名称及相关信息

  4. 详细的站点信息包括以下几个:

    寝室站

    食堂站

    足球场站

    琴湖站

    综合楼站

    信息楼站

    南门站

方案设计

通过阅读这个任务书,已经知晓了,需要构建一个包括GPS模块,51核心板模块,OLED显示模块,语音播报模块和按键模块。

在这里插入图片描述

因为时间过于仓促,所以打算使用模块化的设计思路,优先逐个调通各个模块,然后再进行程序的联合调试,最后是硬件部分的调试。

硬件搭建

现在针对不同的模块,进行数据类型分类汇总,从而符合任务书的要求:

  • OLED屏幕

    显示屏用来显示站点信息,系统的位置信息(经纬度),模式信息(手动orGPS),语音提示的文字,所以可以忽略掉时钟信息。

在这里插入图片描述

显示的像素点的范围是128*64

在这里插入图片描述

  • GPS模块

    用来获取当前的位置信息、时钟信息

在这里插入图片描述

  • 矩阵键盘

    用来完成模式切换,手动模式的上下站切换,可以拓展为站点位置的坐标输入。

在这里插入图片描述

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

  • 键值0

    主要是实现站点信息的上行播报功能,已经完成了调试,符合任务书要求。
    在这里插入图片描述

    从图中可以分析得出,所谓上行,就是从第一站到第七站,进行循环执行。

  • 键值1

    主要是实现站点信息的下行播报功能,完成了调试工作,符合任务书要求。

在这里插入图片描述

从上图中可以发现,所谓下行,就是站点信息从第七站到第一站进行循环执行。
  • 键值2

在这里插入图片描述

站点语音信息进行重复播报,如图所示,当前站点是G站,并且通过按键,对G站进行了4次播报,并且在完成了重复播报后,程序依旧正常进行下一个站点的信息播报。
  • 键值3

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

在这里插入图片描述

如图所示,当按下初始化站点信息的时候,无论当前执行到何种站点,程序会把站点信息复位到A站。从上图我们也可发现,共进行了两次复位操作。
  • 键值4

    用于进行站点播报的模式切换,即手动模式和GPS自动播报模式

在这里插入图片描述

  • 键值5

    进行手动模式下的上一站切换

在这里插入图片描述

  • 键值6

    进行手动模式下的下一站切换

在这里插入图片描述

  • 键值7

  • 键值8

  • 键值9

  • 键值10

  • 键值11

  • 键值12

  • 键值13

  • 键值14

  • 键值15

  • 语音播报模块

    这个模块需要提前进行音频文件的存储,并且需要配备一个SD卡,用来存储音频,另外可以借助5个IO来实现对31段音频文件的选择性播放。结合上一次的项目,可以发现,这里将使用P0端口进行语音播报的控制端口。

    note:对于站点信息的语音播报,可以利用网上的文字转语音软件进行转换。需要注意转换后的文件格式为MP3格式

在这里插入图片描述

用来完成上下站站点语音提示和开车下车的一些语音提示,主要的语音提示如下:

语音信息的数据类型:

  • 起步阶段

    • 车辆起步请扶好站好注意安全
    • 请主动给老弱病残等乘客让座
  • 到站阶段

    • 站点信息+到了

    • 请依次从后门下车请注意安全

      note:站点信息包括7个站点,分别是如下几个站:
      第一站:寝室站

      第二站:食堂站

      第三站:足球场站

      第四站:琴湖站

      第五站:综合楼站

      第六站:信息楼站

      第七站:南门站

器件选型
  • 51单片机核心板

在这里插入图片描述

  • OLED屏幕 IIC接口 两根线 SCL SDA

在这里插入图片描述

  • GPS模块 UART通信 两根线 TX RX ATGM336H

在这里插入图片描述

  • 矩阵按键 需要8个IO口

在这里插入图片描述

  • 语音播报模块 需要5个IO口 MP3语音播放提示模块

在这里插入图片描述

软件搭建

软件的调试步骤和硬件搭建过程类似,也是分模块调试,先完成各个模块的独立调试,验证其功能性,然后再接着进行所有模块的程序联合调试,最后是转移到核心板上进行硬件平台的测试。

任务达成汇总:

  1. 今天先完成用手动模式的加减换站功能,也就是完成手动模式的站点播报。

    • 如果单片机采用的是12Mhz,则系统在进行串口通信时,对于波特率的调整是非常的不自由,只能选择2400的波特率。而9600有些时候也是可以的。
  2. 完成了对于GPS例程的研究,知道了如何对经度和纬度数据进行解析和获取方式。也学到了一些c语言的基础知识,比如:

    •  extern char *strstr(char *str1, const char *str2);
      // 若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
      // extern这个关键字,是在一个x.c文件中定义,然后在x.h文件中进行声明;假设在
      //另一个y.c文件中需要使用,则可以将该x.h头文件包含在y.c文件中即可使用
      
    • 还知道了一些如何在单片机的串口调试中,进行换行操作:

      sendstring("\r\n");// 在需要换行操作的字符串后边,跟上这样一个字符串,即可
      //完成换行
      

对于矩阵按键的功能设定如下:

在这里插入图片描述

系统在上电后,默认是GPS模式,如果需要,可以通过按键4切换到手动模式。

fig_mode=~fig_mode //利用这个取反符号,可以实现用一个按键,实现两种不同模式的功能切换

从上面的设定中,也是可以看出来的,如果目前是手动触发模式,则需要对于车辆的起步信号,也要作为手动才可。截止目前为止,已经将程序的大体框架构建了起来,只需要等到GPS模块出现即可!

在对于触发模式的开发过程中,些微遇到点麻烦,一开始是无法进入到按键4的状态,开始怀疑是三个问题,其一是自己编写软件的问题,其二是开发板的矩阵按键有故障,其三是芯片问题。其实一开始是不知道是芯片的问题,直到将矩阵按键的例程下载到开发板上后,通过呢使用,才发觉是芯片的问题,后更换芯片后,同样的例程,功能正常,所以开发板的硬件是正常的。随后将自己编写的模式触发程序下载到板子上进行测试,功能正常。故总结一句,软硬都得啃的动,才是合格的电子工程师。

另外一个问题是设定系统使用手动触发后,亦需要借助手动按键区分车辆起步和到站这两个状态。在一开始区分这个状态时,也是遇到了一点困难,好在最后得到了解决,具体是怎么解决的呢?请看下面的代码:

		 else  //手动触发模式
		 {
		   led1=1;
//		   led=1;
		   if(KeyValue==5 )
		    {
			  led=1;
		      stationx=station+1; 
			  station++;
	
		      if(station==7)
			  {
		        station=0;	
			  }
			  if(stationx==7)
			  {
			    stationx=0;
			  }	
			  KeyValue=0XFF;		  
			}
		   if(KeyValue==6 )
		    {
			  led=1;

			  stationx=station-1;
			  station--;
	
		      if(station==0XFF )
			   {
			    station=6;
			   }
			  if(stationx==0xff)
			   {				
				stationx=6;
			   }
			   KeyValue=0XFF;
			}
		   sendchar(staname[station]);
		   sendstring(longstring2);
		   sendstring(longstring3);
		   sendstring("\r\n");
		   stationow= station;
		   while(KeyValue==0XFF)
		       KeyDown();

上述的代码不做解释,懂的自然懂。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值