이동형 IOT 미세먼지 측정기 센서 변경과 IOT 서버 초기 세팅

by 임성국 | 2016-08-21 11:53
wearable 디자인씽킹포트폴리오 라즈베려파이 미세먼지 아두이노

1. DSM-501 관련자료 모음


미세먼지 측정을 위한 센서로 초기에 계획했던 것은 DSM-501 이었습니다. 하지만 DSM-501 을 사용해본 결과 원하는 감도의 측정값이 나오지 않았으며 데이터 시트를 면밀히 검토해 본 결과 본 프로젝트에 사용할 수 없다는 결론이 쉽게 나왔다.


우선 DSM-501 관련 자료와 아두이노 소스는 다음과 같다.




  • 기본 소스 (테스트 및 기본 분석용)


출처 : http://www.elecrow.com/wiki/index.php?title=Dust_Sensor-_DSM501A



// Connect the Pin_3 of DSM501A to Arduino 5V

// Connect the Pin_5 of DSM501A to Arduino GND

// Connect the Pin_2 of DSM501A to Arduino D8

// www.elecrow.com

#include<string.h>

byte buff[2];

int pin = 8;//DSM501A input D8

unsigned long duration;

unsigned long starttime;

unsigned long endtime;

unsigned long sampletime_ms = 3000;

unsigned long lowpulseoccupancy = 0;

float ratio = 0;

float concentration = 0;

 

int i=0;

void setup()

{

  Serial.begin(9600);

  pinMode(8,INPUT);

  starttime = millis(); 

}

void loop()

{

  duration = pulseIn(pin, LOW);

  lowpulseoccupancy += duration;

  endtime = millis();

  if ((endtime-starttime) > sampletime_ms)

  {

    ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0);  // Integer percentage 0=>100

    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve

    Serial.print("lowpulseoccupancy:");

    Serial.print(lowpulseoccupancy);

    Serial.print("    ratio:");

    Serial.print(ratio);

    Serial.print("    DSM501A:");

    Serial.println(concentration);

    lowpulseoccupancy = 0;

    starttime = millis();

  } 

}


2. 데이터 시트에 있는 내용




4-7 항목과 4-8 항목에 측정가능한 미세먼지의 크기와 측정가능한 범위가 기록되어 있다. 처음 센서를 선정할 때는 당연히 측정가능범위는 일상생활에 관련되어 유의미한 범위일 것이라고 판단했다. 그래서 1um 라는 측정가능 미세먼지 크기만 보고 이 센서를 선택했다. 하지만 그게 실수였다.


측정가능 범위는 1-1.4mg/m^3 으로 나와있고 아래쪽 그래프에서 보이듯이 0 에서 0.2 까지의 측정치는 이미 오차가 지나치게 커서 측정값을 유의미하게 받아들일 수가 없다.


이 부분은 환경속 미세먼지에 대한 정보를 참고하면 더 확실해진다.



3. 환경부 미세먼지 자료



링크 : 환경부 미세먼지 자료 http://www.me.go.kr/issue/finedust/ebook.pdf


위 링크를 통해가면 2016년 4월자 환경부에서 소개하는 미세먼지에 대한 내용이 있다. 먼지측정기 제작시 참고할 자료이다.


이 자료를 참고로 먼지의 종류를 보면 다음과 갈다.


총먼지 (Total Suspended Particles, TSP) : 입자의 크기 50um 이하

미세먼지 (Particulate Matter, PM) : 입자의 크기가 작은 미세먼지

   >>> PM10  : 입자의 크기 10um 이하

   >>> PM2.5 : 입자의 크기 2.5um 이하



미세먼지 측정방법은 다음과 같다.


미세먼지 측정은 크게 두가지 방법으로 진행된다. 방사선인 베타선을 미세먼지를 통과할 때 질량이 클수록 많이 흡수되는 성질을 이용한 베타선 흡수법과 미세먼지에 반사된 빛의 산란 정도를 측정하여 미세먼지의 농도를 구하는 간접측정 방법이 있고, 미세먼지의 질량을 저울로 직접 측정하는 방법인 중량농도법이 있다.



DSM501A 센서는 간접측정방식 중 빛의 산란정도를 측정하는 방식이다.



WHO (국제보건기구)의 미세먼지 안전 기준은 다음과 같다.


>> PM2.5 연평균 10ug/m^3, 24시간 평균 25ug/m^3

>> PM10  연평균 20ug/m^3, 24시간 평균 50ug/m^3


대한민국정부가 정한 미세먼지안전기준은 WHO 기준의 2배이다.


>> PM2.5 연평균 20ug/m^3, 24시간 평균 50ug/m^3

>> PM10  연평균 40ug/m^3, 24시간 평균 100ug/m^3


즉, 여기에서 제시되는 기준으로 보면 WHO 기준일때 세제곱미터의 공기중에 50ug 이상의 미세먼지가 있으면 위험한 것이고, 기준이 두배인 한국 기준으로도 100ug 즉, 0.1mg 이라면 충분히 위험한 상태이다. 그런데 DSM-501 센서는 Low Ratio 가 0.1 일때 최소 0 에서 최대 0.2mg(200ug) 사이의 값이 측정된다는 것이고, 이때의 오차는 중심으로부터 따질때 +-100ug 이 된다는 것이다. 이 정도면 우리가 원하는 생활속 안전을 위한 미세먼지측정 용도로 사용할 수 없다는 결론이다. 결국 이 센서는 많은 먼지가 발생하는 건설현장이나 페인트나 도료등을 생산하는 현장, 터널등 밀집된 상태에서 마스크를 쓰고 작업하는 현장등의 먼지의 정도를 측정하는 것이지 생활속 먼지양을 측정하는 용도는 아니다.


4. 새로운 센서 PMS7003


기존에 사용하려던 DSM501A 의 감도문제로 새로운 센서를 찾아보았으며 검색 중 PMS7003 이라는 제품을 발견하였다.

PMS7003 은 PlantTower 라는 중국계 회사의 먼지센서로 PMS1003, PMS3003, PMS5003, PMS6003 후에 PMS7003 을 발표했다. 크기는 최근 것일수로 작아졌으며 PMS7003 은 48*37*12(mm) 로 가장 작다.

사용에 큰 불편이 없을 것으로 예상되며 구입하여 테스트 해볼 예정이다.


크기도 Wearable 로 사용하기에 그리 크게 부담되지 않을 듯 하다.




사용방법이 기존 센서와 동일한지 여부를 파악해보고 몇번의 Trial & Error 를 거쳐 사용법을 파악하는 것이 우선할 일이다. 




5 센서 도착 커넥터 문제 발생


PMS7003 센서가 도착하였으며 사용을 위해 커넥터부분을 살피던 중 1.27mm 간격으로 Double Female Box Header 인 것을 발견하였다. 현재 국내 Box Header 는 대부분 2.54mm 간격을 사용하고 있으며, 2mm 까지는 구입이 가능하지만 1.27mm 간격의 제품은 없는 것으로 파악되었다. 해외에서 관련 부품을 구입할 예정이고, 우선은 납땜하여 사용하면서 테스트를 진행할 계획이다.



6. 라즈베리파이를 이용한 IOT 서버


2016년 08월 13일 토요일에 세번째 모임을 가졌다.



IOT 서버를 만들기 위해 라즈베리파이를 사용하였으며, 이날 라즈베리파이에 OS 와 서버프로그램을 설치하였다. 


참석자는 바람, 기획실장, 이람, 케이트, David, 이이오, 6명으로, 이날 라즈베리파이 기초 설정을 마쳤다.


아래에 그때 사용했던 라즈베리파이 설정방법을 다시 정리해둔다.


링크1 : 라즈베리파이 준비물(기획실장) 

링크2 : OS, 서버, DB, PHP 설치하기 (기획실장) 

링크3 : MySQL + PhpMyAdmin 설치 (이이오) 

링크4 : 라즈베리파이 IP 를 고정IP로 변경 (바람)


마지막으로 필요한 사람을 위해 위에 사용한 기본 명령들을 스크립트로 만들어서 올려두었습니다. 텍스트파일을 다운 받은 후 확장자를 sh 로 바꾸어서 실행시키면 위의 명령들을 순차적으로 실행됩니다. 이 부분에 대한 세부 설명을  8번내용으로 정리한다.


링크 1 : OS 업데이트

링크 2 : 서버, DB, PHP, MySQL 설치



7. 쉘스크립트 사용으로 서버 관련 모든 프로그램 일괄 설치


7번의 내용을 따라하면 서버와 MySQL, PHP 등을 설치할 수 있다. 이미 설치한 것을 다시 반복해서 여러번 설치한다면 그때는 쉘스크립트를 짜서 한번에 이어서 실행시킬수 있다. 그 내용을 여기에 쓴다.


쉘스크립트는 라즈베리파이(리눅스)에서 일련의 명령을 순차적으로 실행시키기 위한 방법입니다. 예전에 DOS 를 사용했던 사람은 배치파일(.bat)을 작성해본 경험이 있겠지만 그만큼 나이가 들지 않은 사람들은 당연히 윈도우에서 마우스를 사용하는 것이 익숙할 것입니다. 쉘스크립트는 DOS 의 배치파일과 유사합니다.


우선 라즈베리파이에서 OS인 라즈비안을 설치하고 인터넷이 사용가능한 환경으로 만들어 둡니다. 그 다음 인터넷에서 다음 파일을 다운받습니다.


http://cfs.tistory.com/custom/blog/10/102455/skin/images/step01.txt


라즈베리에서 다음과 같이 명령하면 됩니다.


wget http://cfs.tistory.com/custom/blog/10/102455/skin/images/step01.txt


현재 커서가 위치한 곳에 step01.txt 라는 파일이 다운받아집니다.


파일 내용은 다음과 같습니다. 


#!/bin/bash


echo -e "\n\n\nRaspberry APM Setup Script Start!"


echo -e "\nStep 1. RASPBERRY UPDATE"


sudo apt-get update

sudo apt-get upgrade


sudo apt-get install ca-certificates

sudo apt-get install git-core

sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update  -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update

sudo rpi-update



echo -e "\n\n=============================================="

echo -e "  Next time, run the step02.sh : ./step02.sh"

echo -e "  Push the Enter Key"

echo -e "=============================================="


read input


sudo shutdown -r now




파일 확장자를 .sh 로 변경한 다음 실행시킵니다. 그러면 한줄 한줄 순차적으로 실행됩니다.

기본적으로 STEP 1 은 라즈베리파이를 업데이트합니다. 명령은 다음과 같습니다.


sudo mv step01.txt step01.sh

sudo chmod +x step01.sh

./step01.sh


mv 명령은 파일을 이동시키거나 이름을 바꿉니다. chmod 는 파일의 속성을 변경시킵니다. +x 옵션으로 파일이 실행가능하도록 변경합니다. ./step01.sh 는 파일을 실행시킵니다.


파일 내부에 있는 한줄 한줄의 명령을 수행합니다. 끝부분에 있는 read input 명령은 키보드 입력을 기다리는 것입니다. 엔터를 치면 그 다음 명령줄로 넘어갑니다. 마지막줄은 sudo shutdown -r now 명령을 수행하고 자동 재부팅합니다.


이제 두번째 파일을 다운받습니다.


wget http://cfs.tistory.com/custom/blog/10/102455/skin/images/step02.txt


파일내용은 다음과 같습니다.

#!/bin/bash

echo -e "\n\nStep 2. Install Web Server\n\n"

sudo apt-get install apache2 php5 libapache2-mod-php5
sudo service apache2 restart

echo -e "\n\nStep 3. Install MySQL\n\n"

sudo apt-get install mysql-server mysql-client php5-mysql

echo -e "\n\nStep 4. Install FTP\n\n"

sudo chown -R pi /var/www
sudo apt-get install vsftpd
echo -e "\n\n=============================================="
echo -e "    anonymous_enable=YES to anonymous_enable=NO"
echo -e "    Uncomment local_enable=YES and write_enable=YES by deleting the # symbol in front of each line"
echo -e "then go to the bottom of the file and add force_dot_files=YES.\n\n"
echo -e "=============================================="
read input
sudo nano /etc/vsftpd.conf
sudo service vsftpd restart
ln -s /var/www/ ~/www

echo -e "\n\nStep 5. phpMyAdmin\n\n"

sudo apt-get install python-mysqldb
sudo apt-get install phpmyadmin
echo -e "\n\n=============================================="
echo -e "    go to the bottom of the file and add"
echo -e "    'Include /etc/phpmyadmin/apache.conf'"
echo -e "=============================================="
echo -e "    Push the Enter Key"
echo -e "=============================================="
read input

sudo nano /etc/apache2/apache2.conf
# 하단에 다음 내용을 추가 : Include /etc/phpmyadmin/apache.conf
sudo /etc/init.d/apache2 restart


step01.txt 를 step01.sh 로 바꾼것과 같은 방법으로 파일 이름을 바꾸고 실행시킵니다.

sudo mv step02.txt step02.sh

sudo chmod +x step02.sh

./step02.sh


중간에 몇번 에디터가 파일을 열어서 편집하게 됩니다. 그때마다 기존의 방식대로 변경하시면 됩니다. 편의상 주석처리와 echo 명령으로 화면에 무엇을 해야할지를 보이게 해 두었습니다.

댓글 0

이동형 IOT 미세먼지측정기

이동형 IOT 미세먼지 측정기 센서 변경과 IOT 서버 초기 세팅

by 임성국

MADE BY

임성국

c언어, iot, pcb제작, 라즈베리파이, 스크래치, 아두이노, 인벤터, 회로설계
PMS7003 첫 사용과 ThingSpeak 사용법 기초 다음글 이동형 IOT 미세먼지 측정기 센서 변경과 IOT 서버 초기 세팅현재글 첫번째 모임으로 시작하며 이전글