알리익스프레스에서 주문한 PM2.5, 10 미세 먼지 센서(부품) 잉여개발

집이나 사무실 내에서 간이 미세먼지 측정기를 만들어 쓰려고 주문했습니다. 35달러입니다... 

동봉된 USB TO SERIAL을 꼽은 후, 시리얼데이터 보는 프로그램으로 9600BPS로 접속하면 데이터가 1초에 1회씩 나오는 간단한 제품입니다. 

현재 사무실의 PM2.5와 10은 각각 30~50ug/m^3(마이크로 그램/입방미터) 가량 나오는군요. 

2.7인치 전자잉크 디스플레이를 탑재한 라즈베리파이에 연결해서, 기상청에서 받은 외부 미세먼지 자료와 실내 상황을 동시에 모니터링해보아야겠습니다. 

얼마나 정확한지 하는 정보는 안봤고, 앞으로 다른 센서와 비교도 해보고 결과를 업데이트하겠습니다. 

2016.05.21.토
  • 윈도우10도 USB-to-Serial을 자동 인식했는데, 라즈베리파이에서도 별도 설치 없이 /ttyUSB0로 인식이 되었습니다. 
  • 참고로 중국 제품이며 홈페이지는 wch.cn 입니다.   
  • Python으로 serial 포트 제어하는 소스로 읽기는 되었고, 다음에 데이터 디코딩을 해야겠습니다.(0xAA 0xC0로 시작해서 0xAB)로 끝나는 패킷을 디코딩하면 됩니다.  
2016.05.22.일
  • 지난번에 만들어 놓았던 전자잉크 라즈베리파이에 간단히 붙였습니다.
  • pm10:34/0.2ug은 기상청 API로 읽은 동작구 PM10값이 34, 실내에서 읽은 미세먼지 PM10값이 0.2 마이크로그램/입방미터라는 뜻입니다.  
  • 전자잉크 디스플레이용 Python API가 그래픽 UI를 만들 정도는 아니어서 더 손을 봐야합니다^^  

2016.05.29.일
  • 미세먼지 센서는 처음이라서 아직 모르는게 있습니다. 보통 켜고 1분 가량 안정된 후 읽으면 된다고 하는데, 문제는 2~3분 후에는 그 값이 많이 떨어져서 거의 없는 거로 나옵니다.(예: 90ug -> 4ug, 마이크로그램/입방미터) -> 6월 첫주에 판매자와 상담하고 새 제품을 받았는데 그건 괜찮았습니다. 
  • 그렇다면 레이저 수명 연장도 할 겸 껐다 켰다하면 되는데, 프로토콜 설명서에는 전원절약용 명령어 넣는 내용이 명시가 안되어 있는 관계로 하드웨어적으로 센서의 전원을 켰다 켰다 해야할 듯합니다. 
  • 라즈베리파이의 I/O포트를 e-ink HAT이 모두 사용 중이라서, 따로 아두이노 보드에 연결해서 ES8266 WiFi를 통해서 라즈베리파이에 넣어주기로 했습니다. - 보드 주문했고, 온습도 센서에 9V 건전지까지 연결해서 외부 기상관측용 백엽상(?)처럼 꾸민 후 창 밖 베란다에 놓아보려고 합니다^^ 
2016.06.01.수
  • 아두이노 UNO R3 호환보드에 전원 제어를 위한 릴레이를 부착했습니다. 
  • 아두이노는 TTL Rx, Tx의 전압이 5V라서 먼지센서의 Rx, Tx 3.3V와 연결을 위해 레벨컨버터를 달았습니다(사진 하단).
  • 이제 먼지센서가 9분간 꺼져 있다가 1분간 켜집니다. 먼지센서의 PM10값은 대략 맞는 것 같습니다. 37가량 나오네요. 아까 확인한기상청 자료도 대략 이 정도 값입니다. 
  • 남은 일은 온습도센서를 붙이는 것과 ESP8266을 더 연결하여 WiFi를 통해 라즈베리파이로 먼지센서 정보와 온습도 정보를 전송하는 것, 라즈베리파이에서 기상청 정보와 이 정보드를 잘(?) 표시하는 것입니다. 
  • 아두이노는 처음 써보는데 C언어를 알고 있다면 금방 익숙해지는 듯합니다. 약간의 검색만 해도 되니 책을 볼 필요까지는 없어 보입니다.


2016.06.12.일
  • ESP8266을 아두이노의 시리얼포트를 통해서 제어하여, Thingspeak.com에 데이터를 기록한 후 그것을 라즈베리파이에서 읽어오는 방법을 쓰려고 합니다. 참조할 사이트는  http://www.instructables.com/id/ESP8266-Wifi-Temperature-Logger/
  • 아두이노는 나노 등 작은 것을 구하고 릴레이도 1채널로 한 후, 9V전원을 연결하고 일일이 납땜하여 작게 구성할 예정입니다. 레벨컨버터 때문에 복잡한 것은 저항 등을 써서 정리해야겠습니다. 
2018.02.04.일
  • 지인에게 선물받은 구글에서 나온 보이스킷(AIY Voice Kit)를 써서 미세먼지 값을 말로 알려주게 만들어 보았습니다. 
  • AIY Voice Kit는 라즈베리파이3에 스피커 및 버튼, 마이크를 연결하는 구조입니다. 
  • 우선 파이썬으로 Voice HAT보드에 달린 GPIO 26번을 통해 1채널짜리 릴레이를 (3.3V to 5V레벨컨버터를 통해) 제어하여 미세먼지 센서에 전원을 공급하고, 3.3V TTL로 연결된 시리얼포트(/dev/serial0)를 통해서 값을 읽습니다. 
  • Voice Kit에서 기본 제공하는 assistant_library_with_local_commands_demo.py 프로그램에 미세먼지 센서 제어코드를 넣어준 후, Ok Google, Air Quality라고 말해주면, 초미세먼지센서 값을 읽어줍니다. 
  • 사진 속의 AirHug는 중국 티몰에서 구입한 초미세먼지센서로 값을 비교하기 위해 켜둔 것입니다. 두 값이 1~2가량 차이가 나지만 대략 비슷하게 나옵니다. 





 

핑백

덧글

  • 센서123 2016/05/31 12:36 # 삭제 답글

    잘보았습니다. 저도 하나만들어보고싶은데 실제농도랑 거의비슷한가요?
  • 무재칠시 2016/05/31 19:08 #

    아직 다른 미세먼지 측정 장치나 센서(빌려야 되는데 아직요...)와 비교해보지를 못했습니다. 저는 대략 맞는 거 같다고 생각 중인데 그래도 검증은 하지 못했다고 해야겠습니다.~
  • 뭐든 해보자 2016/06/29 13:09 # 삭제 답글

    정말 대단하시네요
    나도 한번 만들어 보고 싶어요

    기상청의 데이터는 어떻게 받아 표현하나요 정말 궁급합니다
    상세하게 가르쳐 주시면 고맙겠읍니다
    저의 메일 yyou69@hanmail.net 입니다 연락바랍니다



  • 무재칠시 2016/07/02 18:11 #

    우선 기상청 자료를 Java언어로 가져오는 것은 http://werty.co.kr/blog/3011 좌측 링크에 계신 분께서 비교적 상세하게 설명해 주셨네요.

    요점은 대략 이렇습니다.

    1단계: 공공데이터포털에서 신동네예보정보조회서비스 API키 발급요청 및 매뉴얼 탐독
    2단계: 조회할 동네를 파악하기 위해 GPS좌표를 챙긴 후 http://doriri.tistory.com/category/Python에서 방법 파악
    3단계: 기상청 발표 시간에 맞게 조회용 url을 만들어서 요청한 후 xml 혹은 json자료를 분석하여 표시
  • 2016/11/03 16:18 # 삭제 답글 비공개

    비공개 덧글입니다.
  • 무재칠시 2016/11/05 13:26 #

    올리신 내용만 갖고 판단하기 어렵기도 하고 어디까지 알고 계신지 모르니, 그냥 이것 저것 적어보겠습니다.

    1) 9600bps로 전달되는 자료가 ASCII 문자가 아닌 binary 자료이고, 0xAA, 0xC0, ....., 0xAB로 종료됩니다. 올려주신 데이터 캡처를 보면 이상한 문자가 출력된 거로 보아, 16진수로 출력한 거 같지 않아서요...

    2) 미세먼지 센서의 데이터는 3.3V TTL로 나오고 있는데, 혹시나 동봉된 USB-to-Serial케이블을 쓰지 않고 라즈베리파이에 직접 연결한다면 이 부분을 고려해야할 거 같구요. 아마 5V로 올려주는 레벨 컨버터가 필요할 거 같네요.
  • 2016/11/08 13:58 # 삭제 답글 비공개

    비공개 덧글입니다.
  • 무재칠시 2016/11/10 16:12 #

    시리얼포트를 보는 프로그램을 기성 프로그램을 쓰셨다면 어떤 프로그램인지, 아니면 개발하신 프로그램의 소스코드의 주요 부분(읽어서 화면에 print하는 부분)을 붙여 주시면 어떨까 싶습니다.
  • 무재칠시 2018/03/03 10:40 # 답글

    위의 제가 했던 답변이 틀린 부분이 있어서 덧붙입니다.

    - 라즈베리파이에서는 3.3V TTL이므로 바로 직접 연결하면 됩니다. Rx - Tx, Tx - Rx로... 양쪽이 자기 입장에서 보내고 받는 것이니까요...
    - 라즈베리파이보드에 있는 Rx핀과 Tx핀에 곧바로 연결할 때에는 sudo raspi-config를 통하여, 시리얼을 터미널로 쓰는 것을 끄고 /dev/ttyserial0 (?)로 사용하면 sudo 명령을 쓰지 않고도 액세스가 가능합니다.
댓글 입력 영역