上篇WIFI作品DIY教程07-《wifi家居网关》家居控制中心zigbee/nrf24l01等完成了家居网关。
曾经我们在教程4有介绍过烟雾报警,但只是插到网关上的arduino,这篇我们单独出来,这样就可以安装到墙上了咯。
第一部分:MQ-2温度传感器介绍
MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。 MQ-2气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。
上图是传感器的基本测试电路。该传感器需要施加2个电压:加热器电压(VH)和测试电压(VC)。其中 VH用于为传感 器提供特定的工作温度。VC 则是用于测定与传感器串联的负 载电阻(RL)上的电压(VRL)。这种传感器具有轻微的极性, VC需用直流电源。在满足传感器电性能要求的前提下,VC和VH 可以共用同一个电源电路。为更好利用传感器的 性能,需要 选择恰当的RL值
第二部分:下载编译源代码
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=5;//模块编号
//声名变量
int mq_2alarm=500;
const unsigned long interval = 1000;
unsigned long last_sent;
int mq_2val=0;
int mq_2_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);
Serial.println("zwifi_mq_2_sensor");
}
void loop()
{
unsigned long now = millis();
if ( now - last_sent >= interval )
{
last_sent = now;
mq_2val=0;
run_mq_2();
if(mq_2val>mq_2alarm){
char data[10]={0};
sprintf(data,"%d",mq_2val);
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_mq_2()
{
mq_2val=analogRead(mq_2_PIN);
Serial.println(mq_2val,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);
}
3、串口通信运行后,打开arduino ide的串口监视。
再拿个打火机给他喷喷气体
或给他闻闻香烟。
在串口上看到上面的数据,说明成功了。
第三部分:测试通信和查看数据
打开:http://192.168.1.1/znck007/mysqltest.php?mode=select
点击查看数据库记录,001,005的记录,说明网关成功保存了记录。气体异常值等于data值,越大表示异常气体越浓。
同时也可以用数据库软件Navicat for MySQL查看数据记录!
《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-《人体红外检测》安防入侵报警功能
WIFI作品DIY教程10-《温湿传感器》DS18B20、DHT11应用。
WIFI作品DIY教程11-《烟雾火警》MQ-2烟雾/丙烷/天然气检测。
《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创客平台)
|