收藏和点赞,您的关注是我创作的动力
概要
结合系统的功能,完成了单片机外围电路的设计,LCD1602液晶显示外围电路设计,短信模块外围电路设计,GPS模块外围电路设计,电源与按键控制电路设计。在电路设计的基础上,进行了相关程序设计,实现单片机与GPS模块之间的数据通信,实现了数据与工作状态在液晶显示器上实时显示,在按键按下的时候,系统能够进行按键识别,并通过短信模块发送位置信息。最后进行了电路板的焊接与调试,完成了程序的烧录和调试。
经过实践验证,结果表明基于单片机的老人防丢系统在遇到老人们记忆力差,小孩子没有行动能力,故容易迷路和走失时,系统会发送位置信息给家属,家属收到短信后就可以快速找到老人或小孩。能够有效的保证老人孩子的安全。
关键词:定位; 单片机; LCD; GPS
一、系统总体架构
1.1方案设计与选择
基于单片机的老人防走丢系统主要目的是为了告知老人或其家属老人目前所处的位置,在老人迷路的时候,确保家属在第一时间能找到老人,避免意外发生。
针对上述需求,初步设计了两种方案,方案一是依托GPS模块获取老人的位置,再通过配置运动传感器实现对老人的计步监测等功能,为了使老人亲友能够知道老人的位置,可以通过网络将信息更新到使用者的手机APP上。
第二种方案是以单片机为处理器,对GPS定位信息进行接收处理,可以在系统液晶显示屏上实时看到自己所处的位置以及当前时间。系统中预留了一个使用者亲友的手机号,在使用者需要亲友帮助的时候可以按一下系统上的开关按键,即可发送一条包含自己所处位置的经纬度信息给自己的亲友,这样亲友就能迅速的得到使用者的位置信息,并迅速赶到使用者所处的位置,由此避免老人走丢。
对上述两种方案进行对比,首先是从系统复杂度上进行考虑,方案一中需要添加一些传感器,这必然会增加系统硬件的设计复杂度,对这些数据进行处理又会增加软件复杂度;其次我们从实现及使用上来讲,通过短信的形式给亲友发送短信,要比通过网络更新数据更为可靠,因为按键操作对老人来说相对比较容易。
1.2 系统架构设计
如图1.1所示为基于单片机的老人防丢系统的系统架构框图,系统以STC89C52单片机作为中央处理器,使用GPS模块来采集数据并将数据发送给单片机,单片机对所得到的数据信息进行接收并提取,然后根据定位计算公式得出当前位置的经纬度信息和时间信息。计算得到的位置信息送交给LCD液晶进行实时显示。为了让使用者的亲友可以知道使用者的位置,通过SIM900A模块发送短信到设定的手机号上,将检测到的经纬度和时间信息展示在短信上[6]。
1、电路供电部分:整个电路基本工作电压为5V,单片机烧写程序可通过TTL线进行串行下载。这一点比AT的单片机要好,因为AT单片机是不支持串行下载的,需要通过专门的下载器进行下载。
2、人机交互:通过SIM900A模块,将单片机和手机进行短信通信,手机上可以显示采集到的时间和经纬度信息。单片机通过串口发送相应的命令到SIM900A模块,SIM900A模块发送短信到代码中设定好的手机号上,短信内容为“当前用户所在位置的经度为:xxx,纬度为:xxx,时间为:xxx”[7]。
3、信号处理:以STC89C52单片机为处理器,对GPS模块得到的数据进行收集以及分析运算。最后将处理后得到的经纬度和时间信息送交给LCD液晶进行实时显示。
4、数据采集:基于单片机的老人防丢系统首先需要得到老人所处的位置信息,通过GPS接收模块,获取定位信息,让后送交给单片机进行数据处理。
5、数据展示:为了便于使用者能知道自己的位置和当前时间,单片机对数据进行处理以后,送交给LCD1602液晶显示屏,对得到的当前测试地的经纬度及时间的信息进行显示,同时在系统过程中,显示“GPS扫描”、“短信发送中”、“发送成功”等状态,便于用户使用。如图1.1所示为基于单片机的老人防丢系统架构。
图1.1 基于单片机的老人防丢系统架构
二、 系统软件流程设计
3.1 系统总体流程
在当整个基于单片机的老人防丢系统运行时,首先是各部分的初始化,要完成包括单片机的中断设置、串口通信设置、LCD液晶初始化等。
当初始化完成后会各个模块开始工作,GPS模块运行,采集观察点到卫星之间的距离,通过引脚串口将数值发送给单片机,单片机根据定位公式,计算出该点所在的经纬度和时间等信息[16]。
单片机将解算好的时间、位置信息送交个LCD1602液晶显示屏进行实时显示。与此同时,单片机将信息有一个发送数组进行存储,并判断系统的开关按键是否按下,当检测到按键按下时,单片机将发送数组的信息以串口的形式送交给短信模块,短信模块将发送给短信到设定的手机号上。
图3.1 系统程序架构
三、实物
附录1 元器件清单
附录2 源程序清单
附录2 源程序清单
#include "common.h"#include "uart.h"#include "gps.h"#include "gsm.h"#include "lcd.h"
uchar ess_inc;
sbit key = P1^0;
GPS_INFO GPS; //GPS信息结构体
bit GPS_rx_flag = 0;
#define SEND_NUMBER "AT+CMGS=\"15754344981\"\r\n"//在此修改手机号码
char xdata send_data[37]="N: ',E: ',2000-00-00,00:00\r\n";//短信内容
unsigned char send_len= 0;
bit sendflag=0;//短信发送标志
void GPS_DispTime(void) 显示时间
{
uchar i = 0;
uchar ch;
char time[5];
Int_To_Str(GPS.D.year,time);//年
LCD1602_Set_AC(0, 1);//显示坐标
i = 0;
send_len = 18;
while(time[i] != '\0')//等待字符串处理完
{
ch = time[i++];
LCD1602_write_data(ch);//显示信息
send_data[send_len++] = ch;//短信内容信息装载
}
LCD1602_write_data('-');
Int_To_Str(GPS.D.month,tim