丄帝De咗臂 发表于 2015-5-30 22:11:49

温湿度烟雾报警系统

原文链接:http://www.arduino.cn/thread-15816-1-1.html这个系统采用DC5V工作电压,该传感器可测量实时温度湿度及烟雾量,通过液晶显示器显示实时数据,并能实现危险温湿度情况下的声光报警,是一个制作简单,操作方便的实时温度湿度烟雾监测报警器。

功能:      
1)接通电源,液晶显示器显示温度,湿度,及烟雾量。   
2)按下1号开关,液晶显器显示第二页:危险温度设定页,此时按下2号开关一次,显示的危险温度自加一次,若实际温度高于所设定的危险温度,则绿色led亮起,同时蜂鸣器报警,当实际温度低于危险温度时,led灯熄灭,蜂鸣器停止报警。   
3)当液晶显示器停留在第二页是,再次按下1号开关,液晶显示第三页:危险湿度设定页,此时按下3号开关,显示的危险湿度自加一次,若实际湿度高于所设定的危险湿度,则红色led亮起,同时蜂鸣器报警,当实际湿度低于危险湿度时,led灯熄灭,蜂鸣器停止报警

所需要的器件有:ICSTATION MEGA开发板及数据线一套,DHT11温度湿度传感器一个,MQ-2烟雾传感器一个,LCD1602液晶显示器一块 ,LED发光二极管两个,四脚开关三个,1千欧电阻三个 ,电位器一个 ,有源蜂鸣器一个,跳线36根 ,3P杜邦线四根,+5V电源。相关模块资料:
温度湿度传感:http://www.icstation.com/product_info.php?products_id=1398#.U10FDXDGfic
有源蜂鸣器模块:http://www.icstation.com/product_info.php?products_id=2512#.U0I8buNy03m
烟雾传感器模块:http://www.icstation.com/product_info.php?products_id=3025#.U10GBHDGficLCD1602
液晶显示屏:http://www.icstation.com/product_info.php?products_id=1419#.U10GcXDGfic

硬件原理图:具体硬件原理设计图如图所示。
硬件制作图文教程:
1)从ICSTATION MEGA开发板中,将+5v电源和GND引到面包板中,红色作为电源线,黑色作为底线,如下图所示。
2)将lcd1602液晶显示器与电位器插入面包板中,并将其与ICSTATION MEGA开发板,电源及地相连,如下图所示。
3)将DHT11温度湿度传感器插入面包板中,并将其与ICSTATION MEGA开发板,电源及地相连,如下图所示。
4)将MQ-2烟雾传感器与ICSTATION MEGA开发板,电源及地相连,如下图所示。
5)将有源蜂鸣器插入面包板中,并将其与ICSTATION MEGA开发板,电源及地相连,如下图所示。
6)将开关、电阻插入面包板中,并将其与ICSTATION MEGA开发板,电源及地相连,如下图所示。
7)将led发光二极管插入面包板中,并将其与ICSTATION MEGA开发板,电源及地相连,如下图所示。
实验现象:    首先接通电源,液晶显示器显示实时温度湿度及烟雾量首页,按下一号键,进入危险温度设定页,按下二号键,危险温度自加一。再次按下一号键,进入危险湿度设定页,按下三号键,危险湿度自加一。再次按下一号键,回到首页,此时用手指触摸dht11温湿传感器,可观察到温度湿度缓慢增加(因为手指的温度和湿度大于空气中的温度和湿度),当温度增加到大于我们所设定的危险温度时,绿色led亮起同时蜂鸣器报警,当湿度增加到大于我们所设定的危险温度时,红色led亮起同时蜂鸣器报警。代码如下:#include<LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
int temp;
int humi;
int tol;
int j;
int H=50;
int T=25;
int B=1;
int flag=0;
int led=7;
int LED=9;
int BU=2;
int BUTTON=3;
int FMQ=13;
int fmq=10;
unsigned int loopCnt;
int chr = {0};
unsigned long time;
#define pin 8
void setup()
{
pinMode(fmq,OUTPUT);
pinMode(FMQ,OUTPUT);
pinMode(LED,OUTPUT);
pinMode(led,OUTPUT);
Serial.begin(9600);
}
void loop()
{ HH();
TT();
keyScan();
bgn:
delay(200);
pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);
delay(20);
digitalWrite(pin,HIGH);
delayMicroseconds(40);
digitalWrite(pin,LOW);
pinMode(pin,INPUT);
loopCnt=10000;
while(digitalRead(pin) != HIGH)
{
    if(loopCnt-- == 0)
    {
      Serial.println("HIGH");
      goto bgn;
    }
}
   
loopCnt=30000;
while(digitalRead(pin) != LOW)
{
    if(loopCnt-- == 0)
    {
      Serial.println("LOW");
      goto bgn;
    }
}

    for(int i=0;i<40;i++)
{
    while(digitalRead(pin) == LOW)
    {}
    time = micros();
    while(digitalRead(pin) == HIGH)
    {}
    if (micros() - time >50)
    {
      chr=1;
    }else
    {
      chr=0;
    }
}
   
humi=chr*128+chr*64+chr*32+chr*16+chr*8+chr*4+chr*2+chr;
   
temp=chr*128+chr*64+chr*32+chr*16+chr*8+chr*4+chr*2+chr;
tol=chr*128+chr*64+chr*32+chr*16+chr*8+chr*4+chr*2+chr;
Serial.print("temp:");
Serial.println(temp);
Serial.print("humi:");
Serial.println(humi);
Serial.print("tol:");
Serial.println(tol);

if(temp>T)
{
   digitalWrite(LED,HIGH);
   digitalWrite(FMQ,LOW);
}else{
digitalWrite(LED,LOW);
digitalWrite(FMQ,HIGH);
}
if(humi>H)
{
   digitalWrite(led,HIGH);
   digitalWrite(fmq,LOW);
}else{
digitalWrite(led,LOW);
digitalWrite(fmq,HIGH);
}

int val;
    val=analogRead(0);
    Serial.print("smo:");
    Serial.println(val,DEC);
    delay(100);
if(flag==0)
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("TEMP:C");
lcd.setCursor(9,0);
lcd.print("SMO:");
lcd.setCursor(0,1);
lcd.print("HUMI:%");
lcd.setCursor(9,1);
//lcd.print("BEP:");
lcd.setCursor(5,0);
lcd.print(temp);
lcd.setCursor(5,1);
lcd.print(humi);
lcd.setCursor(13,0);
lcd.print(val,DEC);
}
if(flag==1)
{
lcd.begin(16,2);
lcd.print("ALARM TEMP:");
lcd.setCursor(11,0);
lcd.print(T);

}
if(flag==2)
{
lcd.begin(16,2);
lcd.print("ALARMHUMI:");
lcd.setCursor(12,0);
lcd.print(H);

}
}
void keyScan()
{
if(analogRead(BUTTON)>600)
   {
   delay(20);
   if(analogRead(BUTTON)>600)
   {
       flag++;
       if(flag>=3)
         flag=0;
       while(analogRead(BUTTON)>600);
   }
   }
}
void HH()
{
if(analogRead(B)>600)
   {
   delay(20);
   if(analogRead(B)>600)
   {
       H++;
       if(H>=61)
         H=40;
       while(analogRead(B)>600);
   }
   }
}
void TT()
{
if(analogRead(BU)>600)
   {
   delay(20);
   if(analogRead(BU)>600)
   {
       T++;
       if(T>=31)
         T=20;
       while(analogRead(BU)>600);
   }
   }
}


丄帝De咗臂 发表于 2015-5-30 22:13:38

用到的器材我都有,但是现在没时间做,先留下来,后面有时间了再照着教程做:lol

hnyzcj 发表于 2015-5-31 09:39:19

这个教程不错,学习了。张璐向你致敬!

丄帝De咗臂 发表于 2015-5-31 10:35:23

hnyzcj 发表于 2015-5-31 09:39
这个教程不错,学习了。张璐向你致敬!

又不是我做的,就不要致敬我了哈。。。不过我一直没真正用过mega做什么,真想抽点时间做一做

hnyzcj 发表于 2015-5-31 11:25:48

丄帝De咗臂 发表于 2015-5-31 10:35
又不是我做的,就不要致敬我了哈。。。不过我一直没真正用过mega做什么,真想抽点时间做一做 ...

哈哈,是你转的。我有这些东西,我可以做了,先谢谢了

丄帝De咗臂 发表于 2015-5-31 11:56:54

hnyzcj 发表于 2015-5-31 11:25
哈哈,是你转的。我有这些东西,我可以做了,先谢谢了

我也有,不过我的mega没真正用起来,当UNO使得:L

hnyzcj 发表于 2015-5-31 13:05:24

丄帝De咗臂 发表于 2015-5-31 11:56
我也有,不过我的mega没真正用起来,当UNO使得

我用过,哈哈
页: [1]
查看完整版本: 温湿度烟雾报警系统