inter-ideograph;">图6-6 ESP8266连接USB转TTL
由站牌端(下图右串口号CO)建立服务器,建立成功后公交车端(下图左串口号CO)进行连接,测试站牌端和公交车端的WIFI模块是否能成功连接。
连接测试结果图如所示。
图6-7 WIFI模块连接测试
成功建立连接测试通过后,由站牌端发送相应的AT指令,向公交车端发送测试数据,测试站牌端是否能向公交车端成功发送数据。
站牌端数据发送测试如所示。
图6-8 站牌端发送数据测试
站牌端发送数据测试通过后,由公交车端发送相应的AT指令向站牌端发送测试数据,测试公交车端是否能成功发送数据。
公交车端数据发送测试图如所示。
图6-9 公交车端发送数据测试
6.3.3 LED模块
LED模块的主要功能是接收到站牌端发送过来的点亮信号“$”后进行点亮,之前属于熄灭状态。
LED连接单片机如0所示。
图6-10 LED连接单片机熄灭测试
若公交车端接收到点亮信号“$”后,LED开始点亮。站牌端点亮信号发送图如1所示,LED点亮测试图如2所示。
图6-11 站牌端点亮信号发送
图6-12 LED点亮测试
6.3.4 独立按键模块
独立按键模块测试在LED模块测试操作之后。点亮LED后,若按下独立按键,触发外部中断,LED是否点亮标志位,LED为熄灭状态。同时向服务端发送车辆到站指令“-”。
为了更好提现测试结果,将防抖延时延长至三秒,测试防抖功能是否有效。按下不足三秒LED点亮,服务端无数据接收,按键超过三秒LED熄灭,服务端收到“-”信号。
按键不足三秒,通过防抖验证判定本次按键触发为误操作,不进行任何信息的发送。服务端串口接收如3所示。
图6-13 按键不足三秒测试服务端接收
按键超过三秒,防抖验证通过,判定本次按键成功触发,LED由点亮状态变为熄灭状态。LED熄灭状态如4所示。
图6-14 按键超过三秒测试LED熄灭
按键超过三秒,通过防抖验证成功触发按键,公交车端向站牌端发送车辆到站信息“-”。
站牌端串口接收如5所示。
图6-15 按键超过三秒测试服务端接收
6.4 性能测试
本节将对系统进行性能测试。通过对系统进行正常运行以及模拟各种条件来测试系统的性能。
测试一步骤:正常运行系统。优先打开站牌端开关来符合实际的使用情况,之后站牌端刷卡,其次打开公交车端开关,用来模拟公交车辆到站的情况,收到信号后按下公交车端按键。
测试一预期:刷卡前站牌端LED熄灭,刷卡后点亮。公交车端打开后,等待建立连接。连接成功建立后,公交车端LED开始闪烁,之后按下公交车端按键,公交车端LED熄灭,站牌端LED熄灭。
测试一结果:运行符合预期,测试通过。
系统正常运行图如6所示。
图6-16 系统正常运行图
测试二步骤:优先打开公交车端开关,之后再打开站牌端开关进行刷卡操作。用来模拟站牌端断电,公交车辆到达站牌端的WIFI信号覆盖范围后站牌端才恢复通电情况。
测试二预期:打开站牌端开关后,没有刷卡时站牌端LED保持熄灭状态,刷卡成功站牌端LED后点亮。刷卡成功后,站牌端成功和公交车端建立连接并发送刷卡信息。
测试二结果:运行符合预期,测试通过。
优先打开公交车端未刷卡运行图如7所示。
图6-17 优先打开公交车端未刷卡运行图
测试三步骤:打开站牌端开关后,重复多次刷卡、站牌端接收、触发按键操作,测试系统的稳定性。
测试三预期:系统可以多次稳定工作,每次都可以成功进行刷卡,信息发送,信息提示,停止提示等功能。
测试三结果:连续五次完整操作,正常运行;连续十次完整操作,正常运行;连续二十次完整操作,正常运行。
测试四步骤:站牌端刷卡成功后,同时打开四个公交车端,其中三个用ES6模块模拟,通过串口工具观察。
测试四预期:四个以内公交车端连接,都可以接收到站牌端刷卡后发送的点亮LED信息。
测试四结果:公交车端接收到信息,LED点亮;第一块公交车模拟模块接收到信息;第二块公交车模拟模块接收到信息;第三块公交车模拟模块接收到信息。
6.5 本章小结
本章对智能站牌提醒系统进行了系统整体的测试和各个模块的测试。测试并实现了系统的整体功能。测试并实现了射频识别模块的刷卡功能、WIFI模块的站牌端和公交车端连接功能、WIFI模块站牌端数据发送功能、WIFI模块公交车端数据发送功能、LED模块点亮和熄灭功能、独立按键防抖的效果、独立按键熄灭LED功能、独立按键触发信号发送功能。
7 总结和展望
本章将结合系统的分析、设计和实现的过程,做出总结以及对系统进一步的展望。
7.1 总结
本系统以ST92单片机为主要的芯片对系统进行控制。通过Keil μVisio开发环境,使用C语言对系统代码进行编写。通过串口调试工具对各个模块进行调试和测试。本系统分为站牌端和公交车端,站牌端为服务端,主要信息采集模块通过MF R射频识别模块来实现。公交车端为客户端,服务端和客户端的交互通过ES6 WIFI模块来实现,通过ST92单片机的串口给ES6发送AT指令来实现服务端和客户端的信息交互。客户端的提示模块通过LED实现,单片机通过向LED发送低点位来对LED进行点亮,LED也拥有更小的能耗,从而降低成本。客户端信息采集功能主要通过独立按键模块进行实现,由公交车司机主动触发按键,来采集车辆到站信息。
7.2 展望
本设计虽然基本完成功能要求,但有些方面也需要进一步的研究和完善。
)在智能站牌提醒系统设计完成后,实现了对公交车司机提醒站台有乘客的功能,但是功能比较单一,如何实现对不同线路的定向提醒,和粗略统计刷卡乘客人数还有待进一步的学习。
)通过刷卡来采集信息较为局限,如何通过增加二维码和手机应用来作为信息采集方式需要进一步的研究和学习。
参考文献
] | 张凯华.公交信息管理系统的设计与实现[D].山东大学4. |
] | 盖宪坤.基于GPS的智能公共交通接收终端设计与实现[D].大连理工大学3. |
] | 唐山杰,杨永川,李艳玲,杜海军,程艳明,苑广军.一种多功能百叶窗系统的探索研究[J].中外企业家88)3. |
] | 魏东林,王泽层,安逸.基于单片机对生产管理看板的设计[J].山西电子技术54)45. |
] | 蒋冠宇,蒋泰,邓家明,张余明.一种超高频RFID读写器的设计与实现[J].大众科技572)03. |
] | 方绳岚,鲍志强.信息技术对供应链的支持体系研究[J].电子世界33). |
] | 曹惠茹,黄晓锋,许建强,邵泽宁,庄健怡.新型养老环境下的药品投送机器人系统[J].计算机系统应用876). |
] | 刘英男.基于GPRS电动汽车充电桩控制系统的研究[D].西安工业大学,4. |
] | 高无为.基于地理位置的参与式感知服务在智能公交系统中的应用[D].北京邮电大学8. |
0] | 朱鹏.基于ST92RC的智能安防小车WIFI监控系统的设计与实现[J].电脑知识与技术844). |
1] | 徐文政.智能家居室内空气质量检测评价与监控系统设计[D].北京工业大学7. |
2] | 王伟.基于ST2的大功率LED老化电源的设计[D].浙江工业大学7. |
3] | 朱冰.消防验收办公自动化系统的设计与实现[D].电子科技大学7. |
4] | 王翔.FBG扭振式黏度测量方法研究[D].天津大学2. |
5] | 韩振伟,马庆军.一种辐射定标光源LED驱动电路[D].电脑知识与技术4. |
6] | 王永富.某型飞机空调系统气密性地面检测设备的设计[D].西京学院,7. |
7] | 冯腾蛟.基于电力线载波通信的家庭能量管理技术研究[D].河北科技大学,4. |
8] | 李冉.传承亳商精神,提升大学生创业能力的影响研究[D].亳州学院,8. |
9] | Zhuofeng Zhao,Jun Fang,Weilong Ding,Jianwu Wang.An Integrated Processing Platform for Traffic Sensor Data and Its Applications in Intelligent Transportation Systems[P].Services (SERVICES)4 IEEE World Congress on4. |
0] | Miguel A.Zamora-Izquierdo,José Santa,Juan A.Martínez,Vicente Martínez,Antonio F.Skarmeta.Smart farming IoT platform based on edge and cloud computing[J].Biosystems Engineering8. |
致 谢
本毕业设计(论文)的工作是在田春子老师的悉心指导下完成的,田春子老师严谨的治学态度和科学的工作方法给了我极大的帮助和影响。在此衷心感谢四年来田春子老师对我的关心和指导。
田春子老师悉心指导我们完成了毕业设计(论文),在学习上和生活上都给予了我很大的关心和帮助,在此向田春子老师表示衷心的谢意。
王振朝老师对于我的毕业设计(论文)都提出了许多的宝贵意见,在此表示衷心的感谢。
在撰写毕业设计(论文)期间,苗金宇、张锋瑞等同学对我毕业设计(论文)中的研究工作给予了热情帮助,在此向他们表达我的感激之情。
另外也感谢家人,他们的理解和支持使我能够在学校专心完成我的学业
,5 系统实现
通过对本设计进行系统分析和系统设计,运行程序将本设计进行实现。本设计系统分为站牌端和公交车端,本章将对两端分别进行实现。本设计的系统框架图如所示。
图5-1 系统框架图
5.1 射频识别模块功能实现
站牌端信息的采集主要通过射频识别模块来实现。射频识别模块针脚定义代码如下。
//MF RC522针脚定义
sbit MF522_NSS = P3^2;//片选信号
sbit MF522_SCK = P3^3;//时钟信号
sbit MF522_SI = P3^4;//信号输入端
sbit MF522_SO = P3^5;//信号输出端
sbit MF522_RST = P3^6;//复位
在射频识别模块实现的过程中,首先要对系统及射频识别模块进行初始化,定义各个引脚的功能,之后再对模块进行实现。
本设计采用的卡片均为符合ISA标准的卡片。射频识别模块与单片机之间的通信采用普通IO口来模拟SPI通信。
站牌端系统及射频识别模块初始化代码如下。
/***初始化***/
void MainInit(void)
{
SCON=0X50;//设置为工作方式1
TMOD=0X20;//设置计数器工作方式2
PCON=0X00;
TH1=0XFD;//9600波特率
TL1=0XFD;
TR1=1;//启动定时器/计数器1
PcdReset();//MF RC522复位
PcdAntennaOff();//关闭天线
PcdAntennaOn();//打开天线
M500PcdConfigISOType( 'A' );//设置工作方式ISO14443A
}
系统及射频识别模块初始化完成后,射频识别模块开始寻卡。寻卡方式分为寻感应区内所有符合ISA标准的卡和寻未进入休眠状态的卡。本系统刷卡一次就会向公交车端发送信息,因此寻卡成功一次后进入休眠即可,因此寻卡方式为寻为进入休眠状态的卡。
寻卡成功后进行防冲突操作,选定卡片成功后将卡片休眠,等待建立连接。连接成功建立后,开始发送数据,直到收到停止发送指令。是否建立连接及是否发送数据的标志位定义代码如下所示。
#define uint unsigned int
//标志位定义
uint fasong = 0;//是否向客户端发送,0否,1是
uint lianjie = 0;//判断是否连接,0否,1是
射频识别寻卡相关代码如下所示。
/***RFID相关操作***/
void Auto_Reader(void)
{
while(1)
{
if(PcdRequest(0x26,Temp)==MI_OK) //寻卡,成功后Temp数组为卡类型
{
if(PcdAnticoll(UID)==MI_OK) //防冲突,UID数组数据为卡序列号
{
if(PcdSelect(UID) == MI_OK) //选定卡片
{
PcdHalt();//卡片休眠
Display();
fasong = 1;
//刷卡信息发送代码
}
}
} else {
//寻卡失败
;
}
}
}
射频识别模块寻卡,读卡成功后,为了方便乘客的观察,在对卡片休眠的操作同时,射频识别模块同时点亮一个LED,代表已经有乘客刷卡,方便乘客观察刷卡是否成功,同时方便其他乘客观察当时站牌端是否已经刷卡。
射频识别模块LED针脚定义如下所示。
//刷卡提示LED
sbit t0 = P2^0;
射频识别模块LED点亮和关闭代码如下所示。
/***点亮提示LED***/
void Display(void)
{
t0 = 0;
}
/***关闭提示LED***/
void Undisplay(void)
{
t0 = 1;
}
5.2 WIFI模块功能实现
ESP8266 WIFI模块在本系统中主要负责站牌端和公交车端的通信。互相为对方发送相应的指令来对系统进行实现。
STC89C52单片机通过串口来控制ESP8266模块,单片机的RXD,TXD引脚分别连接ESP8266模块的TXD,RXD,即单片机的输出作为ESP8266模块的输入,单片机的输入来自于ESP8266模块的输出。单片机对于ESP8266模块的控制主要通过AT指令来实现。
站牌端和公交车端WIFI模块准备工作由模块通过串口连接计算机完成,准备工作AT指令如下所示。注意,注释在此仅为说明,注释形式不保证正确,调试时不可添加注释。
//站牌端准备工作AT指令
AT+CWSAP="ESPZHANPAI","123456",1,0 //设置站牌端WIFI名称和密码
AT+CWMODE=3 //STA+AP模式
AT+RST //以上配置重启生效
//公交车端准备工作AT指令
AT+CWMODE=1 //STA模式
AT+RST //以上配置重启生效
站牌端WIFI模块初始化代码如下所示。
/***WIFI模块初始化***/
void WIFIInit()
{
CALL_isr_UART();
printf("AT+CIPMUX=1\r\n");//启动多连接
delay_1000ms;
printf("AT+CIPSERVER=1,8089\r\n");//建立服务器
delay_1000ms;
CLOSR_isr_UART();
}
站牌端串口初始化代码如下所示。
/***串口初始化***/
void UartInit()
{
//开启串口中断
ES = 1;
//允许中断
EA = 1;
}
站牌端WIFI模块通过串口主要接收两种信号来对站牌端系统进行控制,分别为公交车端反馈回来的停止发送数据指令和公交车端反馈回来的已经建立连接指令。站牌端接收到以上两种指令后再改变相关标志位。若站牌端接收到停止发送数据指令,改变标志位的同时将站牌端射频识别模块的LED熄灭。站牌端串口中断代码如下所示。
/***串口中断***/
void wifitx() interrupt 4
{
uchar temp;
ES = 0;//关闭中断
if(RI)//RI为1代表有数据接收
{
RI = 0;
temp = SBUF;//SBUF为接收到的数据
//停止发送数据指令
if(temp == '-')
{
fasong = 0;
Undisplay();//熄灭射频识别模块LED
PcdReset();//MF RC522复位
PcdAntennaOff();//关闭天线
PcdAntennaOn();//打开天线
M500PcdConfigISOType( 'A' );//设置工作方式ISO14443_A
}
//建立连接指令
if(temp == '*')
{
lianjie = 1;
}
}
ES = 1;//开启中断
}
站牌端若刷卡后,连接到公交车端,则不断向公交车端发送点亮公交车端LED进行提示的信息。为保证信息发送成功,同时向可能连接的四个公交车端发送点亮LED信息。站牌端WIFI模块发送点亮LED信息代码如下所示。
//点亮LED信息发送
while(1 == fasong)
{
if(0 == fasong)
{
break;
}
if(1 == lianjie)
{
//DelayMs(2000);
CALL_isr_UART();
printf("AT+CIPSEND=0,1\r\n");//反馈连接成功信息
delay_250ms; //同时向四个可能链接的客户端发送
printf("$\r\n");
delay_250ms;
printf("AT+CIPSEND=1,1\r\n");
delay_250ms;
printf("$\r\n");
delay_250ms;
printf("AT+CIPSEND=2,1\r\n");
delay_250ms;
printf("$\r\n");
delay_250ms;
printf("AT+CIPSEND=3,1\r\n");
delay_250ms;
printf("$\r\n");
delay_250ms;
CLOSR_isr_UART();
}
if(0 == fasong)
{
lianjie = 0;
break;
}
}
公交车端所需标志位定义,系统初始化代码和WIFI模块初始化代码如下所示。
//标志位定义
//判断LED是否点亮,1点亮,0熄灭
uint ledyn = 0;
//判断是否连接,1是,0否
uint lianjie = 0;
/***初始化***/
void MainInit(void) //9600bps@11.0592MHz
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X00;
TH1=0XFD; //9600波特率
TL1=0XFD;
TR1=1;
}
/***WIFI模块初始化***/
void WIFIInit(void)
{
CALL_isr_UART();//直接使用printf必须加入此句才能实现发送
printf("AT+CWJAP=\"ESPZHANPAI\",\"123456\"\r\n");//连接WiFi
delay_10000ms;
printf("AT+CIPSTART=\"TCP\",\"192.168.4.1\",8089\r\n");//连接服务器
delay_2000ms;
printf("AT+CIPSEND=1\r\n");//准备发送发送数据
delay_200ms;
printf("*\r\n");//已连接
delay_200ms;
CLOSR_isr_UART();
if(0 == ledyn)
Undisplay();
}
/***中断,串口初始化***/
void UartInit(void)
{
ES = 1;//开启串口中断
EX0 = 1;//开启外部中断0
IT0 = 1;//设置成低电平触发,1为下降沿触发
EA = 1;//允许中断
}
公交车端WIFI模块通过串口主要接收点亮LED信号来对站牌端系统进行控制,若公交车接收到点亮LED信号,则点亮LED对司机进行提示。站牌端串口中断代码如下所示。
/***串口中断***/
void wifitx0() interrupt 4
{
uchar Data;
ES = 0;
if(0 == ledyn)
Undisplay();
if(RI)
{
RI = 0;
Data = SBUF;
if(Data == '$')
{
ledyn = 1;//点亮LED
}
}
ES = 1;
}
5.3 LED模块功能实现
LED模块为公交车端主要的提示模块,LED模块针脚定义代码如下所示。
//LED针脚定义
sbit t1 = P2^0;//L1灯
sbit t2 = P2^1;//L2灯
由于本系统中ST92单片机引脚为低电位有效,因此LED负极接和引脚,正极接高电位。单片机输出低点位时,LED点亮;单片机输出高电位时,LED熄灭。为了达到更好的提示效果,本系统采用两个LED以灭灭,灭亮,亮亮,亮灭四种状态不断循环来点亮,并在每两种状态之间秒的延时。LED点亮和熄灭代码如下所示。
/***LED点亮***/
void Display(void)
{
t1 = 1;
t2 = 1;
delay_500ms;
t1 = 1;
t2 = 0;
delay_500ms;
t1 = 0;
t2 = 0;
delay_500ms;
t1 = 0;
t2 = 1;
delay_500ms;
}
/***LED熄灭***/
void undisplay()
{
t1 = 1;
t2 = 1;
}
公交车端系统通过判断是否点亮LED标志位的值,来判断是否对LED进行点亮,公交车端主要系统主要运行代码如下所示。
/***公交车端LED相关操作***/
void Auto_LED(void)
{
//循环,等待时候点亮LED
while(1)
{
if(1 == ledyn)
{
Display();//点亮LED
}
else
{
Undisplay();//熄灭LED
WIFIInit();
}
}
}
5.4 独立按键模块功能实现
独立按键模块是公交车端的主要的信息采集模块,独立按键模块针脚定义代码如下所示。
//独立按键针脚定义
sbit k0 = P3^2;//按键
当公交车到站停车后,由司机主动按下按键代表已接收到站牌处有乘客的信息。按下按键后ST92单片机触发外部中断,程序进入中断子程序。
为了防止车辆颠簸和误触等外部原因造成外部中断的触发,按键设0毫秒的防抖。当按下按键后,延0毫秒,若按键还为按下状态,则为司机主动触发按键;若经0毫秒的延时按键为未按下状态,则判定为误触,不进行成功触发中断后的操作。
若成功触发按键,外部中断中将LED熄灭,公交车端向站牌端发送车辆到站,停止向公交车端发送信息的指令,之后关闭公交车端和站牌端之间的连接。
按键外部中断代码如下所示。
/***按键触发外部中断1***/
void t0int() interrupt 0
{
EX0 = 0;
DelayMs(20);
if(k0 == 0)//延时20ms消抖
{
lianjie = 0;//关闭连接
ledyn = 0;//灭灯
undisplay();
CALL_isr_UART();
printf("AT+CIPSEND=1\r\n");//准备发送发送数据
delay_200ms;
printf("-\r\n");//发送数据
delay_200ms;
printf("AT+CIPCLOSE\r\n");//关闭连接
delay_200ms;
CLOSR_isr_UART();
}
EX0 = 1;
}
5.5 本章小结
通过系统的分析和设计,本章对系统进行了实现。分别将各模块的引脚定义的代码进行说明,以及各模块具体实现的代码进行了说明。本系统延时功能通过定时来产生,并通过宏定义,定义好需要用到的延时时间。波特率通过计数来产生。在WIFI模块的实现中,将实现前的站牌端和公交车端WIFI模块准备工作的AT指令进行了说明。本系统WIFI信息的收发通过触发串口中断产生,按键相关功能通过触发外部中断进行。通过本章完成了对系统的实现,准备完成系统进一步的测试工作。
6 系统测试
系统的实现完成后,开始进行对系统的测试工作。测试的目的在于发现系统中的问题,并进行改进,保证系统的质量。本章将对系统从系统整体功能和模块功能两个方面进行测试。
6.1 软件平台
本系统代码在Keil μVisio中进行编写和编译工作。编译成功后生成hex文件,进行烧录。Keil μVisio图标和工作窗口如所示。
图6-1 Keil μVision4图标
图6-2 Keil μVision4工作窗口
本系统的串口相关调试工作,使用串口网络调试工具来完成。串口网络调试工具工作窗口如所示。
图6-3 串口网络调试工具工作窗口
6.2 硬件测试
硬件测试的目的是检测系统的硬件模块中是否存在问题,以及整体的电路连接是否存在问题3]。
在测试的过程中首先观察各个模块以及连接线是否完整,有无破损情况。其次检查连接点之间的连接点和电路的焊点是否成功连接,有无断开等情况。再将每个模块按规定的电压供电,按规定连接模块的高电位和接地端,测试模块是否能成功供电。
以上测试通过后,将测试代码进行烧录,来测试各模块能否按照预期进行正常的工作。
最后烧录完整的系统程序,进行相关调试和测试工作。
6.3 模块功能测试
模块功能测试主要测试各模块的功能是否实现,在一些模块的测试中,可以使用串口调试工具来观察模块是否成功发送和接收以及发送和接收的信号是否符合预期。
6.3.1 射频识别模块
打开站牌端电源,将公交车端WIFI模块通过串口直接连接电脑。打开串口调试工具,测试是否能成功刷卡,若刷卡成功,射频识别模块LED保持常亮窗台,公交车端接收到点亮公交车端LED信号“$”,由串口工具接收并展示该信号。
射频识别刷卡读卡测试图和串口调试工具成功接收点亮LED信号图如,所示。
图6-4 射频识别模块刷卡测试
图6-5 成功接收刷卡信号图
6.3.2 WIFI模块
WIFI模块之间的成功通信是本设计能成功实现的基础。测试中通过将ES6 WIFI模块使用USB转TTL工具和电脑直接连接,由串口工具发送AT指令来测试是否能成功通信。
ES6连接USB转TTL如所示。