PMS7003 미세먼지 센서는 PLANTOWER사에서 제작판매하는 레이저 방식의 미세먼지 측정센서로서 PM2.5 (초미세먼지)를 안정적으로 측정할수 있고 크기도 작기때문에 시중에서 판매되는  미세먼지 측정기에 널리 사용되는 센서이다.  

 

 

PMS7003미세먼지센서 특징

 

-미세먼지 PM 10 (10㎍/m³ ) , 초미세먼지 PM 2.5 (2.5㎍/m³ ), 극초미세먼지 PM 1.0(1㎍/m³ )을 동시측정

-레이저 방식이고 내부에 공기순환 FAN이 있어 균일한 측정이 가능

-센서값을 디지털데이처로 변환해서 출력해 주기 때문에 노이즈 영향이 없으며 안정적인 값 측정 가능   

 

 

PMS7003미세먼지센서 사양

 

PLANTOWER사에서 공개하는 세부 사양은 다음과 같다.

 

센서의 외형크기와 핀배열은 다음과 같다.

 

단순하게 읽기용도로만 사용하려면 VCC,GND로 전원공급하고 9번핀의 Data를 Serial통신으로 읽으면 된다.

 

구매시 주의사항

 

센서의 연결핀은 다음 그림과 같이 5x2 구조인데 핀간격이 1.27mm로서 아두이노에서 일반적으로 사용하는 2.54mm 핀보다 간격이 매우 좁아 연결하기 불편하다.  

 

따라서 다음과 같은 아답터와 연결케이불을 함께 구매하는 것이 좋다.

 

 

아두이노와의 연결

 

 

단순하게 읽기 용도로만 사용하려면 VCC,GND로 전원공급하고 9번핀의 Data를 Serial통신으로 읽으면 되므로

아두이노 디지털 핀 (여기에서는 7번핀)에 연결하고 Software Serial방식으로 읽는다.

 

 

샘플프로그램

 

  1. #include <SoftwareSerial.h>  
  2. SoftwareSerial mySerial(7,6); // Arudino Uno port RX, TX  
  3.   
  4. #define START_1 0x42  
  5. #define START_2 0x4d  
  6. #define DATA_LENGTH_H        0  
  7. #define DATA_LENGTH_L        1  
  8. #define PM1_0_ATMOSPHERE_H   8  
  9. #define PM1_0_ATMOSPHERE_L   9  
  10. #define PM2_5_ATMOSPHERE_H   10  
  11. #define PM2_5_ATMOSPHERE_L   11  
  12. #define PM10_ATMOSPHERE_H    12  
  13. #define PM10_ATMOSPHERE_L    13  
  14. #define PM2_5_PARTICLE_H   16  
  15. #define PM2_5_PARTICLE_L   17  
  16. #define VERSION              26  
  17. #define ERROR_CODE           27  
  18. #define CHECKSUM             29  
  19. byte bytCount1 = 0;  
  20. byte bytCount2 = 0;  
  21. unsigned char chrRecv;  
  22. unsigned char chrData[30];  
  23. int PM01;  
  24. int PM25;  
  25. int PM10;  
  26.   
  27. unsigned int GetPM_Data(unsigned char chrSrc[], byte bytHigh, byte bytLow)  
  28. {  
  29.    return (chrSrc[bytHigh] << 8) + chrSrc[bytLow];  
  30. }  
  31.   
  32. void setup(){  
  33.   Serial.begin(115200);  
  34.   Serial.println("PMS7003 Ready ");  
  35.   mySerial.begin(9600);  
  36. }  
  37.   
  38. void loop(){  
  39.   if (mySerial.available())   {  
  40.        for(int i = 0; i < 32; i++)     {  
  41.            chrRecv = mySerial.read();  
  42.            if (chrRecv == START_2 ) {   
  43.               bytCount1 = 2;  
  44.               break;  
  45.             }  
  46.        }   
  47.       if (bytCount1 == 2)  
  48.       {  
  49.          bytCount1 = 0;  
  50.          for(int i = 0; i < 30; i++){  
  51.             chrData[i] = mySerial.read();  
  52.          }   
  53.   
  54.          if ( (unsigned int) chrData[ERROR_CODE] == 0 ) {  
  55.             PM01  = GetPM_Data(chrData, PM1_0_ATMOSPHERE_H, PM1_0_ATMOSPHERE_L);  
  56.             PM25  = GetPM_Data(chrData, PM2_5_ATMOSPHERE_H, PM2_5_ATMOSPHERE_L);  
  57.             PM10  = GetPM_Data(chrData, PM10_ATMOSPHERE_H, PM10_ATMOSPHERE_L);  
  58.             Serial.print("PM1.0=");  
  59.             Serial.print(PM01);  
  60.             Serial.print(",PM2.5=");  
  61.             Serial.print(PM25);  
  62.             Serial.print(",PM10=");  
  63.             Serial.println(PM10);  
  64.             }  
  65.          else{  
  66.             Serial.println("PMS7003  ERROR");  
  67.          }  
  68.       }   
  69.    }  
  70.    else{  
  71.       Serial.println("PMS7003 NOT available");  
  72.    }  
  73.  delay(1000);  
  74. }  

 

2 line : 아두이노 7번핀을 RX로 하여 SoftwareSerial 통신을 선언한다.

4~18 line : PMS7003센서에서 보내주는 데이터의 위치별 데이터 내용 구조이다.

50~52 line : 센서에서는 측정 결과값을 30byte로 위 데이터 구조로 전송한다. 

54 line : PM1.0 값을 읽으려면 PM1_0_ATMOSPHERE_H, PM1_0_ATMOSPHERE_L 부분을 읽으면 되고

55 line : PM2.5 값을 읽으려면 PM2_5_ATMOSPHERE_H, PM2_5_ATMOSPHERE_L 부분을 읽으면 된다.

 

구매좌표 

  -해외 :  https://s.click.aliexpress.com/e/_AW8dFn


  -국내 : https://coupa.ng/bQiTHN

+ Recent posts