- 필요한 구성 요소
- Sharp GP2Y1014AU0F 센서
- OLED 디스플레이 모듈
- 회로도
- 성능 기판에 회로 구축
- 대기 질 분석기 코드 설명
- Arduino와 Sharp GP2Y1014AU0F 센서의 인터페이스 테스트
대기 오염은 많은 도시에서 주요 문제이며 대기 질 지수는 매일 나 빠지고 있습니다. 세계 보건기구 (WHO) 보고서에 따르면 자동차 사고보다 공기 중에 나타나는 유해 입자의 영향으로 조기 사망하는 사람이 더 많습니다. EPA (Environmental Protection Agency)에 따르면 실내 공기는 실외 공기보다 2 ~ 5 배 더 독성이 있습니다. 그래서 여기서 우리는 공기 중의 먼지 입자 밀도를 측정하여 공기 질을 모니터링하는 프로젝트를 구축합니다.
따라서 LPG 감지기, 연기 감지기 및 공기 품질 모니터와 같은 이전 프로젝트를 계속 진행 하면서 Sharp GP2Y1014AU0F 센서를 Arduino Nano와 인터페이스하여 공기 중 먼지 밀도를 측정 할 것 입니다. 먼지 센서 및 Arduino Nano 외에도 OLED 디스플레이는 측정 값을 표시하는 데 사용됩니다. Sharp의 GP2Y1014AU0F 먼지 센서는 담배 연기와 같은 매우 미세한 입자를 감지하는 데 매우 효과적입니다. 공기 청정기 및 에어컨 용으로 설계되었습니다.
필요한 구성 요소
- Arduino Nano
- Sharp GP2Y1014AU0F 센서
- 0.96 'SPI OLED 디스플레이 모듈
- 점퍼 와이어
- 220µf 커패시터
- 150Ω 저항기
Sharp GP2Y1014AU0F 센서
Sharp의 GP2Y1014AU0F는 공기 중의 먼지 입자를 감지하도록 설계된 소형 6 핀 아날로그 출력 광학 공기질 / 광학 먼지 센서입니다. 그것은 레이저 산란 의 원리에 따라 작동합니다. 센서 모듈 내부에는 아래 이미지와 같이 공기 흡입구 근처에 적외선 방출 다이오드와 포토 센서가 대각선으로 배열되어 있습니다.
먼지 입자가 포함 된 공기가 센서 챔버로 들어가면 먼지 입자가 IR LED 빛을 광 검출기쪽으로 산란시킵니다. 산란광의 강도는 먼지 입자에 따라 다릅니다. 공기 중의 먼지 입자가 많을수록 빛의 강도가 높아집니다. 센서 의 V OUT 핀 에서 출력 전압 은 산란광의 강도에 따라 변합니다.
GP2Y1014AU0F 센서 핀아웃:
앞서 언급했듯이 GP2Y1014AU0F 센서는 6 핀 커넥터 와 함께 제공됩니다. 아래 그림과 표는 GP2Y1014AU0F의 핀 할당을 보여줍니다.
S. 아니. |
핀 이름 |
핀 설명 |
1 |
V-LED |
LED Vcc 핀. 150Ω 저항을 통해 5V에 연결 |
2 |
LED-GND |
LED 접지 핀. GND에 연결 |
삼 |
LED |
LED On / Off 전환에 사용됩니다. Arduino의 디지털 핀에 연결 |
4 |
S-GND |
센서 접지 핀. Arduino의 GND에 연결 |
5 |
V 아웃 |
센서 아날로그 출력 핀. 아날로그 핀에 연결 |
6 |
V CC |
포지티브 공급 핀. Arduino의 5V에 연결 |
GP2Y1014AU0F 센서 사양:
- 낮은 전류 소비: 최대 20mA
- 일반 작동 전압: 4.5V ~ 5.5V
- 감지 가능한 최소 먼지 크기: 0.5µm
- 먼지 밀도 감지 범위: 최대 580ug / m 3
- 감지 시간: 1 초 미만
- 크기: 1.81 x 1.18 x 0.69 ''(46.0 x 30.0 x 17.6mm)
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 및 다른 마이크로 컨트롤러와의 인터페이스에 대해 자세히 알아보십시오.
회로도
회로 다이어그램 아두 이노와 인터페이스 샤프 GP2Y1014AU0F 센서는 아래와 같습니다:
GP2Y10 센서와 OLED 디스플레이 모듈을 Arduino Nano 와만 연결하기 때문에 회로가 매우 간단합니다. GP2Y10 센서 및 OLED 디스플레이 모듈은 모두 + 5V 및 GND로 전원이 공급됩니다. V0 핀은 Arduino Nano의 A5 핀과 연결됩니다. 센서의 LED 핀은 Arduino의 디지털 핀 12에 연결됩니다. 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 |
S. 아니 |
센서 핀 |
Arduino 핀 |
1 |
Vcc |
5V |
2 |
V O |
A5 |
삼 |
S-GND |
GND |
4 |
LED |
7 |
5 |
LED-GND |
GND |
6 |
V-LED |
150Ω 저항을 통한 5V |
성능 기판에 회로 구축
성능 보드의 모든 구성 요소를 납땜하면 다음과 같이 보일 것입니다. 그러나 브레드 보드에 구축 할 수도 있습니다. SDS011 센서를 인터페이스하는 데 사용한 것과 동일한 보드에 GP2Y1014 센서를 납땜했습니다. 납땜하는 동안 납땜 와이어가 서로 충분한 거리에 있어야합니다.
대기 질 분석기 코드 설명
이 프로젝트의 전체 코드는 문서 끝에 제공됩니다. 여기에서는 코드의 중요한 부분을 설명합니다.
이 코드는 사용 Adafruit_GFX , 및 Adafruit_SSD1306의 라이브러리를. 이러한 라이브러리는 Arduino IDE의 Library Manager에서 다운로드하여 설치할 수 있습니다. 이를 위해 Arduino IDE를 열고 Sketch <Include Library <Manage Libraries로 이동하십시오 . 이제 Adafruit GFX를 검색하고 Adafruit 의 Adafruit GFX 라이브러리를 설치합니다.
마찬가지로 Adafruit 의 Adafruit SSD1306 라이브러리를 설치합니다.
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);
그 후 먼지 센서 감지 및 LED 핀을 정의하십시오. 감지 핀은 전압 값을 읽는 데 사용되는 먼지 센서의 출력 핀이며 LED 핀은 IR Led를 켜거나 끄는 데 사용됩니다.
int sensePin = A5; int ledPin = 7;
이제 setup () 함수 내에서 디버깅을 위해 9600의 전송 속도로 직렬 모니터를 초기화합니다. 또한 begin () 함수로 OLED 디스플레이를 초기화합니다.
Serial.begin (9600); display.begin (SSD1306_SWITCHCAPVCC);
loop () 함수 내에서 Arduino Nano의 아날로그 핀 5에서 전압 값을 읽습니다. 먼저 IR LED를 켜고 출력 전압을 읽기 전에 0.28ms를 기다립니다. 그 후 아날로그 핀에서 전압 값을 읽으십시오. 이 작업은 약 40 ~ 50 마이크로 초가 걸리므로 먼지 센서 led를 끄기 전에 40 마이크로 초 지연을 도입하십시오. 사양에 따르면 LED는 10ms마다 한 번씩 펄싱되어야하므로 나머지 10ms주기 = 10000-280-40 = 9680 마이크로 초 동안 기다려야합니다.
digitalWrite (ledPin, LOW); delayMicroseconds (280); outVo = analogRead (sensePin); delayMicroseconds (40); digitalWrite (ledPin, HIGH); delayMicroseconds (9680);
그런 다음 다음 줄에서 출력 전압과 신호 값을 사용하여 먼지 밀도를 계산합니다.
sigVolt = outVo * (5/1024); dustLevel = 0.17 * sigVolt-0.1;
그런 다음 setTextSize () 및 setTextColor ()를 사용하여 텍스트 크기와 텍스트 색상을 설정합니다.
display.setTextSize (1); display.setTextColor (WHITE);
그런 다음 다음 줄에서 setCursor (x, y) 메서드를 사용하여 텍스트가 시작되는 위치를 정의합니다. 그리고 display.println () 함수를 사용하여 OLED 디스플레이에 먼지 밀도 값을 인쇄합니다.
display.println ("먼지"); display.println ("밀도"); display.setTextSize (3); display.println (dustLevel);
마지막으로 display () 메서드를 호출하여 OLED 디스플레이에 텍스트를 표시합니다.
display.display (); display.clearDisplay ();
Arduino와 Sharp GP2Y1014AU0F 센서의 인터페이스 테스트
하드웨어와 코드가 준비되면 센서를 테스트 할 차례입니다. 이를 위해 Arduino를 노트북에 연결하고 보드와 포트를 선택한 다음 업로드 버튼을 누르십시오. 아래 이미지에서 볼 수 있듯이 OLED 디스플레이에 Dust Density가 표시됩니다.
전체 작업 비디오 및 코드는 아래에 나와 있습니다. 튜토리얼을 즐겁게 읽고 유용한 것을 배웠기를 바랍니다. 질문이 있으시면 댓글 섹션에 남겨 주시거나 다른 기술 질문에 대한 포럼을 사용하십시오.