프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

미세 먼지, 도데체 먼지? 미세먼지측정기 만들기

2018-03-30 14:50:13

 

 

봄, 가을의 불청객! 바로 미세먼지!

요즘 미세먼지가 연일 화제가 되고 있습니다. 

 

<출처 : JTBC>

 

<출처 : 연합뉴스>

 

그렇다면 우리의 건강을 위협하는 미세먼지의 존재는 무엇일까요?

 


미세먼지란?

아주 작은 입자를 가진 먼지로서 먼지의 직경에 따라 미세먼지(지름이 10㎛이하), 초미세먼지(지름이 2.5㎛ 이하)로 구분된다. 

 

미세먼지가 인체에 미치는 유해성

미세먼지는 입자가 작기 때문에 폐에 축적되기도 하지만, 페포를 통과해 혈액 속으로 들어가기 때문에 여러가지 복합적 질병을 유발할 수 있다. 

 


<출처 : 건강한 꿀팁>

 

위와 같이 미세먼지는 인체에 굉장히 유해한 물질임에도 불구하고, 많은 분들께서 

그 위험도를 피부로 느끼지 못하고 있습니다. 

 

이유는 '눈에 잘 보이지 않고, 직관적으로 현재의 상태를 확인할 수 없기' 때문이죠. 

현재 내가 있는 공간에 미세먼지의 양을 눈으로 확인할 수 있다면, 조금 더 미세먼지에 대한 건강 관리가 가능할 것입니다. 

 

자 그럼 직접 미세먼지측정기를 만들어 보도록 할까요?

 

 

 

 

개요

 

 

 

MDF 외관과 아크릴로 구성되어 있는 아기자기한, 코코아팹의 감성이 담겨있는 미세먼지 측정기의 모습입니다. 

그렇다면 미세먼지 측정기는 어떤 기능을 가지고 있을까요? :) 

(궁금 궁금)

 

 

미세먼지 측정기의 기능

- 미세먼지센서 : 초미세먼지(지름이 2.5㎛ 이하) 센서로서 미세먼지의 농도를 측정합니다. 

- 온·습도 센서 : 온도와 습도를 측정합니다. 

- RGB LED : 미세먼지농도량 또는 불쾌지수 단계 등 여러정보를 LED의 색으로 표현합니다. 

- LCD : 센서에서 측정된 정확한 수치 정보를 표시합니다. 

 

 

 

 

 

 

 

부품 목록

 

미세먼지측정기에 사용되는 부품의 목록은 아래와 같습니다. 

 

NO 부품명 수량 상세 설명
1 오렌지보드 1 아두이노 UNO
2 미세먼지센서 1 Sharp / GP2Y1010AU0F
3 RGB LED 모듈 1 KY-016
4 온·습도 센서 모듈 1 DHT-11
5 LCD 1 I2C Interface / 16*2
6 브레드보드 1 Mini
7 점퍼케이블 20 F/F, F/M

 

부품명 오렌지보드 미세먼지센서 RGB LED 모듈 온·습도 센서 모듈 LCD
부품 사진

 

 

 

 

 

 

하드웨어 메이킹

브레드보드 레이아웃

 

 

 

<이것만 확인해봅시다>

- 미세먼지센서의 회로 연결에서 실수 발생률이 가장 높습니다. 선 연결을 잘 확인하세요!

- 온·습도 센서의 경우 전원을 잘못 연결하면 소자가 잘 녹아버립니다. +, - 전원이 잘 연결되었는지 확인하세요!

 

<온습도 센서 종류에 따른 연결 방법>

키트의 온습도 센서 모듈의 종류를 잘 확인한 후 핀 연결 방법을 잘 확인해주세요!

 

 

 

 

 

소프트웨어 코딩

오렌지보드에 업로드되는 소스 코드입니다. 

링크를 통해 소스 코드를 다운로드 받아주세요.

 

* 어떻게 업로드를 시켜할지 잘 모르시겠다구요? 

아직 아두이노 IDE와 업로드 방법에 대해 모르시는 분들은 아래 링크에 '아두이노 소개' 부분을 읽고 따라해보세요!

 

아두이노 기초 알아보기

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "LiquidCrystal_I2C.h"
#include "DHT.h"
#include "emotion.h"
#include "PMsensor.h"
 
#define sensitivity  0.1  //먼지 센서의 민감도 수치
//민감도의 숫자가 클 경우 : 센서 값의 변화가 민감함
//민감도의 숫자가 작을 경우 : 센서 값의 변화가 둔함
 
#define DHTPIN 6  // 온습도센서 핀 번호
#define DHTTYPE DHT11
 
const int sensorPin = A0;   
const int sensorLED = 3;   
 
PMsensor PM;
LiquidCrystal_I2C lcd(LCD 이름, 162);
//LCD 이름 : 0x27 또는 0x3F 입력
 
DHT dht(DHTPIN, DHTTYPE);
 
////////////////////////측정값에 따른 이모티콘, LED 세팅///////////////////////////
void setEmoticon(float data) {
  if (data > 100) {                                 //Worst. 80 < data, Red LED
    lcd.createChar(4, topAngry1);
    lcd.createChar(5, topAngry2);
    lcd.createChar(6, bottomAngry1);
    lcd.createChar(7, bottomAngry2);
    digitalWrite(9HIGH);
    digitalWrite(10LOW);
    digitalWrite(11LOW);
  }
  else if (data > 50) {                           //Normal. 30 < data < 80, Yellow LED
    lcd.createChar(4, topSoSo1);
    lcd.createChar(5, topSoSo2);
    lcd.createChar(6, bottomSoSo1);
    lcd.createChar(7, bottomSoSo2);
    digitalWrite(9HIGH);
    digitalWrite(10HIGH);
    digitalWrite(11LOW);
  }
  else {                                                     //Good. data < 30, Green LED
    lcd.createChar(4, topSmile1);
    lcd.createChar(5, topSmile2);
    lcd.createChar(6, bottomSmile1);
    lcd.createChar(7, bottomSmile2);
    digitalWrite(9LOW);
    digitalWrite(10HIGH);
    digitalWrite(11LOW);
  }
}
 
void setup() {
  lcd.init();
  lcd.backlight();
 
  lcd.createChar((byte)0, temp);
  lcd.createChar(1, humi);
  lcd.createChar(2, dust);
  lcd.createChar(3, C);
 
  pinMode(9OUTPUT);
  pinMode(10OUTPUT);
  pinMode(11OUTPUT);
 
  Serial.begin(9600);
 
  /////(infrared LED pin, sensor pin)  /////
  PM.init(sensorLED, sensorPin);
}
 
void loop() {
  byte temp = dht.readTemperature();
  byte humi = dht.readHumidity();
 
  if (isnan(humi) || isnan(temp) ) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
 
 
  float data = 0;
  int err = PMsensorErrSuccess;
  if ((err = PM.read(&data, true, sensitivity)) != PMsensorErrSuccess) {
    Serial.print("data Error = ");
    Serial.println(err);
    delay(1500);
    return;
  }
 
  Serial.println(data);
  delay(1500);
  setEmoticon(data);
  //----------------------------------------------------LCD 출력----------------------------------------------------//
  lcd.setCursor(00);
  lcd.write(2);
  lcd.print(" ");
  lcd.print(data);
 
  if (data > 100) {
    lcd.print("ug");
  }
  else if (data > 10) {
    lcd.print(" ug");
  }
  else {
    lcd.print(" ug  ");
  }
 
 
 
  lcd.setCursor(01);
  lcd.write((byte)0);
  lcd.print(" ");
  lcd.print((int)temp);
  lcd.write(3);
 
  lcd.print(" ");
  lcd.write(1);
  lcd.print(" ");
  lcd.print((int)humi);
  lcd.print("%");
 
  lcd.setCursor(130);
  lcd.write(4);
  lcd.write(5);
 
  lcd.setCursor(131);
  lcd.write(6);
  lcd.write(7);
}
 

 

 

 

미세먼지측정기 제작하기

하드웨어(HW)와 소프트웨어(SW)가 완성되었으니 이제 외관을 제작할 차례입니다. 

미세먼지측정기의 외관 제작에 대해 알아볼까요?

 

※ 조립 가이드에서 사용되는 볼트와 너트의 명칭입니다. 사진을 통해 모양을 잘 숙지해주세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

완성 사진

미세먼지측정기의 완성 모습입니다. 

어느곳에나 잘 어울리는 감성 뿜뿜!! 미세먼지측정기!! :)

 

 

 

 

 

 

작동 영상

미세먼지 측정기의 작동 영상입니다. 

먼지의 양에 따라 미세먼지의 농도가 다르게 측정되는 것을 확인할 수 있습니다. 

 

이외에도 Co2 센서, 가스 센서 등 다양한 센서들을 확장 연결한다면, 다양한 환경 데이터를 한 번에 측정해 볼 수 있겠죠?

 

 

#생생병맛리뷰 #평화로운코코아팹

 

 

 

 

 

 

지원(Support)

Q1. LCD가 잘 나오지 않습니다. 무슨 문제일까요? 

A1. LCD에는 I2C 주소가 존재합니다 -> LiquidCrystal_I2C lcd(LCD 이름, 16, 2);.

0x27 또는 0x3F로 주소를 바꿔서 테스트를 해보시고, LCD 뒷면에 가변 저항을 통해 선명도를 조절해보세요.

 

 

 

Q2. 인터넷에서 검색되는 초미세먼지의 농도와 미세먼지측정기 기트에서 측정되는 농도가 달라요. 

A2. 인터넷에서 검색되는 미세먼지는 기상청 또는 환경부에서 측정된 시간별 평균 수치입니다. 기상청에서 사용되는 미세 먼지 측정 장비는 고가의 장비입니다. 미세먼지측정기에 사용되는 미세먼지센서는 DIY용 센서로서 전문 장비와 단순 데이터를 비교하는 것은 무리가 있으며, 주변 환경에 따라 미세먼지농도의 변화량을 확인하기에 적절한 성능을 가지고 있습니다. 

 

 

 

Klant

코코아팹, kocoafab, 오렌지보드, orangeboard, 미세먼지측정기, PM, dust, DIY, Maker