공기품질 모니터링 사물인터넷 프로젝트 / 아두이노 / 먼지센서 / 스근하이
페이지 정보
작성자 용가리치킨 작성일17-03-28 17:37 조회4,383회 댓글0건관련링크
본문
안녕하세요 메카솔루션입니다.
이번에는 먼지센서와 아두이노를 이용해서 인터넷을 통해 먼지 센서의 값을 모니터링 하는 프로젝트를 만들어 보고자 합니다.
봄이 되니까 벗꽃도 이쁘고 개나리도 이쁜데.... 하늘만이 어째 누렇습니다.
이놈이 봄이라도 타나보네;;
아무튼 이 누런 하늘은 역시 황사가 원인이라 생각 됩니다. 혹시라도 먼지때문에 건강이라도 나빠지면 큰일입니다. 조심하는 것도 좋지만 내가 일하는 업무환경도 한번 신경을 써 봐야 겠습니다.
그래서 이번에 만들어볼 프로젝트는 공기 품질 모니터 입니다.
위는 이번 프로젝트에 사용할 부품 목록입니다.
그렇다면 바로 만들어 봅시다.
회로도 알아보기
회로도는 다음과 같습니다.
저의 경우 납땜을 해서 사용했지만 납땜을 하지 않고 흰색 소켓 부분에서 점퍼선을 끌어다 사용 할 수 있습니다.
스근하이 가입하고, 장치및 센서 등록하기
우선 센서 데이터를 모니터링 하는것은 스근하이 서비스를 이용하고자 합니다. 우선 이용을 위해 간단한 회원가입과 장치 등록이 필요한데 다음을 참고해 줍니다.
위링크가 스근하이 홈페이지 입니다. 우선 회원 가입을 합니다.
http://blog.sgnhi.org/220713418216
소스코드 알아보기
소스코드를 작성하기 앞서 라이브러리를 다운로드 해야 합니다.
https://github.com/keepworking/ezTask
https://github.com/SGNHI/SGN_Arduino_Ethernet
#define COV_RATIO 0.2 //ug/mmm / mv #define NO_DUST_VOLTAGE 400 //mv #define SYS_VOLTAGE 5000 /* I/O define */ const int iled = A1; //drive the led of sensor const int vout = A0; //analog input /* variable */ float density, voltage; int adcvalue; /* private function */ int Filter(int m) { static int flag_first = 0, _buff[10], sum; const int _buff_max = 10; int i;
if(flag_first == 0) { flag_first = 1; for(i = 0, sum = 0; i < _buff_max; i++) { _buff[i] = m; sum += _buff[i]; } return m; } else { sum -= _buff[0]; for(i = 0; i < (_buff_max - 1); i++) { _buff[i] = _buff[i + 1]; } _buff[9] = m; sum += _buff[9];
i = sum / 10.0; return i; } } void setup(void) { pinMode(iled, OUTPUT); digitalWrite(iled, LOW); //iled default closed
Serial.begin(9600); //send and receive at 9600 baud //Serial.print("*********************************** WaveShare ***********************************\n"); } void loop(void) { /* get adcvalue */ digitalWrite(iled, HIGH); delayMicroseconds(280); adcvalue = analogRead(vout); digitalWrite(iled, LOW);
adcvalue = Filter(adcvalue);
/* covert voltage (mv) */ voltage = (SYS_VOLTAGE / 1024.0) * adcvalue * 11;
/* voltage to density */ if(voltage >= NO_DUST_VOLTAGE) { voltage -= NO_DUST_VOLTAGE;
density = voltage * COV_RATIO; } else density = 0;
/* display the result */ //Serial.print("The current dust concentration is: "); Serial.print(density); //Serial.print(" ug/m3\n"); Serial.println(); delay(1000); } |
스근하이 센서 모니터링 코드
#include <SGN_Arduino_Ethernet.h>//스근하이 이더넷 라이브러리 입니다. #include <ezTask.h> #define COV_RATIO 0.2 //ug/mmm / mv #define NO_DUST_VOLTAGE 400 //mv #define SYS_VOLTAGE 5000 char ID[] = "사용자ID";//사용자의 ID를 입력합니다. char DEVICE_CODE[] = "장치코드";//장치 코드를 입력해주도록 합니다. IPAddress IP(192, 168, 0, 177);//IP주소를 입력해줍니다. dotori Dsensor("센서코드");//사용할 센서를 선언해줍니다. /* I/O define */ const int iled = A1; //drive the led of sensor const int vout = A0; //analog input /* variable */ float density, voltage; int adcvalue; int Filter(int m) { static int flag_first = 0, _buff[10], sum; const int _buff_max = 10; int i; if (flag_first == 0) { flag_first = 1; for (i = 0, sum = 0; i < _buff_max; i++) { _buff[i] = m; sum += _buff[i]; } return m; } else { sum -= _buff[0]; for (i = 0; i < (_buff_max - 1); i++) { _buff[i] = _buff[i + 1]; } _buff[9] = m; sum += _buff[9]; i = sum / 10.0; return i; } } ezTask Dust(1000, []() { digitalWrite(iled, HIGH); delayMicroseconds(280); adcvalue = analogRead(vout); digitalWrite(iled, LOW); adcvalue = Filter(adcvalue); /* covert voltage (mv) */ voltage = (SYS_VOLTAGE / 1024.0) * adcvalue * 11; /* voltage to density */ if (voltage >= NO_DUST_VOLTAGE) { voltage -= NO_DUST_VOLTAGE; density = voltage * COV_RATIO; } else density = 0; Serial.println(density); }); void setup() { Serial.begin(9600); //dev.setmac(0xC0, 0x00, 0x01, 0x0F, 0xF1, 0xCE);//맥어드레스 변경은 충돌이 없을시 생략 가능합니다. dev.init(ID, DEVICE_CODE, IP); //장치의 사용을 시작합니다. dev.setRest((unsigned long)1000 * 60 * 10); pinMode(iled, OUTPUT); digitalWrite(iled, LOW); } void loop() { Dust.run();//먼지센서의 값을 갱신 합니다. Dsensor.set(density);//읽어들인 먼지센서의 값을 저장합니다. dev.send(Dsensor); } |
동작 모습 확인해 보기
아직 데이터가 얼마 안쌓여 있는데 얼추 맞는 것같습니다. 값이 조금 틀린것 같은 부분은 자체에 있는 가변저항을 조절하여 값을 조정 할 수 있습니다.
스마트폰 환경에서도 접속하면 확인이 가능합니다.
누적된 데이터를 따로 다루어 보고 싶다면 다운로드 기능을 사용할 수 있습니다.
감사합니다.
출처 메카솔루션
댓글목록
등록된 댓글이 없습니다.