这个系统采用DC5V工作电压,该传感器可测量实时温度湿度及烟雾量,通过液晶显示器显示实时数据,并能实现危险温湿度情况下的声光报警,是一个制作简单,操作方便的实时温度湿度烟雾监测报警器。
功能:
1)接通电源,液晶显示器显示温度,湿度,及烟雾量。
2)按下1号开关,液晶显器显示第二页:危险温度设定页,此时按下2号开关一次,显示的危险温度自加一次,若实际温度高于所设定的危险温度,则绿色led亮起,同时蜂鸣器报警,当实际温度低于危险温度时,led灯熄灭,蜂鸣器停止报警。
3)当液晶显示器停留在第二页是,再次按下1号开关,液晶显示第三页:危险湿度设定页,此时按下3号开关,显示的危险湿度自加一次,若实际湿度高于所设定的危险湿度,则红色led亮起,同时蜂鸣器报警,当实际湿度低于危险湿度时,led灯熄灭,蜂鸣器停止报警
所需要的器件有:ICSTATION MEGA开发板及数据线一套,DHT11温度湿度传感器一个,MQ-2烟雾传感器一个,LCD1602液晶显示器一块 ,LED发光二极管两个,四脚开关三个,1千欧电阻三个 ,电位器一个 ,有源蜂鸣器一个,跳线36根 ,3P杜邦线四根 ,+5V电源。
硬件原理图:具体硬件原理设计图如图所示。 硬件制作图文教程:
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[40] = {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[i]=1;
- }else
- {
- chr[i]=0;
- }
- }
-
- humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];
-
- temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23];
- tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39];
- 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("ALARM HUMI:");
- 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);
- }
- }
- }
复制代码
|