본문 바로가기
큐브셋 초소형 인공위성

CubeSat HM3301-Grove - Laser PM2.5 Sensor

by 로니킴 2021. 9. 2.


본 절은 [HM3301] 아두이노 센서를 사용하기 위해 알아야 할 내용과 실습 방법에 대해 설명한다. 아두이노 센서의 특징, 동작원리, 사양, 연결 핀 배열, 출력 값, 주의사항을 알아본다. 아두이노와 센서를 연결하고, 간단한 코딩으로 센서를 쉽게 실습할 수 있다. 

 

목차

     

     

     


    Grove - Laser PM2.5 Sensor (HM3301)

     

    https://first.global/cubesat/

     

     

     

     

     


    HM3301 센서란?

    HM3301 센서는 공기중의 미세먼지를 연속적으로 실시간으로 검출하는데 사용이 가능한 레이저 산란식 센서이다. 

    센서는 공기 중의 먼지를 실시간으로 감지한다. 이 모델은 팬을 사용하여 공기 샘플이 테스트되는 챔버로 공기를 불어넣는다. 간단한 I2C 인터페이스를 사용하여 통신한다.

     

     

    Grove_Laser_PM2.5_Sensor_HM3301_Web.pdf
    0.56MB

     

     

     

     


     

    seeed 그로브 홈페이지

    HM3301 센서의 특징은 다음과 같다. 

     

    [홈페이지]

     

    https://wiki.seeedstudio.com/Grove-Laser_PM2.5_Sensor-HM3301/


     

    HM3301 아두이노 센서 특징

    HM3301 센서의 특징은 다음과 같다. 

    • 0.3μm 이상의 먼지 입자에 대한 고감도
    • 대기 중 먼지 농도의 실시간 및 연속 감지
    • 레이저 광 산란 기술을 기반으로 판독값이 정확하고 안정적이며 일관성 제공.
    • 작은 소음
    • 초저전력 소비

     

    https://wiki.seeedstudio.com/Grove-Laser_PM2.5_Sensor-HM3301/

     

     


    HM3301 센서 동작 원리

    HM3301 센서의 원리는 다음과 같다. HM-3301은 펌핑 먼지 감지 센서와 달리 팬 블레이드를 사용하여 공기를 구동하고 감지 챔버를 흐르는 공기를 테스트 샘플로 사용하여 다양한 입자 크기의 먼지에 대한 실시간 연속 테스트를 수행한다.

     

    HM-3301 먼지 센서는 고급 Mie 산란 이론을 기반으로 한다. 빛이 빛의 파장보다 크거나 같은 양의 입자를 통과하면 빛이 산란된다. 산란된 빛은 고감도 포토다이오드에 집중되고 증폭되고 회로에 의해 분석된다. 특정 수학적 모델 및 알고리즘을 사용하여 먼지 입자의 개수 농도 및 질량 농도를 얻는다.

    HM-3301 먼지 센서는 팬, 적외선 레이저 소스, 집광 거울, 감광관, 신호 증폭 회로 및 신호 분류 회로와 같은 주요 구성 요소로 구성된다.

     

    이 모듈은 먼지 감지기, 지능형 공기 청정기, 지능형 에어컨, 지능형 환기 팬, 공기 품질 테스트, 헤이즈 미터, 환경 모니터링 및 관련 제품 및 애플리케이션에 적합하다. 

     

     

    https://wiki.seeedstudio.com/Grove-Laser_PM2.5_Sensor-HM3301/

     

     

     


    HM3301 센서 구입하기

    [HM3301 센서]는 , 네이버 등에서 센서를 구입할 수 있다

     

     

     

     

     


     

    HM3301 센서 하드웨어 연결

    다음과 같이 HM3301 아두이노 센서를 연결할 수 있다. 

     

     

    센서는 4개의 선으로 연결할 수 있다. I2C 방식으로 연결을 할 수 있다.  다음 표는 MKR1000과 레이저 PM2.5 입자 센서 사이에 연결할 핀을 보여줍니다.

     

     


     

    HM3301 센서 소프트웨어 코딩

    하드웨어 연결이 완료되면, 아두이노 IDE를 이용해 아두이노 센서 소스코드를 코딩할 수 있다. 

     

    [라이브러리]

     

    Seeed_PM2_5_sensor_HM3301-master.zip
    0.01MB

     

     

    라이브러리를 설치하고 예제 파일을 실행한다. 

     

     

    센서 예제 코드는 다음과 같다. 

    /*
        basic_demo.ino
        Example for Seeed PM2.5 Sensor(HM300)
    
        Copyright (c) 2018 Seeed Technology Co., Ltd.
        Website    : www.seeed.cc
        Author     : downey
        Create Time: August 2018
        Change Log :
    
        The MIT License (MIT)
    
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
    
        The above copyright notice and this permission notice shall be included in
        all copies or substantial portions of the Software.
    
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
        THE SOFTWARE.
    */
    
    #include <Seeed_HM330X.h>
    
    #ifdef  ARDUINO_SAMD_VARIANT_COMPLIANCE
        #define SERIAL_OUTPUT SerialUSB
    #else
        #define SERIAL_OUTPUT Serial
    #endif
    
    HM330X sensor;
    uint8_t buf[30];
    
    
    const char* str[] = {"sensor num: ", "PM1.0 concentration(CF=1,Standard particulate matter,unit:ug/m3): ",
                         "PM2.5 concentration(CF=1,Standard particulate matter,unit:ug/m3): ",
                         "PM10 concentration(CF=1,Standard particulate matter,unit:ug/m3): ",
                         "PM1.0 concentration(Atmospheric environment,unit:ug/m3): ",
                         "PM2.5 concentration(Atmospheric environment,unit:ug/m3): ",
                         "PM10 concentration(Atmospheric environment,unit:ug/m3): ",
                        };
    
    HM330XErrorCode print_result(const char* str, uint16_t value) {
        if (NULL == str) {
            return ERROR_PARAM;
        }
        SERIAL_OUTPUT.print(str);
        SERIAL_OUTPUT.println(value);
        return NO_ERROR;
    }
    
    /*parse buf with 29 uint8_t-data*/
    HM330XErrorCode parse_result(uint8_t* data) {
        uint16_t value = 0;
        if (NULL == data) {
            return ERROR_PARAM;
        }
        for (int i = 1; i < 8; i++) {
            value = (uint16_t) data[i * 2] << 8 | data[i * 2 + 1];
            print_result(str[i - 1], value);
    
        }
    
        return NO_ERROR;
    }
    
    HM330XErrorCode parse_result_value(uint8_t* data) {
        if (NULL == data) {
            return ERROR_PARAM;
        }
        for (int i = 0; i < 28; i++) {
            SERIAL_OUTPUT.print(data[i], HEX);
            SERIAL_OUTPUT.print("  ");
            if ((0 == (i) % 5) || (0 == i)) {
                SERIAL_OUTPUT.println("");
            }
        }
        uint8_t sum = 0;
        for (int i = 0; i < 28; i++) {
            sum += data[i];
        }
        if (sum != data[28]) {
            SERIAL_OUTPUT.println("wrong checkSum!!!!");
        }
        SERIAL_OUTPUT.println("");
        return NO_ERROR;
    }
    
    
    /*30s*/
    void setup() {
        SERIAL_OUTPUT.begin(115200);
        delay(100);
        SERIAL_OUTPUT.println("Serial start");
        if (sensor.init()) {
            SERIAL_OUTPUT.println("HM330X init failed!!!");
            while (1);
        }
    
    }
    
    
    void loop() {
        if (sensor.read_sensor_value(buf, 29)) {
            SERIAL_OUTPUT.println("HM330X read result failed!!!");
        }
        parse_result_value(buf);
        parse_result(buf);
        SERIAL_OUTPUT.println("");
        delay(5000);
    }

     

     

     


     

    HM3301 센서 동작확인

    하드웨어 연결, 소프트웨어 코딩이 완료되면 다음과 같이 동작 화면을 확인할 수 있다. 

     

    ------------------------------------------------------ 
    개발환경 : WINDOWS 10 
    아두이노 IDE : 1.8.13 
    ------------------------------------------------------ 
    01 연결
     - 아두이노와 PC 연결 
     - 아두이노 IDE 실행 
     - 메뉴 → 툴 → 보드:아두이노 UNO 확인 
      - 메뉴 → 스케치 → 확인/컴파일 



    02 컴파일 확인 

    스케치>확인/컴파일(CTRL+R) 를 선택해서 컴파일을 진행한다.

     

     

     


    03 아두이노  업로드 

    컴파일이 이상없이 완료되면 스케치>업로드(CTRL+U) 를 선택해서 컴파일 파일을 업로드 한다. 

     

     

     

    04 동작 확인

    다음과 같이 동작을 확인할 수 있다. 

     

     

     

     

     


     

    마무리

    아두이노와 HM3301 센서를 연결하고, 간단한 코딩으로 센서를 쉽게 실습할 수 있다. 

     

     

     

     

     


     

    모두의 아두이노 환경 센서 책

    [모두의 아두이노 환경 센서] 책은 예스24, 인터넷 교보문고, 알라딘, 인터파크도서, 영풍문고, 반디앤루니스 , 도서11번가 등에서 구입할 수 있다. 이 책에서는 PMS7003, GP2Y1010AU0F, PPD42NS, SDS011 미세먼지 센서, DHT22 온습도 센서, MH-Z19B 이산화탄소 센서, ZE08-CH2O 포름알데히드 센서, CCS811 총휘발성유기화합물 TVOC, GDK101 방사선(감마선) 센서, MQ-131 오존(O3) 센서, MQ-7 일산화탄소, MICS-4514 이산화질소 센서, MICS-6814 암모니아 센서, DGS-SO2 아황산가스(SO2) 센서, BME280 기압 센서, GUVA-S12SD 자외선(UV) 센서, MD0550 기류 센서, QS-FS01 풍속 센서(Wind speed) 를 사용한다.  

     

    모두의 아두이노 환경 센서

    아두이노와 센서로 내 건강을 지킬 수 있다!다양한 환경 센서를 실생활 프로젝트에 응용해보자!시중에 판매되고 있는 간이측정기도 센서로 값을 측정합니다. 똑같은 센서를 아두이노에 연결하

    book.naver.com

     

     

     

     



    댓글