- 필수 구성 요소 :
- 회로도 및 설명 :
- 작동 설명 :
- 코드 설명 :
- "; webpage + ="Air Quality is "; webpage + = air_quality; webpage + ="PPM "; webpage + ="
";
다음 코드는 sendData 라는 함수를 호출 하고 데이터 및 메시지 문자열을 표시 할 웹 페이지로 보냅니다.
sendData (cipSend, 1000, DEBUG); sendData (웹 페이지, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
다음 코드는 LCD에 데이터를 인쇄합니다. 공기질 점검을위한 다양한 조건을 적용하였으며, LCD는 상황에 따라 메시지를 출력하고 오염이 1000PPM을 넘으면 부저음도 울립니다.
lcd.setCursor (0, 0); lcd.print ( "Air Quality is"); lcd.print (air_quality); lcd.print ( "PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ( "Fresh Air"); digitalWrite (8, LOW);
마지막으로 아래 함수는 웹 페이지에 데이터를 보내고 표시합니다. 'webpage' 라는 문자열에 저장 한 데이터는 'command' 라는 문자열에 저장됩니다 . 그런 다음 ESP는 '명령' 에서 문자를 하나씩 읽고 웹 페이지에 인쇄합니다.
String sendData (문자열 명령, const int 시간 초과, 부울 디버그) {문자열 응답 = ""; esp8266.print (명령); // 읽은 문자를 esp8266에 보냅니다. long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp에 데이터가 있으므로 출력을 직렬 창에 표시 char c = esp8266.read (); // 다음 문자를 읽습니다. 응답 + = c; }} if (debug) {Serial.print (response); } 반환 응답; }
- 프로젝트 테스트 및 출력 :
이 프로젝트에서는 인터넷을 사용하여 웹 서버를 통해 대기 질을 모니터링하고 공기질이 일정 수준 이상으로 떨어지면 경보를 발생 시키는 IoT 기반 대기 오염 모니터링 시스템 을 만들 것입니다. 이산화탄소, 연기, 알코올, 벤젠 및 NH3와 같은 유해 가스가 공기 중에 존재합니다. LCD와 웹 페이지에 PPM으로 공기질을 표시하여 매우 쉽게 모니터링 할 수 있습니다.
이전에는 MQ6 센서를 사용하는 LPG 감지기와 MQ2 센서를 사용하는 연기 감지기를 구축했지만 이번에는 대부분의 유해 가스를 감지하고 그 양을 측정 할 수있어 대기 질 모니터링에 가장 적합한 대기 질 센서로 MQ135 센서를 사용했습니다. 정확히. 이 IOT 프로젝트에서는 컴퓨터 나 모바일을 사용하여 어디서나 오염 수준을 모니터링 할 수 있습니다. 우리는이 시스템을 어디에나 설치할 수 있으며 배기 팬을 켜거나 사용자에게 경고 SMS / 메일을 보낼 수있는 것과 같이 오염이 일정 수준을 넘어 설 때 일부 장치를 트리거 할 수도 있습니다.
필수 구성 요소:
- MQ135 가스 센서
- Arduino Uno
- Wi-Fi 모듈 ESP8266
- 16X2 LCD
- 브레드 보드
- 10K 전위차계
- 1K 옴 저항기
- 220 옴 저항기
- 부저
여기에서 위의 모든 구성 요소를 구입할 수 있습니다.
회로도 및 설명:
먼저 ESP8266을 Arduino와 연결합니다. ESP8266은 3.3V에서 실행되며 Arduino에서 5V를 제공하면 제대로 작동하지 않고 손상 될 수 있습니다. VCC와 CH_PD를 Arduino의 3.3V 핀에 연결합니다. ESP8266의 RX 핀은 3.3V에서 작동하며 Arduino에 직접 연결할 때 Arduino와 통신하지 않습니다. 따라서 5V를 3.3V로 변환하는 전압 분배기를 만들어야합니다. 이것은 우리가 회로에서했던 것처럼 세 개의 저항을 직렬로 연결하여 수행 할 수 있습니다. ESP8266의 TX 핀을 Arduino의 핀 10에 연결하고 esp8266의 RX 핀을 저항을 통해 Arduino의 핀 9에 연결합니다.
ESP8266 Wi-Fi 모듈은 프로젝트 에 Wi-Fi 또는 인터넷 액세스를 제공합니다. 매우 저렴한 장치이며 프로젝트를 매우 강력하게 만듭니다. 모든 마이크로 컨트롤러와 통신 할 수 있으며 IOT 플랫폼에서 가장 선도적 인 장치입니다. 여기에서 Arduino와 함께 ESP8266을 사용하는 방법에 대해 자세히 알아보십시오.
그런 다음 MQ135 센서를 Arduino에 연결합니다. VCC와 센서의 접지 핀을 5V에 연결하고 Arduino의 접지와 센서의 아날로그 핀을 Arduino의 A0에 연결합니다.
조건이 참이되면 신호음이 울리기 시작할 Arduino의 핀 8에 부저를 연결합니다.
마지막으로 LCD와 Arduino를 연결합니다. LCD의 연결은 다음과 같습니다.
- 핀 1 (VEE)을 접지에 연결합니다.
- 핀 2 (VDD 또는 VCC)를 5V에 연결합니다.
- 핀 3 (V0)을 10K 전위차계의 중간 핀에 연결하고 전위차계의 다른 두 끝을 VCC 및 GND에 연결합니다. 전위차계는 LCD의 화면 대비를 제어하는 데 사용됩니다. 10K 이외의 값의 전위차계도 작동합니다.
- 핀 4 (RS)를 Arduino의 핀 12에 연결합니다.
- 핀 5 (읽기 / 쓰기)를 Arduino의 접지에 연결합니다. 이 핀은 자주 사용되지 않으므로 접지에 연결합니다.
- 핀 6 (E)을 Arduino의 핀 11에 연결합니다. RS와 E 핀은 데이터와 문자를 보내는 데 사용되는 제어 핀입니다.
- 다음 4 개의 핀은 Arduino와 통신하는 데 사용되는 데이터 핀입니다.
핀 11 (D4)을 Arduino의 핀 5에 연결합니다.
핀 12 (D5)를 Arduino의 핀 4에 연결합니다.
핀 13 (D6)을 Arduino의 핀 3에 연결합니다.
핀 14 (D7)를 Arduino의 핀 2에 연결합니다.
- 220ohm 저항을 통해 핀 15를 VCC에 연결합니다. 저항은 백라이트 밝기를 설정하는 데 사용됩니다. 값이 클수록 백라이트가 훨씬 더 어두워집니다.
- 핀 16을 접지에 연결합니다.
작동 설명:
MQ135 센서는 NH3, NOx, 알코올, 벤젠, 연기, CO2 및 기타 가스를 감지 할 수 있으므로 대기 질 모니터링 프로젝트에 완벽한 가스 센서입니다. Arduino에 연결하면 가스를 감지하고 PPM (백만 분율)의 오염 수준을 얻습니다. MQ135 가스 센서는 전압 레벨의 형태로 출력을 제공하며이를 PPM으로 변환해야합니다. 따라서 PPM에서 출력을 변환하기 위해 여기에서는 MQ135 센서 용 라이브러리를 사용했습니다. 아래 "코드 설명"섹션에서 자세히 설명합니다.
센서는 근처에 가스가없고 공기의 안전 수준이 350 PPM이고 1000 PPM을 초과해서는 안되는 경우 90의 값을 제공했습니다. 1000 PPM의 한계를 초과하면 두통, 졸음 및 정체, 부실, 답답한 공기를 유발하고 2000 PPM을 초과하면 심박수 증가 및 기타 여러 질병을 유발할 수 있습니다.
값이 1000 PPM 미만이면 LCD와 웹 페이지에 "Fresh Air"가 표시됩니다. 값이 1000 PPM이 증가 할 때마다 부저가 울리기 시작하고 LCD와 웹 페이지에 "Poor Air, Open Windows"가 표시됩니다. 2000이 증가하면 부저가 계속 울리고 LCD와 웹 페이지에“위험! 신선한 공기로 이동”.
코드 설명:
이 프로젝트의 코딩을 시작하기 전에 먼저 MQ135 가스 센서를 보정해야합니다. 센서의 출력을 PPM 값으로 변환하는 것과 관련된 많은 계산이 있습니다. 우리는 이전의 연기 감지기 프로젝트에서이 계산을 수행했습니다. 그러나 여기에서는 MQ135 용 라이브러리를 사용하고 있으므로 https://github.com/GeorgK/MQ135에서이 MQ135 라이브러리를 다운로드하여 설치할 수 있습니다.
이 라이브러리를 사용하면 아래 두 줄을 사용하여 PPM 값을 직접 가져올 수 있습니다.
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
그러나 그 전에 MQ135 센서 를 보정 해야 합니다. 센서 보정을 위해 아래 주어진 코드를 업로드하고 12 ~ 24 시간 동안 실행 한 다음 RZERO 값 을 얻습니다.
#include "MQ135.h"void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // A0 핀에 센서 부착 float rzero = gasSensor.getRZero (); Serial.println (rzero); 지연 (1000); }
RZERO 값을 얻은 후. 다운로드 한 "MQ135.h" 라이브러리 파일에 RZERO 값을 넣으십시오. #define RZERO 494.63
이제 대기 질 모니터링 프로젝트의 실제 코드를 시작할 수 있습니다.
코드에서 먼저 가스 센서 및 LCD에 대한 라이브러리와 변수를 정의했습니다. 소프트웨어 직렬 라이브러리를 사용하여 모든 디지털 핀을 TX 및 RX 핀으로 만들 수 있습니다. 이 코드에서는 9 번 핀을 RX 핀으로, 10 번 핀을 ESP8266의 TX 핀으로 설정했습니다. 그런 다음 LCD 용 라이브러리를 포함하고 동일한 핀을 정의했습니다. 또한 센서 아날로그 핀에 대한 변수와 air_quality 값 을 저장하기위한 두 가지 변수를 더 정의했습니다.
#포함
그런 다음 핀 8을 부저를 연결 한 출력 핀으로 선언합니다. l cd.begin (16,2) 명령은 데이터를 수신하기 위해 LCD를 시작한 다음 커서를 첫 번째 줄로 설정하고 'circuitdigest'를 인쇄합니다. 그런 다음 두 번째 줄에 커서를 놓고 'Sensor Warming'을 인쇄 합니다.
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("센서 예열"); 지연 (1000);
그런 다음 직렬 통신을위한 전송 속도를 설정합니다. ESP마다 전송 속도가 다르므로 ESP의 전송 속도에 따라 작성하십시오. 그런 다음 Arduino와 통신하고 직렬 모니터에 IP 주소를 표시하도록 ESP를 설정하는 명령을 보냅니다.
Serial.begin (115200); esp8266.begin (115200); sendData ("AT + RST \ r \ n", 2000, DEBUG); sendData ("AT + CWMODE = 2 \ r \ n", 1000, DEBUG); sendData ("AT + CIFSR \ r \ n", 1000, DEBUG); sendData ("AT + CIPMUair_quality = 1 \ r \ n", 1000, DEBUG); sendData ("AT + CIPSERVER = 1,80 \ r \ n", 1000, DEBUG); pinMode (sensorPin, INPUT); lcd.clear ();
웹 브라우저의 웹 페이지에 출력을 인쇄하려면 HTML 프로그래밍 을 사용해야 합니다. 그래서 우리는 webpage 라는 문자열을 만들고 그 안에 출력을 저장했습니다. read () 함수는 ASCII 10 진수 값을 반환하고 0 인 첫 번째 10 진수는 48에서 시작 하므로 출력에서 48을 뺍니다.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {지연 (1000); int connectionId = esp8266.read ()-48; 문자열 웹 페이지 = "
IOT 대기 오염 모니터링 시스템
"; 웹 페이지 + =""; webpage + ="Air Quality is "; webpage + = air_quality; webpage + ="PPM "; webpage + ="
";
다음 코드는 sendData 라는 함수를 호출 하고 데이터 및 메시지 문자열을 표시 할 웹 페이지로 보냅니다.
sendData (cipSend, 1000, DEBUG); sendData (웹 페이지, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
다음 코드는 LCD에 데이터를 인쇄합니다. 공기질 점검을위한 다양한 조건을 적용하였으며, LCD는 상황에 따라 메시지를 출력하고 오염이 1000PPM을 넘으면 부저음도 울립니다.
lcd.setCursor (0, 0); lcd.print ("Air Quality is"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
마지막으로 아래 함수는 웹 페이지에 데이터를 보내고 표시합니다. 'webpage' 라는 문자열에 저장 한 데이터는 'command' 라는 문자열에 저장됩니다. 그런 다음 ESP는 '명령' 에서 문자를 하나씩 읽고 웹 페이지에 인쇄합니다.
String sendData (문자열 명령, const int 시간 초과, 부울 디버그) {문자열 응답 = ""; esp8266.print (명령); // 읽은 문자를 esp8266에 보냅니다. long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp에 데이터가 있으므로 출력을 직렬 창에 표시 char c = esp8266.read (); // 다음 문자를 읽습니다. 응답 + = c; }} if (debug) {Serial.print (response); } 반환 응답; }
프로젝트 테스트 및 출력:
코드를 업로드하기 전에 ESP8266 장치의 Wi-Fi에 연결되어 있는지 확인하십시오. 업로드 후 시리얼 모니터를 열면 아래와 같은 IP 주소가 표시됩니다.
브라우저에이 IP 주소를 입력하면 아래와 같이 출력이 표시됩니다. PPM의 현재 공기 품질 값을 보려면 페이지를 다시 새로 고쳐야합니다.
작동을 시연하기 위해 로컬 서버를 설정했습니다. 아래 비디오를 확인할 수 있습니다. 하지만 전 세계 어디에서나 공기질을 모니터링하려면 포트 80 (HTTP 또는 인터넷에 사용됨)을 장치의 로컬 또는 개인 IP 주소 (192.168 *)로 전달해야합니다. 포트 포워딩 후 모든 들어오는 연결은이 로컬 주소로 포워딩되며, 어디에서나 인터넷의 공용 IP 주소를 입력하기 만하면 위에 표시된 웹 페이지를 열 수 있습니다. 라우터 (192.168.1.1)에 로그인하여 포트를 전달할 수 있으며 포트 전달을 설정하는 옵션을 찾을 수 있습니다.