답변 : 아두이노 DHT-11 먼지센서 LCD
페이지 정보
작성자 master 작성일18-06-18 11:09 조회5,507회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-06-18 오전 11:13:04
// by Ok-Hyun Park
//
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // 접근주소: 0x3F or 0x27
//
#include "DHT.h"
#define DHTPIN 10 // DHT11이 연결된 핀
#define DHTTYPE DHT11 // DHT 11,DHT시리즈중 11을 선택합니다.
DHT dht(DHTPIN,DHTTYPE);
//
int dust_sensor=A0; // 미세먼지 핀 번호
int rgb_R=5; // rgb 핀 빨간색 핀
int rgb_G=6; // rgb핀 녹색 핀
int rgb_B=7; // rgb핀 파란색 핀
int piezo=3;
//
float dust_value=0; // 센서에서 입력 받은 미세먼지 값
float dustDensityug=0; // ug/m^3 값을 계산
int sensor_led=12; // 미세먼지 센서 안에 있는 적외선 led 핀 번호
int sampling=280; // 적외선 led를 키고,센서 값을 읽어 들여 미세먼지를 측정하는 샘플링 시간
int waiting=40;
float stop_time=9680; // 센서를 구동하지 않는 시간
//
void setup(){
Serial.begin(9600);
pinMode(sensor_led,OUTPUT); // 미세먼지 적외선 led
pinMode(rgb_R,OUTPUT); pinMode(rgb_G,OUTPUT); pinMode(rgb_B,OUTPUT); // 3색 LED
pinMode(piezo,OUTPUT);
lcd.init(); lcd.backlight();
dht.begin();
}
//
void loop(){
float h=dht.readHumidity(); // 습도 측정
float t=dht.readTemperature(); // 온도 측정
//
if(isnan(h)||isnan(t)){ // 오류 출력
Serial.println("Failed to read from DHT sensor!");
return;
}
float hic=dht.computeHeatIndex(t,h,false); // 보정된 섭씨
//
digitalWrite(sensor_led,LOW); delayMicroseconds(sampling ); // LED 켜기
dust_value=analogRead(dust_sensor); delayMicroseconds(waiting ); // 센서 값 읽어오기
digitalWrite(sensor_led,HIGH); delayMicroseconds(stop_time); // LED 끄기
dustDensityug=(0.17*(dust_value*(5.0/1024))-0.1)*1000; // 미세먼지 값 계산
//
lcd.setCursor(0,0); lcd.print(h,0); lcd.print("% "); lcd.print(hic,0); lcd.print("*C "); // 1라인
//
lcd.setCursor(0,1); lcd.print(dustDensityug); // 2라인
//
if(dustDensityug<=30.0){ // 대기 중 미세먼지가 좋음 일 때 파란색 출력
analogWrite(rgb_R,0); analogWrite(rgb_G,0); analogWrite(rgb_B,255); lcd.print("blue");
} else if(30.0<dustDensityug&&dustDensityug<=80.0){ // 보통 녹색
analogWrite(rgb_R,0); analogWrite(rgb_G,255); analogWrite(rgb_B,0); lcd.print("green");
} else if(80.0<dustDensityug&&dustDensityug<=150.0){ // 나쁨 노란색
analogWrite(rgb_R,255); analogWrite(rgb_G,155); analogWrite(rgb_B,0); lcd.print("yellow");
digitalWrite(piezo,HIGH); delay(1000); digitalWrite(piezo,LOW); delay(1000);
} else{ // 매우 나쁨 빨간색
analogWrite(rgb_R,255); analogWrite(rgb_G,0); analogWrite(rgb_B,0); lcd.print("red");
digitalWrite(piezo,HIGH); delay(1000); digitalWrite(piezo,LOW); delay(1000);
}
delay(2000);
}
댓글 : 0
조회수 : 5,507
등록된 댓글이 없습니다.