1. Environment Monitoring Sensors
주거환경에 있어서, 공기의 질을 좋게 하는 것은 수면 뿐만 아니라, 일상 생활의 기초를 온건히 해주는 매우 중요한 것이라고 생각합니다. 그래서 사람들은 공기 좋은 산과 들을 찾는 이유이기도 하구요. 지금까지 확인해 본 공기의 질을 측정하는 센서들은 다음과 같습니다.
* Hardware | 공기질 측정용 MiCS-6814 센서를 사용해 보자 - 1
* Hardware | ZP07-MP901 공기질 측정 센서
* Hardware | Sharp GP2Y1010AU0F dust sensor
* Hardware | ZE08-CH2O Formaldehyde 센서 사용해보기
* Hardware | CO2 센서인 MH-Z14A 를 활용해 보자
이번에는 SCD41 이라는 CO2 센서를 구입해서 활용해 봤습니다.
2. Purchase
CO2 를 검출하는 센서를 알게 되었습니다. AliExpress 에서도 검색이 되지만, 꽤 가격이 나가는 센서였네요. 그럼에도 궁금하여 구입 하였습니다.
* SCD40 SCD41 Gas Sensor Module Detects CO2 Carbon Dioxide Temperature and Humidity In One Sensor I2C Communication
잘 도착 했습니다. 표지를 보니, CO2 뿐만 아니라, 습도와 온도도 같이 측정해 줍니다.
라벨을 기록으로 남겨 봅니다.
3. Breakout Board
아래는 사양 입니다.
I2C 로 통신하는 센서 breakout 이라고 해야 겠네요.
다리에 납땜 하면, 빵판에 바로 꼽을 수 있습니다.
4. Connection Layout
Arduino Nano 와 I2C 연결만 하면 됩니다.
+---------------+----------+---------------+
| Arduino Nano | Wire | SCD41 |
+---------------+----------+---------------+
| A4 | SDA | SDA |
| A5 | SCL | SCL |
| 5V | Power | VCC |
| GND | Ground | GND |
+---------------+----------+---------------+
Fritzing 으로 그려보면, 다음과 같습니다.
실제 연결 사진 입니다. 안정적인 전압과 전류를 공급하기 위해, GND 와 VDD 는 별로 전원 소스를 이용.
5. i2cdetect
우선 I2C 통신을 할 때, 어느 주소로 통신해야 하는지를 알기 위해, i2cdetect 라는 소스로 확인해 봅니다.
Arduino IDE > Sketch > Include Library > Manage Libraries > i2cdetect
Arduino IDE 가 버전업에 따라, 좀 적응이 안되지만, Library Manager 를 이용하여 검색하면 나오니, 이를 활용합니다.
아주 쉬운 소스이니, 이 글에도 올려 봅니다.
#include "Wire.h"
#include "i2cdetect.h"
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("i2cdetect example\n");
Serial.print("Scanning address range 0x03-0x77\n\n");
}
void loop() {
i2cdetect(); // default range from 0x03 to 0x77
delay(2000);
}
결과는 다음과 같습니다. 62번 주소네요.
20:49:33.719 -> 0 1 2 3 4 5 6 7 8 9 a b c d e f
20:49:33.751 -> 00: -- -- -- -- -- -- -- -- -- -- -- -- --
20:49:33.751 -> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20:49:33.751 -> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20:49:33.751 -> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20:49:33.751 -> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20:49:33.751 -> 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20:49:33.751 -> 60: -- -- 62 -- -- -- -- -- -- -- -- -- -- -- -- --
20:49:33.785 -> 70: -- -- -- -- -- -- -- --
6. Source Code
동일하게 Library Manager 를 이용하여 SCD4X 를 검색합니다.
Arduino IDE > Sketch > Include Library > Manage Libraries > SCD4X
SparkFun 에서 공개된 소스가 있으니, 이를 설치하여 활용합니다.
소스 그대로 올려 봅니다. 여기는 main routine 이고, 중요한건 .h 로 끝나는 header 파일 입니다. 여기에서도 중요한 파일은 모든 통신 규약을 관장하는 SparkFun_SCD4x_Arduino_Library.h 파일 입니다.
#include "Wire.h"
#include "SparkFun_SCD4x_Arduino_Library.h" // Install from Library Manager
SCD4x mySensor;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!mySensor.begin()) {
Serial.println("Sensor not found. Check wiring!");
while (1);
}
Serial.println("SCD41 sensor found!");
// Start periodic measurements
mySensor.startPeriodicMeasurement();
}
void loop() {
delay(5000); // Wait for 5 seconds (SCD41 updates slowly)
if (mySensor.readMeasurement()) {
Serial.print("CO2: ");
Serial.print(mySensor.getCO2());
Serial.print(" ppm, Temp: ");
Serial.print(mySensor.getTemperature(), 1);
Serial.print(" °C, Humidity: ");
Serial.print(mySensor.getHumidity(), 1);
Serial.println(" %");
} else {
Serial.println("Sensor read failed.");
}
}
7. Result
전원을 인가하여 센서값이 나오려면 조금 시간이 걸려야 합니다.
그리고, 3.3V 로 동작시키면, 이빨 빠진 것 처럼 데이터 수집이 안정적이지 않습니다. 5V 를 인가하는 것이 안정적인 활용이 되겠습니다.
Serial Monitor 에서 측정된 값 입니다. 중간에 입김을 불어 넣어 값의 변화를 확인해 봤습니다.
20:08:36.606 -> SCD41 sensor found!
20:08:43.120 -> CO2: 1446 ppm, Temp: 27.1 °C, Humidity: 43.3 %
20:08:48.129 -> CO2: 1413 ppm, Temp: 26.9 °C, Humidity: 43.9 %
20:08:53.140 -> CO2: 1387 ppm, Temp: 26.7 °C, Humidity: 44.4 %
20:08:58.142 -> CO2: 1390 ppm, Temp: 26.6 °C, Humidity: 44.8 %
20:09:03.157 -> CO2: 1390 ppm, Temp: 26.4 °C, Humidity: 45.3 %
20:09:08.170 -> CO2: 1388 ppm, Temp: 26.3 °C, Humidity: 45.6 %
20:09:13.167 -> CO2: 1387 ppm, Temp: 26.1 °C, Humidity: 46.0 %
20:09:18.172 -> CO2: 1391 ppm, Temp: 26.0 °C, Humidity: 46.3 %
20:09:23.179 -> CO2: 1399 ppm, Temp: 26.0 °C, Humidity: 46.6 %
20:09:28.185 -> CO2: 1410 ppm, Temp: 25.9 °C, Humidity: 46.9 %
20:09:33.194 -> CO2: 1415 ppm, Temp: 25.8 °C, Humidity: 47.1 %
20:09:38.204 -> CO2: 1417 ppm, Temp: 25.7 °C, Humidity: 47.3 %
20:09:43.200 -> CO2: 1424 ppm, Temp: 25.6 °C, Humidity: 47.5 %
20:09:48.223 -> CO2: 1428 ppm, Temp: 25.6 °C, Humidity: 47.7 %
20:09:53.244 -> CO2: 1439 ppm, Temp: 25.5 °C, Humidity: 47.8 %
20:09:58.250 -> CO2: 1519 ppm, Temp: 25.5 °C, Humidity: 47.9 %
20:10:03.259 -> CO2: 1865 ppm, Temp: 25.5 °C, Humidity: 49.9 %
20:10:08.260 -> CO2: 2399 ppm, Temp: 25.5 °C, Humidity: 52.1 %
20:10:13.262 -> CO2: 3057 ppm, Temp: 25.4 °C, Humidity: 54.2 %
20:10:18.259 -> CO2: 4387 ppm, Temp: 25.5 °C, Humidity: 58.2 %
20:10:23.290 -> CO2: 4536 ppm, Temp: 25.5 °C, Humidity: 58.7 %
20:10:28.297 -> CO2: 4610 ppm, Temp: 25.6 °C, Humidity: 59.8 %
20:10:33.298 -> CO2: 4606 ppm, Temp: 25.6 °C, Humidity: 58.8 %
20:10:38.303 -> CO2: 4569 ppm, Temp: 25.6 °C, Humidity: 57.5 %
20:10:43.320 -> CO2: 4419 ppm, Temp: 25.6 °C, Humidity: 56.3 %
20:10:48.328 -> CO2: 4234 ppm, Temp: 25.6 °C, Humidity: 55.4 %
20:10:53.334 -> CO2: 4032 ppm, Temp: 25.5 °C, Humidity: 54.5 %
20:10:58.344 -> CO2: 3817 ppm, Temp: 25.5 °C, Humidity: 53.9 %
20:11:03.331 -> CO2: 3620 ppm, Temp: 25.5 °C, Humidity: 53.4 %
20:11:08.343 -> CO2: 3422 ppm, Temp: 25.5 °C, Humidity: 52.8 %
20:11:13.348 -> CO2: 3227 ppm, Temp: 25.5 °C, Humidity: 52.4 %
20:11:18.350 -> CO2: 3109 ppm, Temp: 25.5 °C, Humidity: 52.1 %
20:11:23.356 -> CO2: 2941 ppm, Temp: 25.5 °C, Humidity: 51.7 %
20:11:28.376 -> CO2: 2785 ppm, Temp: 25.5 °C, Humidity: 51.4 %
20:11:33.391 -> CO2: 2663 ppm, Temp: 25.4 °C, Humidity: 51.2 %
20:11:38.396 -> CO2: 2602 ppm, Temp: 25.5 °C, Humidity: 51.0 %
20:11:43.396 -> CO2: 2520 ppm, Temp: 25.5 °C, Humidity: 50.8 %
20:11:48.405 -> CO2: 2460 ppm, Temp: 25.5 °C, Humidity: 50.5 %
20:11:53.400 -> CO2: 2368 ppm, Temp: 25.5 °C, Humidity: 50.3 %
20:11:58.436 -> CO2: 2222 ppm, Temp: 25.5 °C, Humidity: 50.0 %
20:12:03.442 -> CO2: 2184 ppm, Temp: 25.5 °C, Humidity: 49.8 %
20:12:08.445 -> CO2: 2132 ppm, Temp: 25.5 °C, Humidity: 49.7 %
20:12:13.445 -> CO2: 2101 ppm, Temp: 25.5 °C, Humidity: 49.6 %
20:12:18.445 -> CO2: 2072 ppm, Temp: 25.5 °C, Humidity: 49.5 %
20:12:23.479 -> CO2: 2038 ppm, Temp: 25.5 °C, Humidity: 49.4 %
20:12:28.482 -> CO2: 2016 ppm, Temp: 25.5 °C, Humidity: 49.4 %
20:12:33.485 -> CO2: 2006 ppm, Temp: 25.5 °C, Humidity: 49.4 %
20:12:38.496 -> CO2: 1974 ppm, Temp: 25.5 °C, Humidity: 49.3 %
20:12:43.496 -> CO2: 1968 ppm, Temp: 25.5 °C, Humidity: 49.2 %
20:12:48.501 -> CO2: 1949 ppm, Temp: 25.5 °C, Humidity: 49.0 %
20:12:53.509 -> CO2: 1931 ppm, Temp: 25.5 °C, Humidity: 48.9 %
20:12:58.512 -> CO2: 1908 ppm, Temp: 25.5 °C, Humidity: 48.8 %
20:13:03.527 -> CO2: 1895 ppm, Temp: 25.5 °C, Humidity: 48.7 %
20:13:08.530 -> CO2: 1860 ppm, Temp: 25.5 °C, Humidity: 48.6 %
20:13:13.556 -> CO2: 1835 ppm, Temp: 25.5 °C, Humidity: 48.6 %
20:13:18.559 -> CO2: 1813 ppm, Temp: 25.5 °C, Humidity: 48.4 %
20:13:23.561 -> CO2: 1808 ppm, Temp: 25.5 °C, Humidity: 48.3 %
20:13:28.554 -> CO2: 1791 ppm, Temp: 25.6 °C, Humidity: 48.3 %
20:13:33.592 -> CO2: 1766 ppm, Temp: 25.5 °C, Humidity: 48.2 %
20:13:38.593 -> CO2: 1749 ppm, Temp: 25.6 °C, Humidity: 48.2 %
20:13:43.600 -> CO2: 1732 ppm, Temp: 25.6 °C, Humidity: 48.0 %
20:13:48.601 -> CO2: 1719 ppm, Temp: 25.6 °C, Humidity: 47.9 %
20:13:53.605 -> CO2: 1700 ppm, Temp: 25.6 °C, Humidity: 47.9 %
20:13:58.607 -> CO2: 1691 ppm, Temp: 25.6 °C, Humidity: 47.8 %
20:14:03.610 -> CO2: 1671 ppm, Temp: 25.6 °C, Humidity: 47.8 %
20:14:08.642 -> CO2: 1665 ppm, Temp: 25.6 °C, Humidity: 47.7 %
20:14:13.640 -> CO2: 1660 ppm, Temp: 25.6 °C, Humidity: 47.7 %
20:14:18.638 -> CO2: 1642 ppm, Temp: 25.6 °C, Humidity: 47.6 %
20:14:23.670 -> CO2: 1637 ppm, Temp: 25.6 °C, Humidity: 47.5 %
20:14:28.664 -> CO2: 1631 ppm, Temp: 25.6 °C, Humidity: 47.5 %
20:14:33.680 -> CO2: 1625 ppm, Temp: 25.6 °C, Humidity: 47.5 %
20:14:38.688 -> CO2: 1616 ppm, Temp: 25.6 °C, Humidity: 47.5 %
20:14:43.686 -> CO2: 1606 ppm, Temp: 25.6 °C, Humidity: 47.4 %
20:14:48.691 -> CO2: 1606 ppm, Temp: 25.6 °C, Humidity: 47.3 %
20:14:53.691 -> CO2: 1602 ppm, Temp: 25.6 °C, Humidity: 47.3 %
20:14:58.722 -> CO2: 1600 ppm, Temp: 25.6 °C, Humidity: 47.3 %
20:15:03.726 -> CO2: 1600 ppm, Temp: 25.6 °C, Humidity: 47.2 %
20:15:08.739 -> CO2: 1597 ppm, Temp: 25.6 °C, Humidity: 47.1 %
20:15:13.718 -> CO2: 1598 ppm, Temp: 25.6 °C, Humidity: 47.2 %
20:15:18.729 -> CO2: 1598 ppm, Temp: 25.6 °C, Humidity: 47.1 %
20:15:23.747 -> CO2: 1597 ppm, Temp: 25.6 °C, Humidity: 47.1 %
20:15:28.747 -> CO2: 1594 ppm, Temp: 25.7 °C, Humidity: 47.0 %
20:15:33.765 -> CO2: 1587 ppm, Temp: 25.6 °C, Humidity: 47.0 %
20:15:38.767 -> CO2: 1585 ppm, Temp: 25.6 °C, Humidity: 47.0 %
20:15:43.775 -> CO2: 1579 ppm, Temp: 25.6 °C, Humidity: 47.0 %
20:15:48.803 -> CO2: 1580 ppm, Temp: 25.6 °C, Humidity: 46.9 %
20:15:53.782 -> CO2: 1580 ppm, Temp: 25.7 °C, Humidity: 46.9 %
20:15:58.791 -> CO2: 1580 ppm, Temp: 25.6 °C, Humidity: 46.8 %
20:16:03.824 -> CO2: 1580 ppm, Temp: 25.6 °C, Humidity: 46.8 %
20:16:08.822 -> CO2: 1580 ppm, Temp: 25.7 °C, Humidity: 46.8 %
20:16:13.816 -> CO2: 1580 ppm, Temp: 25.7 °C, Humidity: 46.8 %
20:16:18.843 -> CO2: 1580 ppm, Temp: 25.7 °C, Humidity: 46.8 %
20:16:23.854 -> CO2: 1579 ppm, Temp: 25.7 °C, Humidity: 46.7 %
20:16:28.864 -> CO2: 1579 ppm, Temp: 25.7 °C, Humidity: 46.8 %
20:16:33.862 -> CO2: 1580 ppm, Temp: 25.7 °C, Humidity: 46.7 %
20:16:38.868 -> CO2: 1581 ppm, Temp: 25.7 °C, Humidity: 46.6 %
20:16:43.890 -> CO2: 1582 ppm, Temp: 25.7 °C, Humidity: 46.7 %
20:16:48.887 -> CO2: 1583 ppm, Temp: 25.7 °C, Humidity: 46.6 %
20:16:53.898 -> CO2: 1584 ppm, Temp: 25.7 °C, Humidity: 46.6 %
그래프로 그려 보니, 아래와 같이 나타났습니다. 입김 (CO2) 를 불어 넣음과 동시에 스파이크가 튀는군요. 입에서 나온 입김으로 습도도 조금 변했습니다. 시간이 지남에 따라, 확산 작용으로 인하여 다시 평균치로 돌아가는 모습을 확인할 수 있습니다.
즉각적인 반응도 그렇고, 온도와 습도 측정도 동시에 되는 것이 장점이 되겠습니다. CO2 농도의 PPM 은 4인 가족이 있을 때 1400 정도여서, 절적한 측정치임을 경험적으로 알 수 있었습니다. 다른 센서를 이용하여 경험했던 글은 아래 링크를 통해서 참고해 보세요.
* Hardware | CO2 센서인 MH-Z14A 를 활용해 보자
FIN












댓글
댓글 쓰기