아두이노 NodeMCU 보드에서 DHT11 온습도 센서와 미세먼지 센서 GP2Y1010AU를 설치하여 온도 습도 및 미세먼지 농도 세가지 데이터를 측정하도록 하자.
일차적으로 이 센서들을 성공적으로 설치하여 시리얼 창에서 모니터링이 가능해 지면 와이파이 버전으로 코딩하기로 한다.
DHT11 센서는 전원 전압 5V alc 3.3V에서 잘 작동하나 미세먼지 센서 GP2Y1010AU는 5∓0.5 V 전원 전압이 요구된다. 아두이노 우노 보드에서는 3.3V 와 5V 전원이 공급되므로 아무런 문제가 없으나 NodeMCU 보드는 3.3V 전압만 공급된다. 따라서 위 그림과 같은 NodeMCU 베이스 보드를 사용하여 배선을 하도록 하자. 그림에 의하면 VUSB 영역이 있는데 이는 USB에서 제공하는 전압으로 보인다. 실측 결과 4.95V 가 측정 되었다. 이 영역을 5V 전원으로 하여 배선을 연결하도록 하자. 그 옆으로도 다른 전압의 배선 영역이 있으나 절대로 그쪽과 연결해서는 안 됨에 유의하자.
센서를 설치하고 필요한 라이브러리를 설치하도록 한다.
무선 와이파이 코딩을 위한 ESP8266WiFi.h 와 온습도 측정을 위한 DHT11.h를 불러들인다.
미세먼지 센서 GP2Y1010AU 는 별다른 라이브러리가 필요치 않다.
전체적인 배선은 아래의 사진을 참조하도록 한다. 온습도계 배선 3줄과 미세먼지 센서 배선 5줄 도합 8줄 배선이며 일부는 빵 판에서 미리 연결 배선하였다.
무선공유기 또는 핫 스팟 사용자 ID 와 비밀번호 설정이 뒤따르며 이어서 데이터 핀 설정 작업이 필요하다.
ledPin = 2 번 즉 D4는 NodeMCU 보드의 빌트인 LED 이다.
DHT11 온습도 센서는 GPIO 14번 즉 D5로 설정한다.
미세먼지 센서의 아날로그 전압 출력은 아두이노 우노에서와 마찬가지로 A0 즉 0 번에 입력한다. NodeMCU 보드에서는 단 하나의 아날로그 입력 채널 A0가 있음에 유의하자.
아울러 미세먼지 센서 측정을 위해서는 아두이노 우노 또는 NodeMCU 보드로부터의 디지털 데이터 핀으로부터의 듀티 입력을 미세먼지 센서 3번 선에 공급할 필요가 있다. 아두이노 우노나 NoeMCU에 여러 개의 디지털 데이터 핀이 있을 수 있으나 PWM 핀이 아닌 순수 디지털 데이터 핀으로 설정하기로 한다. 아두이노 우노에서는 2번이 좋으며 NodeMCU 에서는 GPIO 16번 즉 D0 가 적합하다.
이어서 미세먼지 센서 GP2Y1010AU의 샘플링 타임과 델타 타임을 설
정한다. 이 값은 제조사에서 지정한 값이므로 반드시 변경하지 않도록 한다.
WiFi 서버 및 DHT11 클라스 명령을 설정한다. setup() 이전에 설정하면 이들이 전역적으로 적용된다. 즉 피료 시에 setup(), loop() 및 particleSensing() 전체에 걸쳐서 클라스 명령을 적용할 수 있게 된다. 만약 WiFiServer를 setup() 및 loop() 내부에 나누어서 설정하면 에러가 발생하기도 하니 유의하기 바란다.
setup()에서 기본 통신 속도는 115200 으로 설정한다. 시리얼 모니터에서 센싱 데이터들을 관찰할 때에 baud rate을 112000으로 설정해야 할 것이다.
빌트인 LED 는 웹서버 작동 여부를 출력하여 체크할 수 있도록 그대로 두기로 한다.
동시에 먼지센서 커넥터 3번 선에 센서 내부의 LED를 구동할 수 있
도록 D0 핀에 듀티 신호를 출력해 준다.
이어지는 WiFi 연결 절차는 여타의 웹서버 코딩과 동일하므로 설명을 생략한다.
코드 마지막 부분에 위치한 서브루틴 particleSensing()을 검토해 보자.
아두이노 우노에서 사용했던 루틴 그대로 사용이 가능하다.
시간 지연 팩터는 1초로 잡았다.
루틴이 호출되면 dustDensity 를 되돌려 준다.
loop() 문에서 필요 시 마다 호출하여 쓰면 된다.
미세먼지 루틴을 일회 사용하고 이어서 온습도 데이터를 읽어 온다. 미세먼지 루틴은 1초에 한 번꼴로, 온습도는 2초에 한번 꼴로 데이터 센싱이 가능하다.
센싱된 데이터는 시리얼 모니터 디버깅 용으로 출력한다.
여기까지는 그 내용이 아두이노 우노에서의 미세먼지 센서 측정 장치와 코딩 내용이 유사하며 단지 온습도 부분이 함꼐 추가 되었다.
참고로 이 세가지 측정 데이터를 무선 와이파이 코딩하기 위해서는 각각의 변동 특성을 이해해야 할 필요가 있다. 특히 미세먼지 농도는 온습도에 비해 변동성이 훨씬 크다는 점에 유의해야 한다.
따라서 시간 지연 팩터도 1초가 아니라 아두이노 우노에서 처럼 190msec로 환원하는 것이 좋겠다. 아울러 온습도 데이터는 초 단위로 수비게 변동되지 않는다. 그러므로 이 두 가지를 반드시 동시에 실시간으로 디스플레이 할 필요는 없을 듯하다.
온습도는 간간이 출력하고 미세먼지 농도만 빠른 속도로 그래픽을 해주는 것이 좋을 듯하다.
이 미세 먼지 출력에 관해서는 아래의 이전 블로그에 게재된 오실로스코프 편을 가져다 쓰기를 추천한다.
완성된 코드는 아두이노 무선와이파이 코딩에 이어 차기 출간 준비 중인 종이 첵 발간 시에 공개할 계획임을 참조하기 바란다.
HTML SVG 그래픽 언어 사용 NodeMCU WiFi Webserver 코딩에 의한 가변저항 전압
스마트폰 실시간 모니터링 프로그램 137
Webserver_nodemcu_html_svg_realtime_chart_02
http://blog.daum.net/ejleep1/332
다음의 그래픽 화면은 무선 와이파이에 의해서 작동되는 실시간 그래픽 결과이다. 녹색 부분은 50 μg/m3 이하로 비교적 안전한 영역이다. 그래프의 최대 값은 300 으로 제한하였으며 실제 코딩에서는 270 이상을 최대 270으로 제한하였다.
500회 루핑이 완료되면 Data Refresh 버튼이 나타나고 누르면 request가 아두이노 NodeMCU에 전달되어 다시 실시간 그래픽이 이루어진다. 이과정은 사물인터넷 코딩에서 항상 사용하는 앵커 태그에서 href 속성을 사용하였다.
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
아두이노 NodeMCU 의 그래픽 7 세그먼트에 의한 DHT11 온습도 디스플레이 (0) | 2017.05.20 |
---|---|
초보자를 위한 아두이노 NodeMCU 웹서버 그래픽 4 디지트 7 세그먼트 디스플레이 (0) | 2017.05.18 |
초보자를 위한 라즈베리 파이3 파이선 LED ON OFF 코딩 (0) | 2017.05.13 |
초보자를 위한 “아두이노 NodeMCU ESP8266WiFi 라이브러리 사용법 요약” (0) | 2017.05.09 |
Firmata 프로세싱 프로그램에 의한 아두이노 bar_Graph LED 제어 (0) | 2017.05.08 |