• 遇紧急情况输入紧急密码时,现场预警装置不触发,保障用户生命安全,启动远程报警,如图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;           } } */