基于Arduino和Openwrt的智能家居门警系统设计与实现
2014-07-18黄思博潘良辰储健
黄思博 潘良辰 储健
摘要: 随着全球经济的一体化和科技的高速发展,人们正享受着高科技给他们带来的极大方便,如家居对门禁系统的需求正发生着重大的变化。智能家居“门警”系统利用openwrt系统、arduino主控板、摄像头、gprs模块等手段实现主人对家庭门铃、门体的启动、敲打的及时了解,能够使主人不在家时,也能较好的解决来访者的沟通,并且对于不法分子以此方法试探家中有无人员,以便实现偷盗等情况也有较好的解决功能。此设计具有成本低廉、可操作性强、及时高效、有效防盗等特点,具有较高的研发和推广价值。
关键词:arduio主控板;openwrt系统;gprs;智能监控
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)13-3067-03
1 绪论
当今社会是科学技术日新月异、飞速发展的信息时代。人们正感受着高科技给他们带来的极大方便,同时,人们对于高科技服务于生活的要求也越来越高。但随着科技的发展,也带来了许多不安全的方面[1],例如,运用高科技手段进行盗窃等犯罪行为与日增多,家居对门禁系统的需求正发生着重大的变化[2]。
对于现有的门警系统来说,并没有专门为家居设计的系统,而且存在安全性能低、成本高、功能单一等缺点[3],不能满足家居对门警系统的需求。因此本团队在安徽理工大学大学生科研项目资助下,设计了一套新颖的智能家居"门警"系统。
2 系统主要功能
智能家居"门警"系统,具有对门户出入控制、实时监控、保安防盗报警等多种功能,它主要方便用户随时了解家庭安全情况,智能处理特殊情况(如:小偷偷窃及时报警或提示用户),用户远程自动控制招待客人从而为用户提供一个高效先进的家庭环境。
本系统采用了装有openwrt系统的路由器和Arduino MEGA2560共同来完成的,这将更加简化了编写程序的繁琐,也降低了开发成本。
1) 智能门警系统由摄像头、路由器、读卡器、GPRS模块、主控板和电子门锁组成。当有来访者按动门铃按钮或者敲门,便会通过主控板控制GPRS给户主发送信息,户主可通过访问网页的形势查看通过openwrt上传的实时照片,并选择与来访者通过GPRS通话抑或通过电子门锁给人开门。
2) 远程开门功能 ,户主可过手机发动指令给GPRS远程控制家门的开关。
3) 实时监控,通过摄像头用motion做监控,画面上只要有变化,就会保存照片到制定位置,主人可登录网页进行查看。
本系统可以与来访者通话,以识别来访者的身份与来访目的。
3 系统组成
本系统采用的是Arduino MEGA 2560 的微控制器板,相较于其他型号的Arduino控制器,它提供了更多I/O口与更大运算储存空间.它包含了54个数字输入输出口(其中14个可以作为PWM输出),16个模拟输入口,4个串口(硬件串口),同时含有一个USB连接头,一个电源插孔,一个ICSP接口,一个复位按键等支持主控器运行的最小系统.用一根USB数据线连接到电脑,或者一个交流转直流的电源适配器,亦或是一个电池即可让它运行起来.大多数为Aruino Duemilanove 或 Diecimila设计的扩展板都兼容于Mega。本系统主要采用的Arduino MEGA 2560的主要性能指标如下:主控芯片 :ATmega2560;工作电压:5V;输入电压:12V;数字输入输出口 :54;模拟输出口 :16。
信息的传输主要利用GPRS。本系统的GPRS采用了SIM300模块。 SIM300 内部集成了TCP/IP 协议栈,并且扩展了TCP/IP AT 指令,使用户利用该模块开发数据传输设备变得特别简单、方便。 SIM300 是一款三频段GSM/GPRS 模块,可在全球范围内的EGSM 900MHz、DCS 1800MHz、PCS 1900MHz 三种频率下工作,能够提供GPRS 多信道类型多达10 个,并且支持CS-1、CS-2、CS-3 和CS-4 四种GPRS 编码方案。在GPRS模块上插入一张已开通SIM 卡并接通电源后,由微控制器单片机向其发送AT指令,将单片机处理好的GPS数据发送给GPRS,从而实现了GPRS通过GPRS网络、GPRS-Internet网关、Internet与Android终端建立连接,进而实现了GPRS与监控中心的Android终端通信,并以此来传输数据。
4 系统实现
4.1系统原理图
本系统主要采用Arduino主控板、GPRS模块、震动传感器、usb摄像头、TP—Link路由器等。通过arduino主控板控制GPRS模块、接收震动传感器信号、以及控制舵机实现通话、开门等功能。USB摄像头定时采集门外情况并且通过TP-LINk路由器上传到指定网站。
如当客人访问主人时,此刻SW-420常闭型震动传感器检测动态,会向arduino主控板发出信号,此时摄像头能够将拍摄照片通过TP-link WR703N向网络中发送照片,用户通过手机软件或者网页登陆方式访问,用户根据是不是熟悉的客人,采用两种解决方案。方案一是熟人时,会通过SIM300与该客人进行通话交流,如果有需要可以招待客人进屋。方案二是陌生人时,会通过SIM300询问客人情况,若是小偷及时报警并且通知用户。系统原理如图1所示。
图1 系统原理图
4.2 TP—LINK加载系统
1)从OpenWrt的官方站点https://openwrt.org/下载固件,固件分为squashfs和jiffs2两种文件系统。具体的区别是jiffs2将固件本身和后续安装的包会放置在一个分区内,因此可以充分利用空间。squashfs则将固件单独挂在在/rom分区,系统出现问题时,系统的恢复非常便利。
2)通过原有的路由器管理页面,进行固件升级。
3)初始设置
默认的网段为192.168.1.*。将703N用网线和PC相连,且将PC的IP设置为不为192.168.1.1的任意IP。这里假设为192.168.1.100,掩码为255.255.255.0。通过PC,telnet 192.168.1.1后,若可连接。则大功成半。然后将root的密码进行重置。因为要用telnet和SSH的缘故,windows上要安装putty和配置自带的telnet,便利起见,推荐直接使用安装linux的PC。
SSH到703N(ssh root@192.168.1.1)更改网络配置。修改/etc/config/network文件,将静态IP设置修改为DHCP。 重启之后,就可以搜索到名为OpenWrt的无线网络了。
4.3 Arduino和GPRS连接
Arduino11、12口与GPRS的RX、TX分别连接,正常的拨打电话,接听电话,读取短信(产生控制开关门命令),发送某内容短信给某电话。读取短信时是首先Arduino自己读一遍,是某个命令(这里收到“b”就让电子门锁工作)就执行指定的操作,不是不执行,这是远程控制操作。
部分代码如下:
#define SEND_MESSA_TO_YOUR "at+cmgs=\"***********\"\r\n"
//填入你手上的手机号码
#define SEND_MESSA_CONTENT "Your are under attack!"
#define CALL_YOU_TELNUMBER "ATD***********;\r\n"
//填入你手上的手机号码
下面代码是通过hand()函数检测gprs与Arduino是否连接成功,以方便进一步实现Arduino控制gprs打电话,发短信等操作。
int Hand(char *s)
{
delay(200);
clearBuff();
delay(300);
readSerial(aa);
if(strstr(aa,s)!=NULL) //检测Arduino和模块的连接
{g_timeout=0;
clearBuff();
return 1;
}......
}
void AT(void)
{......
while(strstr(aa,"OK")==NULL)
{
clearBuff();
led(1);
Serial.println(ATE0);
delay(500);
readSerial(aa);
led(0);
}while(1)
{......
if((strstr(aa,"0,1")!=NULL)||(strstr(aa,"0,5")!=NULL))
{clearBuff();
break;
}
else
{delay(500);
}}}
通过gprs打电话,实现来访客人与主人之间的通话。
void send_call(void)
{clearBuff();
Serial.println(CALL_YOU_TELNUMBER); //进行拨打电话操作
delay(2000);
while(Hand("OK")==0);}
4.4 Arduino和其他部件的连接
Arduino通过i/o接口和其他部件连接,控制其运行。如对于门锁的控制Arduino通过i/o接口和继电器链接,进而控制舵机的运行。当GPRS接到开门的短信时,Arduino通过控制相应的I/o接口控制继电器的处于连通状态,继而舵机可以旋转,带动门锁,即打开门让客人进入。
5 结束语
通过几个月的努力,在这次的科研立项中不仅检验了我们所学习的知识,也培养了如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。科研立项是我们知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”,通过这次科研立项,我深深体会到这句千古名言的真正含义.我们今天认真的学习,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
参考文献:
[1] Dale Wheat.Arduino技术内幕[M].北京:人民邮电出版社,2013.
[2] 罗雷.嵌入式实时操作系统[M].北京:北京航空航天大学出版社,2011.
[3] 陈吕洲.Arduino[M].北京:北京航空航天大学出版社,2014.endprint
2)通过原有的路由器管理页面,进行固件升级。
3)初始设置
默认的网段为192.168.1.*。将703N用网线和PC相连,且将PC的IP设置为不为192.168.1.1的任意IP。这里假设为192.168.1.100,掩码为255.255.255.0。通过PC,telnet 192.168.1.1后,若可连接。则大功成半。然后将root的密码进行重置。因为要用telnet和SSH的缘故,windows上要安装putty和配置自带的telnet,便利起见,推荐直接使用安装linux的PC。
SSH到703N(ssh root@192.168.1.1)更改网络配置。修改/etc/config/network文件,将静态IP设置修改为DHCP。 重启之后,就可以搜索到名为OpenWrt的无线网络了。
4.3 Arduino和GPRS连接
Arduino11、12口与GPRS的RX、TX分别连接,正常的拨打电话,接听电话,读取短信(产生控制开关门命令),发送某内容短信给某电话。读取短信时是首先Arduino自己读一遍,是某个命令(这里收到“b”就让电子门锁工作)就执行指定的操作,不是不执行,这是远程控制操作。
部分代码如下:
#define SEND_MESSA_TO_YOUR "at+cmgs=\"***********\"\r\n"
//填入你手上的手机号码
#define SEND_MESSA_CONTENT "Your are under attack!"
#define CALL_YOU_TELNUMBER "ATD***********;\r\n"
//填入你手上的手机号码
下面代码是通过hand()函数检测gprs与Arduino是否连接成功,以方便进一步实现Arduino控制gprs打电话,发短信等操作。
int Hand(char *s)
{
delay(200);
clearBuff();
delay(300);
readSerial(aa);
if(strstr(aa,s)!=NULL) //检测Arduino和模块的连接
{g_timeout=0;
clearBuff();
return 1;
}......
}
void AT(void)
{......
while(strstr(aa,"OK")==NULL)
{
clearBuff();
led(1);
Serial.println(ATE0);
delay(500);
readSerial(aa);
led(0);
}while(1)
{......
if((strstr(aa,"0,1")!=NULL)||(strstr(aa,"0,5")!=NULL))
{clearBuff();
break;
}
else
{delay(500);
}}}
通过gprs打电话,实现来访客人与主人之间的通话。
void send_call(void)
{clearBuff();
Serial.println(CALL_YOU_TELNUMBER); //进行拨打电话操作
delay(2000);
while(Hand("OK")==0);}
4.4 Arduino和其他部件的连接
Arduino通过i/o接口和其他部件连接,控制其运行。如对于门锁的控制Arduino通过i/o接口和继电器链接,进而控制舵机的运行。当GPRS接到开门的短信时,Arduino通过控制相应的I/o接口控制继电器的处于连通状态,继而舵机可以旋转,带动门锁,即打开门让客人进入。
5 结束语
通过几个月的努力,在这次的科研立项中不仅检验了我们所学习的知识,也培养了如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。科研立项是我们知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”,通过这次科研立项,我深深体会到这句千古名言的真正含义.我们今天认真的学习,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
参考文献:
[1] Dale Wheat.Arduino技术内幕[M].北京:人民邮电出版社,2013.
[2] 罗雷.嵌入式实时操作系统[M].北京:北京航空航天大学出版社,2011.
[3] 陈吕洲.Arduino[M].北京:北京航空航天大学出版社,2014.endprint
2)通过原有的路由器管理页面,进行固件升级。
3)初始设置
默认的网段为192.168.1.*。将703N用网线和PC相连,且将PC的IP设置为不为192.168.1.1的任意IP。这里假设为192.168.1.100,掩码为255.255.255.0。通过PC,telnet 192.168.1.1后,若可连接。则大功成半。然后将root的密码进行重置。因为要用telnet和SSH的缘故,windows上要安装putty和配置自带的telnet,便利起见,推荐直接使用安装linux的PC。
SSH到703N(ssh root@192.168.1.1)更改网络配置。修改/etc/config/network文件,将静态IP设置修改为DHCP。 重启之后,就可以搜索到名为OpenWrt的无线网络了。
4.3 Arduino和GPRS连接
Arduino11、12口与GPRS的RX、TX分别连接,正常的拨打电话,接听电话,读取短信(产生控制开关门命令),发送某内容短信给某电话。读取短信时是首先Arduino自己读一遍,是某个命令(这里收到“b”就让电子门锁工作)就执行指定的操作,不是不执行,这是远程控制操作。
部分代码如下:
#define SEND_MESSA_TO_YOUR "at+cmgs=\"***********\"\r\n"
//填入你手上的手机号码
#define SEND_MESSA_CONTENT "Your are under attack!"
#define CALL_YOU_TELNUMBER "ATD***********;\r\n"
//填入你手上的手机号码
下面代码是通过hand()函数检测gprs与Arduino是否连接成功,以方便进一步实现Arduino控制gprs打电话,发短信等操作。
int Hand(char *s)
{
delay(200);
clearBuff();
delay(300);
readSerial(aa);
if(strstr(aa,s)!=NULL) //检测Arduino和模块的连接
{g_timeout=0;
clearBuff();
return 1;
}......
}
void AT(void)
{......
while(strstr(aa,"OK")==NULL)
{
clearBuff();
led(1);
Serial.println(ATE0);
delay(500);
readSerial(aa);
led(0);
}while(1)
{......
if((strstr(aa,"0,1")!=NULL)||(strstr(aa,"0,5")!=NULL))
{clearBuff();
break;
}
else
{delay(500);
}}}
通过gprs打电话,实现来访客人与主人之间的通话。
void send_call(void)
{clearBuff();
Serial.println(CALL_YOU_TELNUMBER); //进行拨打电话操作
delay(2000);
while(Hand("OK")==0);}
4.4 Arduino和其他部件的连接
Arduino通过i/o接口和其他部件连接,控制其运行。如对于门锁的控制Arduino通过i/o接口和继电器链接,进而控制舵机的运行。当GPRS接到开门的短信时,Arduino通过控制相应的I/o接口控制继电器的处于连通状态,继而舵机可以旋转,带动门锁,即打开门让客人进入。
5 结束语
通过几个月的努力,在这次的科研立项中不仅检验了我们所学习的知识,也培养了如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。科研立项是我们知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”,通过这次科研立项,我深深体会到这句千古名言的真正含义.我们今天认真的学习,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
参考文献:
[1] Dale Wheat.Arduino技术内幕[M].北京:人民邮电出版社,2013.
[2] 罗雷.嵌入式实时操作系统[M].北京:北京航空航天大学出版社,2011.
[3] 陈吕洲.Arduino[M].北京:北京航空航天大学出版社,2014.endprint