이산화탄소 센서 실험

by 조혜인 | 2016-06-28 14:58
공기 농도 실내 아두이노 이산화탄소 이산화탄소농도 측정기 환기

무더운 여름이네요~

실내 공기 환경 다들 어떠신가요?

바깥 공기 만큼 상쾌한가요?

요새 미세먼지 때문에 바깥공기도 무섭긴 하지만요.




오늘은 이산화탄소 센서를 실험해 보았습니다.






1.  센서 SH-300-DS


오늘 이용할 센서는 소하테크의 SH-300-DS 센서입니다.

전압의 세기에 따라 출력값이 달라집니다.




* SH-300-DS 아날로그 출력표


3000ppm

5000ppm

10000ppm

0v

0ppm

0ppm

0ppm

1v

1000ppm

1666.7ppm

3333.3ppm

2v

2000ppm

3333.3ppm

6666.7ppm

3v

3000ppm

5000ppm

10000ppm




ppm은 실내 이산화탄소 농도를 의미합니다.

'parts per million'으로 100만분율을 의미합니다. 

어떤 양이 전체의 100만분의 몇을 차지하는가를 나타낼 때 사용됩니다.








2. 아두이노 코드


코드는 매우 간단합니다.

analog값을 읽어들인 후, serial창에 출력합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int pin = A0;
int val = 0;
int calVal = 0;
 
void setup() {
  // put your setup code here, to run once:
  pinMode(pin, INPUT);
  Serial.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
  val = analogRead(pin);
  calVal = map(val, 0, 1023, 0, 10000);
  
  Serial.println(calVal);
  delay(5);
}
cs




3V 전압을 주었기 때문에 input값을 0~10000으로 mapping했습니다.

Serial창에서 다음과 같은 수치를 얻을 수 있네요.













3. Data Visualization


3-1. Data


이런 수치 그 자체보다도 실질적으로 이산화탄소 농도가

우리에게 어떤 영향을 미치는가를 아는게 중요하겠죠?

다음은 인체에 미치는 영향을 이산화탄소 농도별로 나타낸 표입니다.


ppm

농도별 인체에 미치는 영향

450

건강한 환경관리가 된 레벨

700

장시간 있어도 건강에 문제가 없는 실내 레벨

1000

건강 피해는 없지만 불쾌감을 느끼는 레벨

2000

졸림을 느끼는 등 컨디션 변화가 오는 레벨

3000

어깨 결림이나 두통을 느끼는 등 건강 피해가 생기는 레벨

>3000

두통, 현기증 등의 증상이 나오고 장시간으로는 건강을 해치는 레벨

(한국패시브건축학회)


아두이노로 받은 데이터를 프로세싱(processing)과 연동하여

graph를 이용한 data visualizing을 할 것입니다.

graph를 활용하면 data를 효과적으로 관찰하기에 좋겠죠?


graph활용을 위한 아두이노 공식 사이트 링크입니다.

https://www.arduino.cc/en/Tutorial/Graph





3-2. 프로세싱 코드


입력받은 이산화탄소 농도 값을 graph의 세로축에 mapping해준 코드입니다.

0~10000(ppm)까지의 값을 0~800(pixel)의 높이로 변환했습니다.


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
 
import processing.serial.*;
 
Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph
float inByte = 0;
 
void setup () {
  // set the window size:
  size(800, 500);
 
  // List all the available serial ports
  // if using Processing 2.1 or later, use Serial.printArray()
  println(Serial.list());
 
  // I know that the first port in the serial list on my mac
  // is always my  Arduino, so I open Serial.list()[0].
  // Open whatever port is the one you're using.
  myPort = new Serial(this, Serial.list()[0], 9600);
 
  // don't generate a serialEvent() unless you get a newline character:
  myPort.bufferUntil('\n');
 
  // set inital background:
  background(0);
}
void draw () {
  // draw the line:
  stroke(127, 34, 255);
  line(xPos, height, xPos, height - inByte);
 
  //text guide
  textSize(25);
  text("1000ppm", 0, height/10*9); 
  stroke(255, 255, 255);  
  line(0, height/10*9, width, height/10*9);
 
  textSize(25);
  text("2000ppm", 0, height/10*8); 
  stroke(255, 255, 255);  
  line(0, height/10*8, width, height/10*8);
 
  textSize(25);
  text("3000ppm", 0, height/10*7); 
  stroke(255, 255, 255);  
  line(0, height/10*7, width, height/10*7);
 
  // at the edge of the screen, go back to the beginning:
  if (xPos >= width) {
    xPos = 0;
    background(0);
  } else {
    // increment the horizontal position:
    xPos++;
  }
}
 
 
void serialEvent (Serial myPort) {
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');
 
  if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);
    // convert to an int and map to the screen height:
    inByte = float(inString);
    println(inByte);
    inByte = map(inByte, 0, 10000, 0, height);
  }
}
 
cs




graph를 한번 볼까요?




제가 있는 공간은 이산화탄소 수치가 2000을 웃도네요.

아무래도 한 공간에서 짧은 시간 측정하다 보니

눈에 띄는 차이는 포착하지 못했습니다.


중간중간 생기는 노이즈는 값보정이 필요해 보입니다.

또한 일상생활에서 10000ppm까지 올라갈 일은 크게 없어보입니다.

조사한 자료도 3000이상이면 매우 위험한 수치로 분류해 놓았고요.

센싱범위가 적은 저렴한 센서를 이용하면 실용적이면서

저렴해져서 보급화하기에 매우 유익한 키트가 될 것 같습니다.








다음 스토리는 저렴한 센서를 이용해 보겠습니다.

MH-Z19 모듈입니다.

25달러, 5000ppm까지 측정 가능합니다.

얼마나 유용할지 궁금하네요~






댓글 5

MADE BY

조혜인

arduino, processing, rhino, sketchup, 아두이노, 에프터이펙트, 포토샵, 프리미어