智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想!

标题: WIFI作品DIY教程09-《人体红外检测》安防入侵报警功能 [打印本页]

作者: znck007    时间: 2015-1-15 11:58
标题: WIFI作品DIY教程09-《人体红外检测》安防入侵报警功能
上篇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创客平台)








作者: T1ger6    时间: 2015-1-16 08:40
看来是我太快了,楼主还没有写完吧
作者: 老催    时间: 2015-1-16 09:56
好像是还没写完
作者: znck007    时间: 2015-1-16 13:25
老催 发表于 2015-1-16 09:56
好像是还没写完

这篇教程快写完了。其实最重要是代码都写完了,可以用了的。
作者: 老催    时间: 2015-1-16 16:40
#include
#include
#include
#include
这几个库文件没有?
作者: znck007    时间: 2015-1-16 17:35
老催 发表于 2015-1-16 16:40
#include
#include
#include

已更新
作者: chenchunbo    时间: 2015-1-27 09:29
我是来学习的。留个名~
作者: 善旦景oebys    时间: 2015-5-23 20:06
本帖最后由 创客帝国 于 2015-7-23 20:13 编辑

好贴子哦,大家不顶说不过去










作者: osc486    时间: 2015-6-12 16:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: cmccu    时间: 2015-9-4 06:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: alex_vip    时间: 2015-10-5 14:54
谢谢分享
作者: alex_vip    时间: 2015-10-5 14:54
谢谢分享
作者: 洋芋炒土豆    时间: 2015-10-6 13:35
努力学习中
作者: t28    时间: 2015-10-7 18:53
学习一下
作者: ak_qxx    时间: 2015-10-28 16:08
探测到人体感应,能发送开关灯的指令么?
作者: 无聊者    时间: 2015-11-2 22:41
我是来学习的。马克
作者: keneng    时间: 2015-11-3 07:53
来学习的
作者: znck007    时间: 2015-11-3 11:39
keneng 发表于 2015-11-3 07:53
来学习的

一起来学习吧。
作者: cfq1535    时间: 2015-11-7 11:03
很棒的贴子 谢谢
作者: drfat    时间: 2016-1-9 09:47
学习学习!
作者: 小小c    时间: 2016-4-11 22:00
楼主我的的怎么有人没人都是1啊
作者: zmlxh168    时间: 2016-4-18 15:59
好贴子哦,大家不顶说不过去

作者: fnfbp    时间: 2016-6-7 21:29
请问大家有什么看法?我绝对喜欢这个帖子













作者: hszrk    时间: 2016-6-23 16:47
我也想了解了解!!!先顶一个













作者: shawnzhou    时间: 2016-8-15 15:22
这个不错!!!学习学习
作者: 皓睿    时间: 2016-8-29 20:12
我是来学习的。留个名~
作者: kwurw    时间: 2016-10-18 15:57
挺好啊挺好












毕业生找工作请关注微信:shsxjy
作者: ry粉丝来啦    时间: 2016-11-7 06:16
加油啊!!!!顶哦!!!!!













作者: 皑俞科技861    时间: 2016-11-8 01:01
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想! (http://luntan.znck007.com/) Powered by Discuz! X3.2