대기 중의 이산화탄소 농도 증가는 이제 심각한 문제가되었습니다. NOAA 보고서에 따르면 오존 CO2 농도는 0.0385 % (385ppm)에 도달했으며 210 만년 만에 가장 많은 양입니다. 이것은 백만 개의 공기 입자에 385 개의 이산화탄소 입자가 있음을 의미합니다. 이러한 증가하는 CO2 수준은 환경에 심각한 영향을 미치고 기후 변화와 지구 온난화와 같은 상황에 직면하게되었습니다. 도로에는 CO2 수준을 알려주기 위해 많은 공기질 측정기가 설치되어 있지만 DIY CO2 측정기 를 만들어 우리 지역에 설치할 수도 있습니다.
이 튜토리얼에서는 PPM의 CO2 농도를 측정하기 위해 중력 적외선 CO2 센서를 Arduino와 인터페이스 할 것입니다. Gravity Infrared CO2 Sensor 는 고정밀 아날로그 CO2 센서입니다. 0 ~ 5000ppm 범위의 CO2 함량을 측정합니다. MQ135 가스 센서, Sharp GP2Y1014AU0F 센서 및 Nova PM 센서 SDS011을 사용하여 대기 질 모니터를 구축 한 이전 프로젝트를 확인할 수도 있습니다.
필요한 구성 요소
- Arduino Nano
- 중력 적외선 CO2 센서 V1.1
- 점퍼 와이어
- 0.96 'SPI OLED 디스플레이 모듈
- 브레드 보드
중력 적외선 CO2 센서
Gravity Infrared CO2 Sensor V1.1은 DFRobot에서 출시 한 최신 고정밀 아날로그 적외선 CO2 센서입니다. 이 센서는 비 분산 적외선 (NDIR) 기술을 기반으로하며 우수한 선택 성과 무산소 의존성을 가지고 있습니다. 온도 보상을 통합하고 DAC 출력을 지원합니다. 이 센서의 유효 측정 범위는 ± 50ppm + 3 %의 정확도로 0 ~ 5000ppm입니다. 이 적외선 CO2 센서는 HVAC, 실내 공기질 모니터링, 산업 공정 및 보안 보호 모니터링, 농업 및 축산 생산 공정 모니터링에 사용할 수 있습니다.
적외선 CO2 센서 핀아웃:
앞서 언급했듯이 적외선 CO2 센서 는 3 핀 커넥터 와 함께 제공됩니다. 아래 그림과 표는 적외선 CO2 센서의 핀 할당을 보여줍니다.
핀 번호 |
핀 이름 |
기술 |
---|---|---|
1 |
신호 |
아날로그 출력 (0.4 ~ 2V) |
2 |
VCC |
VCC (4.5 ~ 5.5V) |
삼 |
GND |
GND |
적외선 CO2 센서 사양 및 특징:
- 가스 감지: 이산화탄소 (CO2)
- 작동 전압: 4.5 ~ 5.5V DC
- 예열 시간: 3 분
- 응답 시간: 120 초
- 작동 온도: 0 ~ 50 ℃
- 작동 습도: 0 ~ 95 % RH (비 응결)
- 방수 및 부식 방지
- 높은 수명
- 수증기 간섭 방지
0.96 'OLED 디스플레이 모듈
OLED (Organic Light-Emitting Diodes)는 두 도체 사이에 일련의 유기 박막을 배치하여 구성된 자체 발광 기술입니다. 이 필름에 전류가 흐르면 밝은 빛이 생성됩니다. OLED는 TV와 동일한 기술을 사용하지만 대부분의 TV보다 픽셀 수가 적습니다.
이 프로젝트에서는 단색 7 핀 SSD1306 0.96 인치 OLED 디스플레이를 사용합니다. SPI 3 Wire 모드, SPI 4-wire 모드 및 I2C 모드의 세 가지 통신 프로토콜에서 작동 할 수 있습니다. 핀과 그 기능은 아래 표에 설명되어 있습니다.
우리는 이미 이전 기사에서 OLED와 그 유형에 대해 자세히 다루었습니다.
핀 이름 |
다른 이름들 |
기술 |
Gnd |
바닥 |
모듈의 접지 핀 |
Vdd |
Vcc, 5V |
전원 핀 (3-5V 허용) |
SCK |
D0, SCL, CLK |
시계 핀 역할을합니다. I2C 및 SPI 모두에 사용 |
SDA |
D1, MOSI |
모듈의 데이터 핀. IIC 및 SPI 모두에 사용 |
RES |
RST, 리셋 |
모듈 재설정 (SPI 중에 유용) |
DC |
A0 |
데이터 명령 핀. SPI 프로토콜에 사용 |
CS |
칩 선택 |
SPI 프로토콜에서 둘 이상의 모듈을 사용할 때 유용합니다. |
OLED 사양:
- OLED 드라이버 IC: SSD1306
- 해상도: 128 x 64
- 시각 각도:> 160 °
- 입력 전압: 3.3V ~ 6V
- 픽셀 색상: 블루
- 작동 온도: -30 ° C ~ 70 ° C
링크를 따라 OLED 및 다른 마이크로 컨트롤러와의 인터페이스에 대해 자세히 알아보십시오.
회로도
Arduino 용 중력 아날로그 적외선 CO2 센서 인터페이스를위한 회로도 는 다음과 같습니다.
중력 적외선 CO2 센서와 OLED 디스플레이 모듈 만 Arduino Nano와 연결하기 때문에 회로가 매우 간단합니다. 적외선 CO2 센서 및 OLED 디스플레이 모듈은 모두 + 5V 및 GND로 전원이 공급됩니다. CO2 센서의 Signal (Analog Out) 핀은 Arduino Nano의 A0 핀에 연결됩니다. OLED Display 모듈은 SPI 통신을 사용하기 때문에 OLED 모듈과 Arduino Nano 사이에 SPI 통신을 구축했습니다. 연결은 아래 표에 나와 있습니다.
S. 아니 |
OLED 모듈 핀 |
Arduino 핀 |
1 |
GND |
바닥 |
2 |
VCC |
5V |
삼 |
D0 |
10 |
4 |
D1 |
9 |
5 |
RES |
13 |
6 |
DC |
11 |
7 |
CS |
12 |
회로도에 따라 하드웨어를 연결하면 다음과 같이 보일 것입니다.
CO2 농도를 측정하는 Arduino 코드
이 Arduino 용 Gravity Analog Infrared CO2 Sensor 프로젝트 의 전체 코드 는 문서 끝 부분에 나와 있습니다. 여기서 우리는 코드의 몇 가지 중요한 부분을 설명합니다.
이 코드는 사용 Adafruit_GFX , 및 Adafruit_SSD1306의 라이브러리를. 이러한 라이브러리는 Arduino IDE의 Library Manager에서 다운로드하여 설치할 수 있습니다. 이를 위해 Arduino IDE를 열고 Sketch> Include Library> Manage Libraries로 이동 합니다. 이제 Adafruit GFX를 검색하고 Adafruit의 Adafruit GFX 라이브러리를 설치합니다.
마찬가지로 Adafruit 의 Adafruit SSD1306 라이브러리를 설치합니다. 적외선 CO2 센서는 Arduino의 아날로그 핀에서 직접 전압 값을 읽으므로 라이브러리가 필요하지 않습니다.
Arduino IDE에 라이브러리를 설치 한 후 필요한 라이브러리 파일을 포함하여 코드를 시작합니다. Arduino의 아날로그 핀에서 직접 판독하므로 먼지 센서는 라이브러리가 필요하지 않습니다.
#포함
그런 다음 OLED 너비와 높이를 정의합니다. 이 프로젝트에서는 128x64 SPI OLED 디스플레이를 사용하고 있습니다. 당신은 변경할 수 있습니다 SCREEN_WIDTH을 하고 SCREEN_HEIGHT의 디스플레이에 따라 변수.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
그런 다음 OLED 디스플레이가 연결된 SPI 통신 핀을 정의합니다.
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
그런 다음 SPI 통신 프로토콜로 앞서 정의한 너비와 높이로 Adafruit 디스플레이 인스턴스를 만듭니다.
Adafruit_SSD1306 디스플레이 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
그런 다음 CO2 센서가 연결된 Arduino 핀을 정의하십시오.
int sensorIn = A0;
이제 setup () 함수 내에서 디버깅을 위해 9600의 전송 속도로 직렬 모니터를 초기화합니다. 또한 begin () 함수로 OLED 디스플레이를 초기화합니다.
Serial.begin (9600); display.begin (SSD1306_SWITCHCAPVCC); analogReference (DEFAULT);
내부 루프 () 함수, 우선 호출의 Arduino의 아날로그 핀의 신호 값을 판독 analogRead () 함수. 그런 다음 이러한 아날로그 신호 값을 전압 값으로 변환합니다.
void loop () {int sensorValue = analogRead (sensorIn); 부동 전압 = sensorValue * (5000 / 1024.0);
그 후 전압 값을 비교하십시오. 전압이 0V이면 센서에 문제가 발생한 것입니다. 전압이 0V보다 크지 만 400V보다 작 으면 센서가 여전히 예열 프로세스에 있음을 의미합니다.
if (전압 == 0) {Serial.println ("오류"); } else if (전압 <400) {Serial.println ("예열"); }
전압이 400V 이상이면 CO2 농도 값으로 변환합니다.
else {int voltage_diference = voltage-400; 플로트 농도 = 전압 차 * 50.0 / 16.0;
그런 다음 setTextSize () 및 setTextColor ()를 사용하여 텍스트 크기와 텍스트 색상을 설정합니다.
display.setTextSize (1); display.setTextColor (WHITE);
그런 다음 다음 줄에서 setCursor (x, y) 메서드를 사용하여 텍스트가 시작되는 위치를 정의합니다. 그리고 display.println () 함수를 사용하여 OLED 디스플레이에 CO2 값을 인쇄합니다.
display.println ("CO2"); display.setCursor (63,43); display.println ("(PPM)"); display.setTextSize (2); display.setCursor (28,5); display.println (농도);
마지막으로 display () 메서드를 호출하여 OLED 디스플레이에 텍스트를 표시합니다.
display.display (); display.clearDisplay ();
중력 적외선 CO2 센서의 인터페이스 테스트
하드웨어와 코드가 준비되면 센서를 테스트 할 차례입니다. 이를 위해 Arduino를 노트북에 연결하고 보드와 포트를 선택한 다음 업로드 버튼을 누르십시오. 그런 다음 직렬 모니터를 열고 잠시 기다리면 (예열 프로세스) 최종 데이터가 표시됩니다.
값은 아래와 같이 OLED 디스플레이에 표시됩니다.
참고: 센서를 사용하기 전에 정확한 PPM 값을 얻기 위해 센서를 약 24 시간 동안 가열하십시오. 센서에 처음 전원을 켰을 때 출력 CO2 농도는 1500PPM ~ 1700PPM이었고, 24 시간 가열 과정 후 출력 CO2 농도는 올바른 PPM 값인 450PPM ~ 500PPM으로 감소했습니다. 따라서 센서를 사용하여 CO2 농도를 측정하기 전에 센서를 보정해야합니다.
이것이 적외선 CO2 센서를 사용하여 공기 중의 정확한 CO2 농도를 측정하는 방법입니다. 전체 코드와 작업 비디오는 아래에 나와 있습니다. 의심스러운 점이 있으면 댓글 섹션에 남겨 두거나 기술 지원을 위해 포럼을 사용하십시오.