硬件电路的设计
(下方附文件)
系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STC89C52单片机电路+ADXL345加速度传感器电路+按键电路+蜂鸣器报警电路+DS18B20温度传感器电路+LED灯电路+GSM模块电路+电源电路组成。
1、板子竖直放置的时候,蜂鸣器不报警,板子歪倒一定角度,则蜂鸣器鸣叫报警。一段时间约15s未回复正确状态,GSM发送报警信息给手机:Help me!!。
2、如果温度超过38度,蜂鸣器报警,持续温度过高约15s左右,同时短信报警:has a cold
3、设计带有误报警按键,蜂鸣器报警的时候,如果老人认为是误报警,则按键按下,蜂鸣器停止报警,如果持续问题存在还会报警。
4、短信处理过程有指示灯显示。
5、GSM模块是SIM800A,该模块和SIM900A电路程序完全兼容外观外形一模一样。
3.1.2系统总体结构
本系统具体框图如下图所示:
原理图:
GSM_SIM800A模块电路设计
GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块具有发送SMS短信,语音通话,GPRS数据传输等基于GSM网络进行通信的所有基本功能。简单来讲,GSM模块加上键盘、显示屏和电池,就是一部手机。
SIM800A是SIMCOM公司推出的一款高性能工业级 GSM/GPRS 模块, 该模块具有极高的性价比,在双频的市场中占据极大份额。
GSM_SIM800A模块采用高性能工业级GSM/GPRS模块:SIM800A,工作频段:GSM900/1800MHz。硬件设计在官方设计上加以优化,采用高效开关电源供电,SIM卡采用主流的卡座,质量更坚固。GSM_SIM800A模块在外围硬件的设计上参考了SIM800A 模块的硬件设计指南,对板子的电源、保护和抗干扰上做足了功夫。电源采用开关电源模块供电,电源利用效率高。
模块应用领域:远程监控、远程智能抄表、智能家居和车载设备等远程通讯设备。
SIM800A是一款两频GSM/GPRS模块,为SMT封装。其性能稳定,外观小巧,性价比高,能满足客户的多种需求。SIM800A工作频率为GSM/GPRS 900/1800MHz,可以低功耗实现语音、SMS和数据信息的传输。SIM800A尺寸为24243mm,能适用于各种紧凑型产品设计需求。
一、主要特性
(1)两频900/1800MHz
(2)GPRS multi-slot class 12/10
(3)GPRS mobile station class B
(4)满足GSM 2/2+ 标准
– Class 4 (2W @900MHz)
– Class 1 (1W @1800MHz)
(5)尺寸: 24243mm
(6)重量: 3.1g
(7)通过AT命令控制(GSM 07.07 ,07.05 and SIMCOM 增强AT命令集)
(8)SIM应用工具包
(9)供应电压范围: 3.4 ~ 4.4V
(10)低功耗
(11)操作温度范围: -40℃ ~ 85℃
(12)数据传输GPRS class 12:最大85.6 kbps(下行速率)
(13)CSD达14.4 kbps
(14)140USSD
(15)非透传
二、在短信应用方面有如下特点
(1)点对点MO and MT
(2)短信广播
(3)文本和PDU模式
三、模块接口说明
(1)5V 接5V
(2)GND 接GND
(3)R 串口接收端,与模块通信用的
(4)T 串口发送端,与模块通信用的
四、模块使用说明
(1)开机异常或自动关机
如果发生如下现象:
a、上电后,看到绿灯开始闪烁,很快又灭了,关机了;
b、开机正常后,发送短信进行数据传输时突然就关机了;
以上现象在保证 SIM 卡正常时,一般都是供电不足造成的。
电源请保证以下几点:
a、电压为5V,电压过低,模块会不工作。
b、电流需保证能提供2A的峰值。开机和数据传输过程电流较大,输出电流不够会造成电压跌落,而关机。
c、电源电流纹波不要过大,电压波动大,模块也会关机。
模块接口原理图如下图所示。
软件
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <math.h> //Keil library
#include"delay.h"
#include"18b20.h"
#include "adxl345.h"
sbit buzzer=P1^4; //定义接口
sbit key=P2^2;
sbit led_gsm=P1^1;
unsigned long times_20ms=0; //定时20ms计时
unsigned char shaidaoFlag=0; //发送消息标志
unsigned char read_adxl345=0; //读取标志
unsigned char sdDelaySec=0; //摔倒计时
unsigned char readTem=0; //读取温度
unsigned char hotDelaySec=0; //温度过高计时
unsigned char hotFlag=0; //温度过高标志
unsigned char i;
void Init_Timer0(void);//函数声明
void UART_Init(void);
void uartSendByte(unsigned char dat);
void uartSendStr(unsigned char *s,unsigned char length);
void main (void)
{
static unsigned char ErrorNum=0; //adxl345数据判断结果计数
static unsigned char CheckNum=0;
float temperature=0.0;
Init_Timer0(); //定时器0初始化
UART_Init();
led_gsm = 0;
for(i=0;i<20;i++) //短暂延时gsm稳定
{DelayMs(100);}
Init_ADXL345(); //初+始化ADXL345
Single_Read_ADXL345(0X00); //读出的数据为0XE5,表示正确
uartSendStr("AT+CMGF=1\r\n",11);
buzzer=1;
led_gsm =1;
while(1) //主循环
{
if(readTem==1) //定时读取温度标志
{
readTem=0;
temperature=(float)ReadTemperature()*0.0625; //读取温度
if(temperature>=38.0) //温度过高
{hotFlag = 1;}//温度过高标志
else
{hotFlag=0;} //清除温度过高标志
if(hotFlag == 1) hotDelaySec++;//温度过高计时 1s处理一次
else hotDelaySec = 0;//否则清零
if(shaidaoFlag == 1) sdDelaySec++;//温度过高计时 1s处理一次
else sdDelaySec = 0;//否则清零
}
if(read_adxl345==1)
{
read_adxl345=0;
ReadData_x();
CheckNum++;
if((temp_X<450)||(abs(temp_Y)>750)) //方位值判断 查看正常次数
{
ErrorNum++;
}
if(CheckNum>=5) //进行5次处理
{
if(ErrorNum>1) //3次以上正常情况 不进行上报
{shaidaoFlag =1;}//摔倒标志
else
{shaidaoFlag =0;}//清楚 摔倒标志
ErrorNum=0; //清空滤波计数
CheckNum=0; //清除总计数
}
}
if((hotFlag == 1)||(shaidaoFlag == 1))//有异常
{buzzer= 0;}
else buzzer=1; //关闭蜂鸣器
if((hotDelaySec>=15)||(sdDelaySec>=15))//15S 上报
{
led_gsm=0;
uartSendStr("AT+CMGF=1\r\n",11);
for(i=0;i<3;i++) //短暂延时gsm稳定
{DelayMs(100);}
uartSendStr("AT+CSCS=\"GSM\"\r\n",15);
for(i=0;i<3;i++) //短暂延时gsm稳定
{DelayMs(100);}
uartSendStr("AT+CMGS=\"+8618105140357\"\r\n",26); //可以修改电话号码
// SendStr("AT+CMGS=\"+8615706086115\"\r\n",26); //可以修改电话号码
for(i=0;i<2;i++) //短暂延时gsm稳定
{DelayMs(100);}
if(hotDelaySec>=15)
{
uartSendStr("Has a cold!",11); //可以修改短信内容,11代表短信内容长度,不可以发汉字,如果发汉字的话,需要转化为特定的码
hotDelaySec=0; //清除计数
}
if(sdDelaySec>=15)
{
uartSendStr("Help me!!",9); //可以修改短信内容,9代表短信内容长度
sdDelaySec = 0;//清除计数
}
for(i=0;i<2;i++) //短暂延时gsm稳定
{DelayMs(100);}
uartSendByte(0x1a);uartSendByte(0x1a);
for(i=0;i<30;i++) //短暂延时gsm稳定
{DelayMs(100);}
led_gsm=1;
}
if(key==0)
{
hotFlag=0; //上报过热标志清零
shaidaoFlag=0; //摔倒标志 清零
buzzer=1; //关闭蜂鸣器
}
}
}
.
链接:https://pan.baidu.com/s/1F0WtP7gEZpGa6XQobYnAIA
提取码:vgsc
.