12 21 include DHT h include Wire h

  • Slides: 21
Download presentation

12 / 21 대기 질 측정 코드 //- 센서 제어 라이브러리 ----------------------#include <DHT. h>

12 / 21 대기 질 측정 코드 //- 센서 제어 라이브러리 ----------------------#include <DHT. h> #include <Wire. h> #include <Liquid. Crystal_I 2 C. h> #include "air_system. h" //- 센서 연결 핀 선언 -------------------------#define AIR_PIN A 1 //- 공기 질 센서 핀 #define DUST_PIN A 0 //- 미세먼지 센서 핀 #define IRED_PIN 12 //- 미세먼지 센서 내 적외선 LED 핀 #define UV_PIN A 2 //- UV 자외선 센서 핀 #define DHTPIN 4 //- 온습도 센서 핀 #define LCD_ADDR 0 x 27 //- Text LCD I 2 C Address #define BUZ_PIN 3 //- Buzzer 핀 //- 객체 변수 선언 ---------------------------------//- LCD 모듈의 I 2 C //-Address 확인하여 입력 0 x 27 또는 0 x 3 F Liquid. Crystal_I 2 C lcd(LCD_ADDR, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); DHT dht(DHTPIN, DHT 11); //- 초기화 구현 ----------------------------------void setup() { Serial. begin(9600); Serial 3. begin(9600); pin. Mode(BUZ_PIN, OUTPUT); //- Buzzer 초기화 pin. Mode(IRED_PIN, OUTPUT); //- 미세먼지 센서 초기화 digital. Write(IRED_PIN, HIGH); for(int i=0; i<FILTER_MAX; i++) arr. Filter[i] = 0; dht. begin(); //- 온습도 센서 초기화 init. LCD(); //- Text LCD 초기화 calibration. CO 2(); //- CO 2 센서 값 교정 //- 센서 제어 관련 변수 선언 --------------------float g. Dust = 0; //- ug/m^3 값을 계산 float g. CO 2 = 0; //- CO 2 농도 값 int g. UV = 0; //- UV 값 int g. Hum = 0; //- 습도 값 int g. Tmp = 0; //- 온도 값 int g. Air = 0; //- 공기 질 상태 float arr. Filter[FILTER_MAX] = {0, }; boolean g. Mode = true; //- 공기 상태 정보 출력 플래그 //- 디버깅 //- 아두이노 <-> HC-05 Bluetooth }

13 / 21 대기 질 측정 코드 //- 2초 간격 공기 질 상태 체크

13 / 21 대기 질 측정 코드 //- 2초 간격 공기 질 상태 체크 --------------------void loop() { get. Dust(); get. DHT(); get. UV(); get. CO 2(); get. Air(); // get. Dust(); delay(500); display. Info(); send. Data. By. BT(); delay(1500); } float filtering(float val){ int sample_cnt = 0; float density = 0; //- 공기 질 측정을 위한 CO 2 값 보정 ------------void calibration. CO 2(){ for(int i=0; i< COUNT ; i++) { get. CO 2(); delay(1000); } } //- 공기 질 측정을 위한 CO 2 값 읽어오기 ---------void get. CO 2(){ int val = analog. Read(AIR_PIN); float Resistance = (1023. /(float)val) * 5. - 1. * RLOAD; //- CO 2농도 변환 g. CO 2 = ( PARA * pow((Resistance/RZERO), -PARB) )*10; //- 측정된 CO 2 출력 Serial. print("CO 2 : "); Serial. print(g. CO 2); Serial. println("ppm"); } } for(int i=0; i<FILTER_MAX; i++) arr. Filter[i-1] = arr. Filter[i]; arr. Filter[FILTER_MAX-1] = val; for(int i=0; i<FILTER_MAX; i++) { if( arr. Filter[i] ) { sample_cnt++; density += arr. Filter[i]; } } if(sample_cnt >0) return density / sample_cnt; return density; //- UV 자외선 측정 ---------------------------void get. UV(){ g. UV = analog. Read(UV_PIN); //- UV 측정 Serial. print("UV : "); //- UV 측정값 출력 Serial. print(g. UV); Serial. println("u. W/cm 2n"); }

14 / 21 대기 질 측정 코드 //- 온습도 측정 ---------------------------------void get. DHT(){ g.

14 / 21 대기 질 측정 코드 //- 온습도 측정 ---------------------------------void get. DHT(){ g. Hum = dht. read. Humidity(); g. Tmp = dht. read. Temperature(); //- 온습도 측정 실패(nan값) 경우 처리 if( isnan(g. Hum) || isnan(g. Tmp) ) { Serial. println("Failed to read from DHT sensor!"); return; } Serial. print("Hum : "); Serial. print(g. Hum); Serial. println("%"); void display. Info(){ lcd. clear(); lcd. set. Cursor(1, 0); lcd. print("[AIR QUALITY INFO]"); if(g. Mode) { lcd. set. Cursor(1, 1); lcd. print("*HUM : "); lcd. print(g. Hum); lcd. print("%"); lcd. set. Cursor(1, 2); lcd. print("*TMP : "); lcd. print(g. Tmp); lcd. print("C"); lcd. set. Cursor(1, 3); lcd. print("*AIR : "); lcd. print(g. Air); }else{ lcd. set. Cursor(1, 1); lcd. print("*DUS : "); lcd. print(g. Dust); lcd. print("ug/m 3"); Serial. print("Tmp : "); Serial. print(g. Tmp); Serial. println("C "); } //- Text LCD 초기화 ------------------------------void init. LCD(){ lcd. begin(20, 4); //- LCD 초기화 lcd. backlight(); lcd. set. Cursor(1, 0); lcd. print("[AIR QUALITY INFO]"); lcd. set. Cursor(2, 2); lcd. print("Calibration. . . "); Serial. println("Calibration. . . "); lcd. set. Cursor(1, 2); lcd. print("*CO 2 : "); lcd. print(g. CO 2); lcd. print("ppm"); } lcd. set. Cursor(1, 3); lcd. print("*U V : "); lcd. print(g. UV); lcd. print("u. W/cm 2"); //- 대기 정보 출력 ------------------------------- } g. Mode = !g. Mode; }

15 / 21 대기 질 측정 코드 //- BT통신 기반 APP으로 정보 전송 --------------------------void

15 / 21 대기 질 측정 코드 //- BT통신 기반 APP으로 정보 전송 --------------------------void send. Data. By. BT(){ send. Data("HUM", ""+g. Hum); send. Data("TMP", ""+g. Tmp); /*send. Data("CO 2", new String(g. CO 2)); send. Data("DUT", new String(g. Dust)); send. Data("SUV", ""+ g. UV); send. Data("AIR", ""+g. Air); */ } //- BT를 사용한 APP으로 전송 ----------------------------void send. Data(String device. Name, String value){ String tx. Data = "@"; tx. Data += device. Name; tx. Data += ", "; tx. Data += value; tx. Data +="#"; Serial. print("TX MSG = "); Serial. println(tx. Data); //- 디버깅 Serial 3. print(tx. Data); //- BT APP으로 전송