- 遇紧急情况输入紧急密码时,现场预警装置不触发,保障用户生命安全,启动远程报警,如图1所示。
图1 启动远程紧急预警
2.正常情况输入错误密码时,现场警报提醒错误,红灯闪烁,蜂鸣器响,不触发远程预警;连续输入三次错误密码时, 将启动远程预警系统,如图2所示。
图 2连续三次,远程预警
3.没有正确输入密码,对保险箱进行暴力拆解,触发震动传感器,启动远程预警。
图3 向用户发送提示信息
4.正常情况下,输入正确密码,不会触发任何预警装置,可顺利取出保险物品。
图4 正常操作,打开密码箱,取出保险物品
测试结果分析:设计的智能保险箱具有人性化特点,适用于多种情况,更加适合保护用户私人财产安全和非正常情况下的生命安全。测试结果验证了我们设计的正确性和可行性。
四、应用前景分析
保险柜作为存放家庭贵重物品的重要设备,市场潜力巨大,智能监控与安防一体化的保险柜的需求愈来愈大,将保险技术与物联网技术相融合的智能保险柜必将受到市场的青睐,而且,本技术亦可以广泛应用在锁控、保险和安防等相关领域,应用范围广,市场前景好。
五、创新点总结
1、将传统的保险箱与物联网技术结合,考虑到了多种模式下的安全与预警,依据实际情况启动现场预警与远程预警系统,及时将相关信息发送给指定手机,及时提醒用户,提前做好相应措施,以免造成更大的财产损失。
程序
#include<REG52.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define Success 1U #define Failure 0U sbit DO=P0^0; sbit led1=P0^7; sbit led2=P0^6; sbit beep=P1^7; typedef unsigned char u8; typedef unsigned int u16; u8 temp,queren,k,flag,key,tt,mima[9],biaozhun[]="12345678",biaozhun1[]="87654321"; unsigned long Time_Cont = 0; //定时器计数器 u8 phoneNumber1[] = "43"; u8 phoneNumber2[] = "49"; //替换成需要被拨打电话的号码 u8 phoneNumber3[] = "35"; //替换成需要被拨打电话的号码 u8 code msg1[]="0011000D91688192775274F10008AA1C8BE577ED606F4E3B4EBA53D752305A0180C1FF0C8BF7655163F4000A"; //救援短信内容 u8 code msg2[]="0011000D91688192775274F10008AA225BC6780195198BEF00336B21FF0C003200345C0F65F6540E518D8F935165000A000A"; //24小时后输入短信内容 u8 code msg3[]="0011000D91688192775274F10008AA145BC678017BB188AB975E6CD563A589E6000A000A"; //非法接触 #define Uart1_Buf_Max 100 //串口数据缓存长度 u8 xdata Rec_Buf[Uart1_Buf_Max]; //串口数据缓存 u8 point1 = 0; //缓存指针 void delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<123;j++); } void Uart_Init() { SCON=0x50; //串口工作方式1,8位UART,波特率可变 TH2=0xFF; TL2=0xFD; //波特率:115200 晶振=11.0592MHz RCAP2H=0xFF; RCAP2L=0xFD; //16位自动再装入值 TCLK=1; RCLK=1; C_T2=0; EXEN2=0; //波特率发生器工作方式 TR2=1 ; //定时器2开始 EA = 1; //打开全局中断控制 ES = 1; //串行口中断 } //串口发送一个字节的函数 void SendData(unsigned char ch) { SBUF = ch; //写数据到UART数据寄存器 while(TI == 0); TI = 0; } //发送字符串 void SendString(char *s) { while (*s) //检测字符串结束标志 { SendData(*s++); //发送当前字符 } } unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry) { unsigned char n; for (n = 0; n < Retry; n++) { SendString(Command); //发送GPRS指令 Time_Cont = 0; while (Time_Cont < Timeout) { delay_ms(100); Time_Cont += 100; if (strstr(Rec_Buf, Response) != NULL) { return Success; } } } return Failure; } //重启命令 void soft_reset(void) { ((void (code *) (void)) 0x0000) (); } //如果发送失败就执行这个 void errorLog() { while (1) { if (sendCommand("AT\r\n", "OK", 100, 10) == Success) { soft_reset(); } delay_ms(200); } } //发送短信指令 void sendMessage(char *number,char *msg) { xdata char send_buf[20] = {0}; strcpy(send_buf, "AT+CMGS="); strcat(send_buf, number); strcat(send_buf, "\r\n"); if (sendCommand(send_buf, ">", 3000, 10) == Success); else errorLog(); SendString(msg); SendData(0x1A); } void keycan() { P2=0xfe; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { delay_ms(10); if(temp!=0xf0) { k=1; temp=P2; switch(temp) { case 0xee: key='1'; break; case 0xde: key='2'; break; case 0xbe: key='3'; break; case 0x7e: key='4'; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } delay_ms(10); while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } P2=0xfd; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { delay_ms(10); if(temp!=0xf0) { k=1; temp=P2; switch(temp) { case 0xed: key='5'; break; case 0xdd: key='6'; break; case 0xbd: key='7'; break; case 0x7d: key='8'; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } delay_ms(10); while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } P2=0xfb; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { delay_ms(10); if(temp!=0xf0) { k=1; temp=P2; switch(temp) { case 0xeb: key='9'; break; case 0xdb: key='a'; break; case 0xbb: key='b'; break; case 0x7b: key='c'; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } delay_ms(10); while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } P2=0xf7; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { k=1; delay_ms(10); if(temp!=0xf0) { temp=P2; switch(temp) { case 0xe7: key='d'; break; case 0xd7: key='e'; break; case 0xb7: key='f'; break; case 0x77: queren=1; k=0; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } delay_ms(10); while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } } void timer_init() { tt=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; //50ms定时 EA=1; ET0=1; // TR0=1; } void main() { u8 i=0; u8 m=0; Uart_Init(); timer_init(); DO=1; /* if (sendCommand("AT+CREG?\r\n", "CREG: 1", 1000, 10) == Success); else errorLog(); delay_ms(10); if (sendCommand("AT+CMGF=0\r\n", "OK\r\n", 1000, 10) == Success); else errorLog(); delay_ms(10); if (sendCommand("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 1000, 10) == Success); else errorLog(); delay_ms(10); */ led1=1; led2=0; beep=1; flag=0; while(1) { keycan(); if(k==1) { mima[i++]=key; k=0; } if(queren==1) { mima='\0'; queren=0; i=0; if(strcmp(mima,biaozhun)==0) { led1=1;led2=0;beep=1;flag=1; } if(strcmp(mima,biaozhun1)==0) { sendMessage(phoneNumber1,msg1);//发送救援短信 led1=1; led2=0; beep=1; } if(strcmp(mima,biaozhun)!=0&&strcmp(mima,biaozhun1)!=0) { beep=0; led2=1; led1=0; m++; if(m==3) { sendMessage(phoneNumber2,msg2); //发送短信 } } } if(DO==0) { if(flag==1) { led1=1;led2=0;beep=1;} else {beep=0;led2=1;led1=0; sendMessage(phoneNumber3,msg3); } } } } void RECEIVE_DATA(void) interrupt 4 using 1 //串口中断 { ES = 0; if (RI) { RI = 0; //清除RI位 Rec_Buf[point1] = SBUF; point1++; if(point1>=Uart1_Buf_Max) { point1 = 0; } } ES = 1; } /*void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==10) { tt=0; led2=~led2; beep=~beep; } } */