|
Blinker家用多功能报警器以WeMos D1为核核心,外接DCWL-0516微波雷达人体感应模块,DHT11温湿度传感器,GP2Y1014AU粉尘传感器,MQ2可燃气体传感器,和报警
蜂鸣器组成.当室内温度达到到50度或空气质量超过500时,报警器就会给手机发出火警"fire alarm"通知信息.并且报警器的蜂鸣器也会发出报警声.当燃气如果发
生泄漏而触发MQ2时报警器就会给手机发出燃气报警"gas alarm"通知信息.同时报警器的蜂鸣器也会发出报警声.移动侦测报警靠DCWL-0516在其5米范围内被移动
物体触发后即刻向手机发出向移动警"move alarm"通知信息.在手机Blinker app界面上的开关按键可开关移动侦测报警功能.如果家中有人可以关闭它,外出时就可
打开移动侦测报警功能. 报警时不仅可得到通知而且APP上按键的图标也会由绿色的和平鸽变为红色的太阳以示警告.同时右边还有报警次数记录(关闭按键可清零).
程序中空气质量的监测是以前30秒中15次采样的平均值为准的,是可以防止误触发而因起错误报警.再有编程中对WeMos D1的外接端口都采用ESP 8266的GPIO号
来编程的.这样做的目的是使该程序也适合把其它ESP 8266开发板.程序如下:
#define BLINKER_WIFI
#include <Blinker.h>
#include <Ticker.h>
Ticker flipper;
char auth[] = "3242adea6eea";
char ssid[] = "TP-LINK_935D";
char pswd[] = "lwq19470810";
#include <modules/dht/DHT.h>
BlinkerButton Button1("onal");
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");
BlinkerNumber COUT("cout");
BlinkerNumber Kong("kong");
#define DHTPIN 16
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
int dustPin=A0;
float dustVal=0;
int ledPower=0;
int delayTime=280;
int delayTime2=40;
float offTime=9680;
int c=0,e=1,i=0,k=0;
float t,h,humi_read=0,temp_read=0,cout_read=0,kong_read=0;
float sum,ds1,ds2,ds3,ds4,ds5,ds6,ds7,ds8,ds9,ds10,ds11,ds12,ds13,ds14,ds15;
void flip() {
e=e*(-1);
i++;
if(i>29) {
if((t>50)||(k>500)) Blinker.notify("fire alarm");
else if(digitalRead(5)==HIGH) Blinker.notify("gas alarm");
i=0;
}
}
void buttonTick(){
c++;
COUT.print(cout_read);
cout_read = c;
COUT.print(cout_read);
cout_read = c;
Button1.icon("fas fa-sun fa-spin");
Button1.color("#FF0000");
Button1.text("报警");
Button1.print();
Blinker.notify("move alarm");
}
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state=="on")
{
Button1.icon("fas fa-dove fa-spin");//fa-lightbulb
Button1.color("#00FF00");
Button1.text("开");
digitalWrite(2, HIGH);
Button1.print("on");
}
else if(state=="off")
{
Button1.icon("fal fa-dove");
Button1.color("#00FF00");
Button1.text("关");
digitalWrite(2, LOW);
c=0;
COUT.print(cout_read);
cout_read = c;
c=0;
COUT.print(cout_read);
cout_read = c;
Button1.print("off");
}
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print(BlinkerTime);
Blinker.print("millis", BlinkerTime);
}
void heartbeat()
{
HUMI.print(humi_read);
TEMP.print(temp_read);
Kong.print(kong_read);
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
attachInterrupt(14, buttonTick, RISING);
BLINKER_DEBUG.debugAll();
flipper.attach(1, flip);
pinMode(2, OUTPUT);
pinMode(12, OUTPUT);
pinMode(5, INPUT);
pinMode(ledPower, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(2, LOW);
pinMode(A0,INPUT);
Blinker.begin(auth,ssid,pswd);
Blinker.attachHeartbeat(heartbeat);
Button1.attach(button1_callback);
dht.begin();
Blinker.attachData(dataRead);
digitalWrite(ledPower,LOW);
delayMicroseconds(delayTime);
dustVal=analogRead(dustPin);
delayMicroseconds(delayTime2);
digitalWrite(ledPower,HIGH);
delayMicroseconds(offTime);
ds1=ds2=ds3=ds4=ds5=ds6=ds7=ds8=ds9=ds10=ds11=ds12=ds13=ds14=ds15=dustVal;
}
void loop()
{
Blinker.run();
digitalWrite(ledPower,LOW);
delayMicroseconds(delayTime);
dustVal=analogRead(dustPin);
delayMicroseconds(delayTime2);
digitalWrite(ledPower,HIGH);
delayMicroseconds(offTime);
ds1=ds2;
ds2=ds3;
ds3=ds4;
ds4=ds5;
ds5=ds6;
ds6=ds7;
ds7=ds8;
ds8=ds9;
ds9=ds10;
ds10=ds11;
ds11=ds12;
ds12=ds13;
ds13=ds14;
ds14=ds15;
ds15=dustVal;
sum=((ds1+ds2+ds3+ds4+ds5+ds6+ds7+ds8+ds9+ds10+ds11+ds12+ds13+ds14+ds15)/15/1024-0.0356)*120000*0.035/6;
h=dht.readHumidity();
t=dht.readTemperature();
k =(int)sum;
if(((t>50)||(k>500)||(digitalRead(5)==HIGH))&&(e>0)) digitalWrite(12, HIGH);
else
digitalWrite(12, LOW);
if(isnan(h)||isnan(t))
{
BLINKER_LOG("Failed to read from DHT sensor!");
}
else
{
BLINKER_LOG("Humidity:",h,"%");
BLINKER_LOG("Temperature:",t,"*C");
BLINKER_LOG("Kong Qi: ", k, " /1024");
humi_read=h;
temp_read=t;
kong_read=k;
Blinker.delay(2000);
}
}
|
-
APP界面
-
电路图
|