上篇WIFI作品DIY教程07-《wifi家居网关》家居控制中心zigbee/nrf24l01等完成了家居网关。
当我们上班、外出时,有人入侵我们的房子,想要偷东西或做坏事时:
人体红外检测功能就会发送警报字符到网关(或直接接响家中报警器),网关再处理到上传互联网,然后我们手机就会收到警报信息。
然后再通过Wifi摄像头,查看一下家中环境,确保是人还是猫猫狗狗,再做相应的处理。
我们需要的配件:人体红外板、HC-SR501传感器、nrf24l01(或zigbee等)
第一部分:人体红外HC-SR501介绍
红外探测器就是靠探测人体发射的10μm左右的红外线而进行工作的。 人体发射的10μm左右的红外线通过菲涅尔滤光片增强后聚集到红外感应源上。 红外感应源通常采用热释电元件,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经检测处理后就能产生报警信号。
HC-SR501原理图。
第二部分:下载编译源代码
1、安装CH340驱动
在drivers目录里找到CH340驱动,然后按说明安装(之前安装了就不用再安装了)。
2、源代码
[C] 纯文本查看 复制代码 /*
*NRF24l01针脚连接线
* MISO -> 12
* MOSI -> 11
* SCK -> 13
* Configurable:
* CE -> 8
* CSN -> 7
*/
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int sid=1;//模块类型
int nid=4;//模块编号
//声名变量
const unsigned long interval = 1000;
unsigned long last_sent;
int rentival=0;
int renti_PIN=A5;
//NRF24l01
unsigned long nrf24l01nowlast;
char nrf24l01buff[33]={0};
char nrf24l01Data;
int nrf24l01i=0;
void setup()
{
Serial.begin(115200);
char client[10]={0};//client
sprintf(client,"clie%d",sid);
//初始化Mirf,用于NRF24l01收发
Mirf_Init(0,client,sid);
pinMode(renti_PIN, INPUT);
Serial.println("zwifi_renti_sensor");
}
void loop()
{
unsigned long now = millis();
if ( now - last_sent >= interval )
{
last_sent = now;
rentival=0;
run_renti();
if(rentival==HIGH){
char data[10]={0};
sprintf(data,"%d",rentival);
send_data(data);
}
}
}
//初始化Mirf 0初始化1为接收2为发送
void Mirf_Init(int txrx,char *server,int channel){
//初始化Mirf,用于NRF24l01收发
if(txrx==0) {
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)server);//设置接收地址
}
if(txrx==1) {
Mirf.setRADDR((byte *)server);//设置接收地址
}
if(txrx==2) {
Mirf.setTADDR((byte *)server);//设置发送地址
}
Mirf.payload = sizeof(char);//收发字节
Mirf.channel = channel;
Mirf.config();
}
//NRF24l01发送函数
void Mirf_Send(int channel,char *server,char *str){
Mirf_Init(2,server,channel);
int bufi=0;
for(bufi=0;bufi<strlen(str);bufi++){//循环发送
char words=str[bufi];//发送的字符
Mirf.send((byte *)&words);//发送命令
while(Mirf.isSending()){//等待发送完闭
}
delay(50);//延时,否则可能出现发送丢失现象
//Serial.print(words);
}
//Serial.println("");
}
void run_renti()
{
rentival=digitalRead(renti_PIN);
Serial.println(rentival,DEC);
delay(100);
}
//
void send_data(char *data){
char server[10]={0};//server
sprintf(server,"serv%d",1);
//Serial.println(server);
char updateData[33]={0};
char front[10]={0};
//memcpy(front,body,9);
sprintf(front," {ck%03d%03d",sid,nid);
sprintf(updateData,"%s%s}",front,data);
Serial.println(updateData);
Serial.println();
Mirf_Send(1,server,updateData);
char client[10]={0};//client
sprintf(client,"clie%d",sid);
Mirf_Init(1,client,sid);
}
刷写arduino程序选哪个板?
请选择板是Arduino Uno,并记得选对对应的串口。
刷写ardruino源代码时,提示库不存在?
请联系qq610854837下载zwifi资料,软件下载目录里的arduino-1.0.5,里面包含了教程使用的所有库。
将代码进行编译下载到开发板上。
3、源代码说明
代码的功能:当有高电平时,就调用nrf24l01和zigbee发送给网关!
void run_renti()
{
rentival=digitalRead(renti_PIN);//获取是高电平还是低电平。
Serial.println(rentival,DEC);
delay(100);
}
//如果是高电平,向网关发送{ck00x00xdata}格式的字符。
if(rentival==HIGH){
char data[10]={0};
sprintf(data,"%d",rentival);
send_data(data);
}
//网关接收到就会写入数据库,这一步网关原来的代码已经自动实现!
第三部分:测试人体检测感应和通信
打开:http://192.168.1.1/znck007/mysqltest.php?mode=select
点击查看数据库记录,会看人体传感器发来的高电平数据。
因为我们设置sid是1和4,所以在数据库对应是001,004,1就是高电平数据。
同时也可以用数据库软件Navicat for MySQL查看数据记录!
第四部分:关于报警和手机提醒的说明
具体的教程已经交大家如何diy了,但如何用到我们的现实中来呢?打如有人就响起警报,或直接发送信息到手机等。
1、响警报(由于属于二次开发,所以目前只提供思路)
我们需要购买一个报警器,连接到人体红外板的某一脚针,人体红外板就是Arduino的r3板,使用arduino控制报警器就可以实现该功能了!
2、手机提醒
手机提醒原来我们在WIFI作品DIY教程04-《WIFI烟雾煤气报警器》做过一些介绍,是通过发邮件,发信息的方式来提醒。
主要需要修改我们的后台运行程序WIFI作品DIY教程06-《openwrt后台程序》控制mysql、串口通信等
在/mnt/sda1/www/cgi-bin里的znckgbrun就是python脚本,我们要在里面增加一个实现POST发送邮件的功能。
在解码函数下面,可以判断如果是sid=001,nid=004(人体红外的编号),发来的数据,就可以调用BasePost(url,data),然后就可以像烟雾煤气报警器一样发送邮件,手机信息啦。
3、手机app提醒(以后会开发开源app)。
原理:当云端api收到人体报警,然后直接通知手机提醒。app实现起来就更人性化了,我们也在加油,编写好开源给大家!
《WIFI作品DIY教程系列》
WIFI作品DIY教程01-《wifi开发板》介绍和联网等配置教程
WIFI作品DIY教程02-《openwrt摄像头》3D外壳和diy介绍
WIFI作品DIY教程03-《WIFI音响/MP3播放器/电台》
WIFI作品DIY教程04-《WIFI烟雾煤气报警器》
WIFI作品DIY教程05-《家居服务器》web server(php+mysql+uhttpd)
WIFI作品DIY教程06-《openwrt后台程序》控制mysql、串口通信等
WIFI作品DIY教程07-《wifi家居网关》家居控制中心zigbee/nrf24l01等
WIFI作品DIY教程08-《智能开关》电灯开关、插座(nrf24l01/zigbee)
WIFI作品DIY教程09-《人体红外检测》安防入侵报警功能
《Arduino开源智能家居DIY教程系列》
Arduino开源智能家居《花絮1》zigbee小底板DIY成功
Arduino开源智能家居《认识Zigbee》zigbee功能和自组网介绍
Arduino开源智能家居《zigbee开发板》手机/按键点亮LED
Arduino开源智能家居01《网关》升级版网关正式教程(zigbee)
Arduino开源智能家居02《温湿传感器》什么样温湿度才适居
Arduino开源智能家居03《开发板套件》学习zigbee家居-性价比高
Arduino开源智能家居04《插座开关》手机控制:网扇、空调...
Arduino开源智能家居05《红外线》手机红外线控制电器
《百元智能家居DIY教程系列》
《智能家居网关》DIY制作图文教程01-百元智能家居系列
《智能温湿度》DIY制作图文教程02-百元智能家居系列
《智能插座》DIY制作图文教程03-百元智能家居系列
《智能电灯开关》DIY制作图文教程04-百元智能家居系列
《手机红外线》DIY制作图文教程05-百元智能家居系列
请关注@智能创客 微信:znck007(打造DIY创客平台)
|