54-基于51单片机GSM模块的家庭防火防盗报警系统

news/2024/10/18 2:38:20/

1、具体介绍

本设计由DS18B20温度传感器+MQ-2烟雾传感器+HC-SR501人体红外模块+SIM800C GSM模块+LCD1602显示屏组成。

功能介绍:

(1)可检测环境温度、烟雾浓雾和人体信号并通过显示屏显示;

(2)可通过按键设置报警值,当检测值超过报警值时进行报警;

(3)报警可通过LED+蜂鸣器现场报警,显示屏显示报警内容;还可通过GSM模块实现远程报警,短息可显示不同报警内容。

2、实物图:

3、电路图:

4、部分代码

#include<reg52.h>
#include<intrins.h>
#include "sim800.h"	
#define uchar unsigned char
#define uint  unsigned int
#define K_MG_MV    120/66 
typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable 	  无符号8位整型变量  */
typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable 	  无符号16位整型变量 *//********测试GSM是否启动**********/
int test_boot;
/********测试GSM是否注册网络**********/
int test_net_register;
/********GSM串口接收数据缓存**********/
unsigned char idata GSM_receive[60];
/********GSM串口接收计数器**********/
unsigned char  GSMDATA_count;
unsigned char *content_temp =  "Warning: over temperature\r\n";
unsigned char *content_smoke = "Warning: excessive smoke concentration\r\n";
unsigned char *content_body =  "Warning: body entry\r\n";unsigned char str_yw[12];//烟雾值
unsigned char T_baojing = 30;  //温度报警值
unsigned int  C_baojing = 500; //烟雾浓度报警值unsigned char T_buff[3];  //报警缓存
unsigned char H_buff[3];
unsigned char C_buff[4];bit  sf_flag=0; //设防标志
unsigned char moshi=0;
unsigned char data1;
long Value;sbit bADcs=P3^4;
sbit bADcl=P3^6;
sbit bADda=P3^5;sbit  sf_led = P1^3;//   设防指示灯
sbit  shefang= P1^4;//   设防按键
sbit  shezhi = P1^5; //  设置
sbit  jia    = P1^6; //	 加
sbit  jian   = P1^7; //  减	
sbit  BUZZER = P2^0; //  LED蜂鸣器
sbit  Infra	 = P3^2; //  人体红外模块unsigned char IntToString(unsigned char *str, int dat);
extern bit Start18B20();
extern bit Get18B20Temp(int *temp);				//	  ;;;;;、‘       
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
float intT, decT;  //温度值的整数和小数部分long kssj()   //开始收集{unsigned char i;bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.bADcl=0;bADda=1;bADcl=1;bADcl=0;//i downbADda=1;bADcl=1;bADcl=0;	//   2 downbADda=0;bADcl=1;bADcl=0;	//   3 downbADda=1;bADcl=1;bADcl=0;	//   4 downfor(i=8;i>0;i--){data1<<=1;bADcl=0;bADcl=1;if(bADda==1) data1|=0x01;bADda=1;}bADcs=1;Value=data1*1.0/256*500;Value=Value*K_MG_MV;Value=Value-5;if(Value<0)Value=0;return Value;}void Key_set_scan()
{if(shezhi==0){Delay_Ms(10);if(shezhi==0){  while(!shezhi);InitLcd1602();     //初始化液晶moshi++;if(moshi >= 3)moshi = 0;if(moshi == 0){LcdShowStr(0, 0,"T:   C");LcdShowStr(7, 0,"C:    PPM");}else if(moshi == 1){LcdShowStr(0, 1,"Set_T:   C");}else if(moshi == 2){LcdShowStr(0, 1,"Set_C:    PPM");}		   	}}if(jia==0){Delay_Ms(10);if(jia==0){ 	 while(!jia);if(moshi==1){T_baojing++ ;if( T_baojing>=99 )T_baojing =99;}if(moshi==2){C_baojing++ ;if( C_baojing>=999 )C_baojing =999;}		}}if(jian == 0){Delay_Ms(10);if(jian == 0){while(!jian);if(moshi==1){T_baojing-- ;if( T_baojing<=0 )T_baojing =0;}if(moshi==2){C_baojing-- ;if( C_baojing<=0 )C_baojing =0;}}}if(shefang == 0){Delay_Ms(10);if(shefang == 0){ while(!shefang);sf_flag =~ sf_flag;if(sf_flag == 1) //开启设防		    sf_led = 0;else 			 //关闭设防{ sf_led = 1;BUZZER = 1;}}}}
void wendu()
{ bit res;int temp;  //读取到的当前温度值unsigned char len;unsigned char str_wd[5];   //温度缓冲区Get18B20Temp(&temp);  //读取当前温度res = Get18B20Temp(&temp);  //读取当前温度if (res)                    //读取成功时,刷新当前温度显示{		intT = temp >> 4;          //分离出温度值整数部分decT = temp & 0xF;         //分离出温度值小数部分len = IntToString(str_wd, intT); //整数部分转换为字符串str_wd[len++] = '.';             //添加小数点decT = (decT*10) / 16;        //二进制的小数部分转换为1位十进制位str_wd[len++] = decT + '0';   //十进制小数位再转换为ASCII字符str_wd[len] = '\0';              //添加字符串结束符LcdShowStr(2, 0, str_wd);        //显示到液晶屏上}Start18B20();
}
/************主函数****************/
void main()
{ unsigned char i;sf_flag = 0;Uart_Init();InitLcd1602();     //初始化液晶Start18B20();LcdShowStr(0,0,"  System init   ");LcdShowStr(0,1,"  please wait   ");for(i = 0;i < 15;i++)//等待网络稳定{Delay_Ms(1000);}InitLcd1602();  LcdShowStr(0, 0,"T:   C");LcdShowStr(7, 0,"C:    PPM");
//		//测试是否已经开机,同时自适应波特率
//	while(test_boot==No)
//	{
//		Send_String("AT\r\n");	
//		Delay_Ms(100);
//	}
//		test_boot=No;
//
//	//测试是否注册到网络
//	while(test_net_register==No)
//	{
//		Send_String("AT+CREG?\r\n");	 
//		Delay_Ms(100);	
//	}
//	test_net_register=No;Receive_message();      //配置成接受短信模式while(1){Key_set_scan();//按键扫描if(moshi == 0)	  //设置模式切换{kssj();   //开始收集 ,电压采集检测烟雾浓度Value =  Value-100;//烟雾浓度校准IntToString(str_yw,Value); //转换成字符串LcdShowStr(9, 0, str_yw); //烟雾浓度显示到液晶屏上wendu();	 //温度检测并显示if(sf_flag == 1) //当开启设防时{if(Value>=C_baojing||intT>T_baojing||Infra==1)   //有触发报警{ BUZZER = 0;Delay_Ms(1000);LcdShowStr(0, 1,"                ");												     if(intT > T_baojing){ 			  /*1234567890123456*/LcdShowStr(0,1,"temp");Send_message(content_temp);	  //发温度超标短信}  else  LcdShowStr(0, 1,"    ");	if(Value >= C_baojing)     { 				/*1234567890123456*/LcdShowStr(5,1,"smoke");  Send_message(content_smoke);	  //发烟雾浓度超标短信}  else  LcdShowStr(5, 1,"     ");if(Infra == 1)        { 			    /*1234567890123456*/LcdShowStr(11, 1,"body");  Send_message(content_body);	  //发人体进入短信}  else  LcdShowStr(11,1,"    ");}else 	//没有触发报警{BUZZER = 1;	 /*1234567890123456*/LcdShowStr(0, 1," System normal  ");}}}else if(moshi == 1)	//设置温度上限模式{	T_buff[0] = T_baojing/10+0x30;T_buff[1] = T_baojing%10+0x30;T_buff[2] = '\0';LcdShowStr(6, 1,T_buff);}else if(moshi == 2)	 //设置烟雾浓度上限模式{C_buff[0] = C_baojing/100+0x30;C_buff[1] = C_baojing%100/10+0x30;C_buff[2] = C_baojing%10+0x30;C_buff[4] = '\0';LcdShowStr(6, 1,C_buff);}}
}
/* 整型数转换为字符串,str-字符串指针,dat-待转换数,返回值-字符串长度 */
unsigned char IntToString(unsigned char *str, int dat)
{signed char i = 0;unsigned char len = 0;unsigned char buf[6];if (dat < 0)  //如果为负数,首先{dat = -dat;*str++ = '-';len++;}do {          //先转换为低位在前的十进制数组buf[i++] = dat % 10;dat /= 10;} while (dat > 0);len += i;     //i最后的值就是有效字符的个数while (i-- > 0)   //将数组值转换为ASCII码反向拷贝到接收指针上{*str++ = buf[i] + '0';}*str = '\0';  //添加字符串结束符return len;   //返回字符串长度
}
/*****************************************************************************
串口中断
/****************************************************************************/
void uart(void) interrupt 4
{
unsigned char UART_data;if(RI){UART_data=SBUF;if(UART_data=='\n'){if(GSM_receive[0]=='O'&&GSM_receive[1]=='K'){test_boot=Yes;}//else//	test_boot=No;if(GSM_receive[0]=='+'&&GSM_receive[1]=='C'&&GSM_receive[2]=='R'&&GSM_receive[3]=='E'&&GSM_receive[4]=='G'){if(GSM_receive[7]=='1'||GSM_receive[9]=='1'||GSM_receive[9]=='5'){test_net_register=Yes;}}		   //	else//  test_net_register=No;if((GSM_receive[0]=='O')&&(GSM_receive[1]=='K'))	  //大写OK{	 // sf_flag = 0;//sf_led = 1;//BUZZER = 1;}if((GSM_receive[0]=='C')&&(GSM_receive[1]=='L')&&(GSM_receive[2]=='O')&&(GSM_receive[3]=='S')&&(GSM_receive[4]=='E')){	//  CZ = 1;LcdShowStr(5, 1,"Close"); }						GSMDATA_count=0;}else{GSM_receive[GSMDATA_count]=UART_data;GSMDATA_count++;}}RI=0;
}

http://www.ppmy.cn/news/349498.html

相关文章

基于单片机的居家安全报警系统

本设计是基于单片机的居家安全报警系统&#xff0c;主要实现以下功能&#xff1a; 可通过LCD1602显示温度、安防状态、烟雾浓度、燃气浓度&#xff1b;可通过按键给发送信息标志位清零&#xff1b;可通过按键设置安防状态&#xff1b;可通过按键调整温度阈值&#xff1b;可通过…

电子防盗系统的作用

商品电子防盗系统的作用 1、防止失窃。EAS系统&#xff0c;改变以往"人盯人""人看货"的方式&#xff0c;以高科技手段赋予商品一种自卫能力&#xff0c;使安全措施落实到每一件商品上&#xff0c;彻底有效地解决商品失窃问题&#xff0c;为商家挽回损失。 …

26、基于51单片机红外热释电人体感应蓝牙防盗报警器系统设计

毕设帮助、开题指导、技术解答&#xff08;有偿&#xff09;见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、Proteus仿真 七、程序源码 八、资料包括 摘要 随着现在社会的发展&#xff0c;时代进步&#xff0c;高新技术的快速…

智能家居防盗系统

摘要&#xff1a;本系统以单片机AT89S52为控制核心&#xff0c;采用采用音频解码芯片HT9200A和高保真语音录放集成芯片ISD4004&#xff0c;利用个人通信终端&#xff08;电话、手机等&#xff09;实现对电器设备的远程控制。配合多路红外遥控技术&#xff0c;实现对电器设备的近…

防盗系统

[colororange][sizemedium]智能手机开发智能防盗系统 朱鹏 张悦 吴金迪&#xff08;滨州学院&#xff0c;滨州&#xff0c;256600&#xff09; [sizemedium][sizex-small][/size][/size] 摘要 软件定位于手机防盗&#xff0c;软件总共分为两大模块&#xff0c;一个是本机控…

基于 Android CONTIKI 系统的防盗报警器的设计与实现【100010813】

一种基于 CONTIKI 系统的防盗报警器的设计与实现 摘 要&#xff1a;贵重物品的防盗监测报警以及周边环境参数采集是现代社会安保和智能化生活的重要组成部分&#xff0c;也是物联网技术领域研究的课题之一。 在感应层&#xff0c;通过加速度传感器 陀螺仪的数据融合技术&…

防盗报警系统功能简述

周界防护系统主要是一些探测设备组成,利用现代科技的声、光处理技术,在第一线感知各种破坏 和犯罪行为,减少犯罪的几率&#xff1b;其主要的器材是红外对射探头&#xff1b; 红外对射探头全名叫"光束遮断式感应器"<Photoelectric Beam Detector>,其基本的构造包…

基于GSM远程短信防盗报警系统

暑假终究还是结束了&#xff0c;但是既然开学了那么期末还会远吗&#xff1f;然而每当期末总会遇到一些课程设计&#xff0c;我每次总是想要大展拳脚一下&#xff0c;但是面对期末复习&#xff0c;最后更多的是通过为主。所以我整理了一些项目希望可以帮到大家。在文章最后更是…