아두이노 먼지센서 PM2005, PM2007, PM2008M 예제코드
정확히 미세먼지 센서 PM2008M 의 UART 인터페이스 소스코드를 찾고 있는데 안보인다. 그래서 찾은 코드가 아래 "[아두이노]먼지센서 PM2005, PM2007 아두이노 예제코드"이다.
공기청정기 메이커 프로젝트를 위해 PM2008M 을 사용하기로 했는데, i2c 방식은 라이브러리도 있고 여러 곳에 잘 나와 있는데 씨리얼 통신을 이용한 예제는 없는데 이 코드를 참고하려고 한다.
도면과 코드의 출처 : http://diwell.com/article/%EC%9E%90%EB%A3%8C%EC%8B%A4/7/27/#none
아래 코드는 아두이노 우노에서 소프트웨어 씨리얼을 이용한 코드이다. 데이터 잘 나오는 것으로 확인된다.
코드의 17라인에 보면 PM10 삭제 했다고 나오는데 주석을 풀어 PM10을 다시 복원한 코드를 아래에 추가한다.
PM2008M 센서는 극초미세먼지라는 PM1.0 의 값까지 출력하니 아래 예제코드는 PM2008M 코드는 아니다. 다음 포스팅엔 아두이노메가에서 PM2008M 으로 시험한 코드를 올리기로 한다.
레이저 미세먼지 센서 PM2008M 을 아두이노메가 측정 코드와 결과 참고
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
/*****************************************************************************
*
* Copyright (C) 2016 Diwell Electronics Co.,Ltd.
* Project Name : PM2005, PM2007 UART Code <softwareserial 이용>
* Version : 1.1 (2017.10.17)
* SYSTEM CLOCK : 16Mhz
* BOARD : Arduino UNO. 5V operation
PORT Description
1. RX : 13
2. TX : 11
먼지센서 전원은 5V로 하셔야 하며 포트 연결 방법은 회로도를 참고하십시오.
먼지센서 통신포트의 논리 레벨은 3.3V 이기 때문에 반드시 회로도를 참고하시기 바랍니다.
Revision history.
1. 2016.5.4 : First version is released.
2. 2017.10.17 : PM10 삭제
****************************************************************************/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(13, 11); // RX 13, TX 11
unsigned char Send_data[5] = {0x11,0x02,0x0b,0x01, 0xE1}; // 농도읽는명령
unsigned char Receive_Buff[20]; // data buffer
unsigned long PM25;//, PM10; // 농도저장변수 : 각 32bit(8bit*4 = 32)
unsigned long COM_SUCCESS, COM_COUNT; // 통신성공/통신시도횟수
unsigned char recv_cnt = 0;
void Send_CMD(void) // COMMAND
{
unsigned char i;
for(i=0; i<5; i++)
{
mySerial.write(Send_data[i]);
delay(1); // Don't delete this line !!
}
}
unsigned char Checksum_cal(void) // CHECKSUM
{
unsigned char count, SUM=0;
for(count=0; count<19; count++)
{
SUM += Receive_Buff[count];
}
return 256-SUM;
}
void setup() {
pinMode(13,INPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
while (!Serial) ;
mySerial.begin(9600);
while (!mySerial);
}
void loop() {
COM_COUNT++;
Send_CMD(); // Send Read Command
while(1)
{
if(mySerial.available())
{
Receive_Buff[recv_cnt++] = mySerial.read();
if(recv_cnt ==20){recv_cnt = 0; break;}
}
}
if(Checksum_cal() == Receive_Buff[19]) // CS 확인을 통해 통신 에러 없으면
{
COM_SUCCESS++;
PM25 = (unsigned long)Receive_Buff[3]<<24 | (unsigned long)Receive_Buff[4]<<16 | (unsigned long)Receive_Buff[5]<<8| (unsigned long)Receive_Buff[6]; // 농도계산(시프트)
//PM10 = (unsigned long)Receive_Buff[7]<<24 | (unsigned long)Receive_Buff[8]<<16 | (unsigned long)Receive_Buff[9]<<8| (unsigned long)Receive_Buff[10]; // 농도계산(시프트)
Serial.write("COM count : ");
Serial.print(COM_SUCCESS);
Serial.write(" / ");
Serial.print(COM_COUNT);
Serial.write(" PM2.5 : ");
Serial.print(PM25);
//Serial.write(" PM10 : ");
//Serial.println(PM10);
}
else
{
Serial.write("CHECKSUM Error");
}
delay(1000); //1000ms
}
|
cs |
도면은 아래와 같다.
PM10 측정값이 나오도록 주석을 삭제하여 수정한 코드이다. line 번호 18에 PM10 을 주석해제한 설명을 추가한다. 검사 측정 결과와 설명과 사진은 아래에 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/*****************************************************************************
*
* Copyright (C) 2016 Diwell Electronics Co.,Ltd.
* Project Name : PM2005, PM2007 UART Code <softwareserial 이용>
* Version : 1.1 (2017.10.17)
* SYSTEM CLOCK : 16Mhz
* BOARD : Arduino UNO. 5V operation
PORT Description
1. RX : 13
2. TX : 11
먼지센서 전원은 5V로 하셔야 하며 포트 연결 방법은 회로도를 참고하십시오.
먼지센서 통신포트의 논리 레벨은 3.3V 이기 때문에 반드시 회로도를 참고하시기 바랍니다.
Revision history.
1. 2016.5.4 : First version is released.
2. 2017.10.17 : PM10 삭제
3. 2018.11.14 : PM10 다시 복원 - 잘 됨 by girin
****************************************************************************/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(13, 11); // RX 13, TX 11
unsigned char Send_data[5] = {0x11,0x02,0x0b,0x01, 0xE1}; // 농도읽는명령
unsigned char Receive_Buff[20]; // data buffer
unsigned long PM25, PM10; // 농도저장변수 : 각 32bit(8bit*4 = 32)
unsigned long COM_SUCCESS, COM_COUNT; // 통신성공/통신시도횟수
unsigned char recv_cnt = 0;
void Send_CMD(void) // COMMAND
{
unsigned char i;
for(i=0; i<5; i++)
{
mySerial.write(Send_data[i]);
delay(1); // Don't delete this line !!
}
}
unsigned char Checksum_cal(void) // CHECKSUM
{
unsigned char count, SUM=0;
for(count=0; count<19; count++)
{
SUM += Receive_Buff[count];
}
return 256-SUM;
}
void setup() {
pinMode(13,INPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
while (!Serial) ;
mySerial.begin(9600);
while (!mySerial);
}
void loop() {
COM_COUNT++;
Send_CMD(); // Send Read Command
while(1)
{
if(mySerial.available())
{
Receive_Buff[recv_cnt++] = mySerial.read();
if(recv_cnt ==20){recv_cnt = 0; break;}
}
}
if(Checksum_cal() == Receive_Buff[19]) // CS 확인을 통해 통신 에러 없으면
{
COM_SUCCESS++;
PM25 = (unsigned long)Receive_Buff[3]<<24 | (unsigned long)Receive_Buff[4]<<16 | (unsigned long)Receive_Buff[5]<<8| (unsigned long)Receive_Buff[6]; // 농도계산(시프트)
PM10 = (unsigned long)Receive_Buff[7]<<24 | (unsigned long)Receive_Buff[8]<<16 | (unsigned long)Receive_Buff[9]<<8| (unsigned long)Receive_Buff[10]; // 농도계산(시프트)
Serial.write("COM count : ");
Serial.print(COM_SUCCESS);
Serial.write(" / ");
Serial.print(COM_COUNT);
Serial.write(" PM2.5 : ");
Serial.print(PM25);
Serial.write(" PM10 : ");
Serial.println(PM10);
}
else
{
Serial.write("CHECKSUM Error");
}
delay(1000); //1000ms
}
|
cs |
결과값을 살펴보자.
처음엔 공기가 좋아서 수치가 매우 낮았고, 담배연기를 뿜으니 최대값이 1000이 계속되고 시간이 지날 수록 값이 낮아지는 걸 보여준다. 여러값들이 나오는 것을 확인해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
COM count : 1 / 1 PM2.5 : 3 PM10 : 3
COM count : 2 / 2 PM2.5 : 3 PM10 : 3
COM count : 3 / 3 PM2.5 : 3 PM10 : 3
COM count : 4 / 4 PM2.5 : 3 PM10 : 3
COM count : 5 / 5 PM2.5 : 3 PM10 : 3
COM count : 6 / 6 PM2.5 : 3 PM10 : 3
COM count : 7 / 7 PM2.5 : 8 PM10 : 8
COM count : 8 / 8 PM2.5 : 12 PM10 : 12
COM count : 9 / 9 PM2.5 : 10 PM10 : 10
COM count : 10 / 10 PM2.5 : 13 PM10 : 13
COM count : 11 / 11 PM2.5 : 10 PM10 : 10
COM count : 12 / 12 PM2.5 : 8 PM10 : 8
COM count : 13 / 13 PM2.5 : 7 PM10 : 7
COM count : 14 / 14 PM2.5 : 6 PM10 : 6
COM count : 15 / 15 PM2.5 : 6 PM10 : 6
COM count : 16 / 16 PM2.5 : 4 PM10 : 4
COM count : 17 / 17 PM2.5 : 4 PM10 : 4
COM count : 18 / 18 PM2.5 : 4 PM10 : 4
COM count : 19 / 19 PM2.5 : 4 PM10 : 4
COM count : 20 / 20 PM2.5 : 4 PM10 : 4
COM count : 21 / 21 PM2.5 : 4 PM10 : 4
COM count : 22 / 22 PM2.5 : 4 PM10 : 4
COM count : 23 / 23 PM2.5 : 3 PM10 : 3
COM count : 24 / 24 PM2.5 : 10 PM10 : 10
COM count : 25 / 25 PM2.5 : 15 PM10 : 15
COM count : 26 / 26 PM2.5 : 1000 PM10 : 1000
COM count : 27 / 27 PM2.5 : 1000 PM10 : 1000
COM count : 28 / 28 PM2.5 : 1000 PM10 : 1000
COM count : 29 / 29 PM2.5 : 1000 PM10 : 1000
COM count : 30 / 30 PM2.5 : 1000 PM10 : 1000
COM count : 31 / 31 PM2.5 : 1000 PM10 : 1000
COM count : 32 / 32 PM2.5 : 1000 PM10 : 1000
COM count : 33 / 33 PM2.5 : 1000 PM10 : 1000
COM count : 34 / 34 PM2.5 : 1000 PM10 : 1000
COM count : 35 / 35 PM2.5 : 1000 PM10 : 1000
COM count : 36 / 36 PM2.5 : 1000 PM10 : 1000
COM count : 37 / 37 PM2.5 : 1000 PM10 : 1000
COM count : 38 / 38 PM2.5 : 1000 PM10 : 1000
COM count : 39 / 39 PM2.5 : 1000 PM10 : 1000
COM count : 40 / 40 PM2.5 : 1000 PM10 : 1000
COM count : 41 / 41 PM2.5 : 1000 PM10 : 1000
COM count : 42 / 42 PM2.5 : 1000 PM10 : 1000
COM count : 43 / 43 PM2.5 : 1000 PM10 : 1000
COM count : 44 / 44 PM2.5 : 1000 PM10 : 1000
COM count : 45 / 45 PM2.5 : 1000 PM10 : 1000
COM count : 46 / 46 PM2.5 : 1000 PM10 : 1000
COM count : 47 / 47 PM2.5 : 1000 PM10 : 1000
COM count : 48 / 48 PM2.5 : 1000 PM10 : 1000
COM count : 49 / 49 PM2.5 : 1000 PM10 : 1000
COM count : 50 / 50 PM2.5 : 1000 PM10 : 1000
COM count : 51 / 51 PM2.5 : 1000 PM10 : 1000
COM count : 52 / 52 PM2.5 : 1000 PM10 : 1000
COM count : 53 / 53 PM2.5 : 1000 PM10 : 1000
COM count : 54 / 54 PM2.5 : 1000 PM10 : 1000
COM count : 55 / 55 PM2.5 : 1000 PM10 : 1000
COM count : 56 / 56 PM2.5 : 344 PM10 : 497
COM count : 57 / 57 PM2.5 : 311 PM10 : 419
COM count : 58 / 58 PM2.5 : 305 PM10 : 416
COM count : 59 / 59 PM2.5 : 306 PM10 : 414
COM count : 60 / 60 PM2.5 : 310 PM10 : 424
COM count : 61 / 61 PM2.5 : 329 PM10 : 461
COM count : 62 / 62 PM2.5 : 334 PM10 : 466
COM count : 63 / 63 PM2.5 : 341 PM10 : 485
COM count : 64 / 64 PM2.5 : 958 PM10 : 1000
COM count : 65 / 65 PM2.5 : 1000 PM10 : 1000
COM count : 66 / 66 PM2.5 : 1000 PM10 : 1000
COM count : 67 / 67 PM2.5 : 1000 PM10 : 1000
COM count : 68 / 68 PM2.5 : 1000 PM10 : 1000
COM count : 69 / 69 PM2.5 : 1000 PM10 : 1000
COM count : 70 / 70 PM2.5 : 1000 PM10 : 1000
COM count : 71 / 71 PM2.5 : 1000 PM10 : 1000
COM count : 72 / 72 PM2.5 : 1000 PM10 : 1000
COM count : 73 / 73 PM2.5 : 1000 PM10 : 1000
COM count : 74 / 74 PM2.5 : 1000 PM10 : 1000
COM count : 75 / 75 PM2.5 : 1000 PM10 : 1000
COM count : 76 / 76 PM2.5 : 1000 PM10 : 1000
COM count : 77 / 77 PM2.5 : 1000 PM10 : 1000
COM count : 78 / 78 PM2.5 : 1000 PM10 : 1000
COM count : 79 / 79 PM2.5 : 1000 PM10 : 1000
COM count : 80 / 80 PM2.5 : 1000 PM10 : 1000
COM count : 81 / 81 PM2.5 : 1000 PM10 : 1000
COM count : 82 / 82 PM2.5 : 1000 PM10 : 1000
COM count : 83 / 83 PM2.5 : 1000 PM10 : 1000
COM count : 84 / 84 PM2.5 : 1000 PM10 : 1000
COM count : 85 / 85 PM2.5 : 137 PM10 : 137
COM count : 86 / 86 PM2.5 : 136 PM10 : 136
COM count : 87 / 87 PM2.5 : 134 PM10 : 134
COM count : 88 / 88 PM2.5 : 129 PM10 : 129
COM count : 89 / 89 PM2.5 : 127 PM10 : 127
COM count : 90 / 90 PM2.5 : 52 PM10 : 52
COM count : 91 / 91 PM2.5 : 52 PM10 : 52
COM count : 92 / 92 PM2.5 : 52 PM10 : 52
COM count : 93 / 93 PM2.5 : 52 PM10 : 52
COM count : 94 / 94 PM2.5 : 52 PM10 : 52
COM count : 95 / 95 PM2.5 : 52 PM10 : 52
COM count : 96 / 96 PM2.5 : 56 PM10 : 62
COM count : 97 / 97 PM2.5 : 60 PM10 : 63
COM count : 98 / 98 PM2.5 : 66 PM10 : 69
COM count : 99 / 99 PM2.5 : 72 PM10 : 78
COM count : 100 / 100 PM2.5 : 77 PM10 : 86
COM count : 101 / 101 PM2.5 : 348 PM10 : 726
COM count : 102 / 102 PM2.5 : 346 PM10 : 724
COM count : 103 / 103 PM2.5 : 349 PM10 : 727
COM count : 104 / 104 PM2.5 : 346 PM10 : 724
COM count : 105 / 105 PM2.5 : 340 PM10 : 718
COM count : 106 / 106 PM2.5 : 334 PM10 : 712
COM count : 107 / 107 PM2.5 : 326 PM10 : 692
COM count : 108 / 108 PM2.5 : 319 PM10 : 673
COM count : 109 / 109 PM2.5 : 315 PM10 : 666
COM count : 110 / 110 PM2.5 : 73 PM10 : 73
COM count : 111 / 111 PM2.5 : 72 PM10 : 72
COM count : 112 / 112 PM2.5 : 72 PM10 : 72
COM count : 113 / 113 PM2.5 : 71 PM10 : 71
COM count : 114 / 114 PM2.5 : 70 PM10 : 70
COM count : 115 / 115 PM2.5 : 69 PM10 : 69
COM count : 116 / 116 PM2.5 : 68 PM10 : 68
COM count : 117 / 117 PM2.5 : 37 PM10 : 37
COM count : 118 / 118 PM2.5 : 37 PM10 : 37
COM count : 119 / 119 PM2.5 : 36 PM10 : 36
COM count : 120 / 120 PM2.5 : 37 PM10 : 37
COM count : 121 / 121 PM2.5 : 37 PM10 : 37
COM count : 122 / 122 PM2.5 : 37 PM10 : 37
COM count : 123 / 123 PM2.5 : 37 PM10 : 37
COM count : 124 / 124 PM2.5 : 37 PM10 : 37
COM count : 125 / 125 PM2.5 : 37 PM10 : 37
COM count : 126 / 126 PM2.5 : 38 PM10 : 38
COM count : 127 / 127 PM2.5 : 38 PM10 : 38
COM count : 128 / 128 PM2.5 : 38 PM10 : 38
COM count : 129 / 129 PM2.5 : 38 PM10 : 38
COM count : 130 / 130 PM2.5 : 39 PM10 : 39
COM count : 131 / 131 PM2.5 : 40 PM10 : 40
COM count : 132 / 132 PM2.5 : 42 PM10 : 42
COM count : 133 / 133 PM2.5 : 47 PM10 : 47
COM count : 134 / 134 PM2.5 : 53 PM10 : 53
COM count : 135 / 135 PM2.5 : 64 PM10 : 64
|
cs |
실습 사진이다. 잘 안되는 경우 배선연결을 확인하도록 한다.
'개발자 > Arduino' 카테고리의 다른 글
Arduino NANO 33 BLE Sense 개발 가이드 3 - 센서 다루기 (2) | 2020.05.01 |
---|---|
Arduino NANO 33 BLE Sense 개발 가이드 2 - Pinmap과 기능 훑어보기 (0) | 2020.05.01 |
Arduino NANO 33 BLE Sense 개발 가이드 1 - 시작하기 (2) | 2020.05.01 |
Ultrasonic Sensors: Comparison and Test (US42V2, JSN-SR04T, and US-100) (0) | 2019.05.22 |
레이저 미세먼지 센서 PM2008M 을 아두이노메가 측정 코드와 결과 (2) | 2018.11.22 |
아두이노로 만든 반응하는 인형 9가지 구성품 테스트 코드 (0) | 2018.06.22 |
아두이노 라이브러리 리스트 Arduino Library List 1470개의 라이브러리 모아놓은 곳 (0) | 2018.04.24 |
MMA8452Q 3축 가속도 센서 모듈 아두이노 코드 digital accelerometer (0) | 2018.04.19 |
더욱 좋은 정보를 제공하겠습니다.~ ^^