Difference between revisions of "Sensor-Dust"
From Microduino Wiki
(→Application) |
(→Application) |
||
Line 36: | Line 36: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
− | # | + | #include <SoftwareSerial.h> |
− | + | SoftwareSerial pmSerial(4, 5); //PM2.5 sensor soft serail port | |
− | #define | + | #define INTERVAL_pm25 200 |
− | + | unsigned long pm25_time = millis(); | |
− | |||
− | |||
− | + | void setup() { | |
− | + | Serial.begin(9600); // See the connection status in Serial Monitor | |
− | + | pmSerial.begin(2400); //start the soft serial port at first | |
+ | } | ||
− | void | + | void loop() { |
− | + | if (pm25_time > millis()) pm25_time = millis(); | |
− | + | if (millis() - pm25_time > INTERVAL_pm25) { | |
− | + | Serial.println(PM25()) ; | |
− | + | pm25_time = millis(); //更新计时器 | |
+ | } | ||
} | } | ||
− | + | float PM25() { | |
− | + | int data_s = 0; //serial receives the data | |
− | + | int num = -1; //serial receives the data and counts | |
− | + | int sum = 0; //checksum | |
− | + | int cal[5]; //receive the data buffer | |
− | + | float dustDensity = 0; //PM2.5 intensity | |
− | + | ||
− | + | pmSerial.listen(); | |
− | + | while (1) { | |
− | + | if (pmSerial.available() > 0) { //serail cache data | |
− | + | data_s = pmSerial.read(); //read the serial cache data | |
− | + | if (data_s == 0xAA) { //attain the starting position of the data frame | |
− | + | num = 0; //start to count | |
− | + | } | |
+ | else if (num >= 0) { | ||
+ | cal[num++] = data_s; //read teh data and the number+1, and store the data into the buffer | ||
+ | if (num == 6) { //read to the last bit of the data frame | ||
+ | sum = cal[0] + cal[1] + cal[2] + cal[3]; //calculate the checksum | ||
+ | if (sum == cal[4] && cal[5] == 0xFF) { //checksum match, the last bit of the data frame is 0xFF, representing the data frame received is normal | ||
+ | dustDensity = (cal[0] * 256 + cal[1]) * (5.0 / 1024) * 550; //calculate the PM2.5 intensity, in ug/m3 | ||
+ | } | ||
+ | else { //the data received is abnormal | ||
+ | dustDensity = 0; //clear the intensity | ||
+ | } | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | pmSerial.stopListening(); | ||
+ | return dustDensity ; | ||
} | } | ||
</source> | </source> |
Revision as of 06:29, 26 August 2016
Language: | English • 中文 |
---|
Microduino-Dust is a PM2.5 sensor. ContentsSensor Pin Introduction
Features
Specification
Document
DevelopmentMicroduino-Dust can be applied in outdoor air quality detection or indoor dust detection. Application
#include <SoftwareSerial.h>
SoftwareSerial pmSerial(4, 5); //PM2.5 sensor soft serail port
#define INTERVAL_pm25 200
unsigned long pm25_time = millis();
void setup() {
Serial.begin(9600); // See the connection status in Serial Monitor
pmSerial.begin(2400); //start the soft serial port at first
}
void loop() {
if (pm25_time > millis()) pm25_time = millis();
if (millis() - pm25_time > INTERVAL_pm25) {
Serial.println(PM25()) ;
pm25_time = millis(); //更新计时器
}
}
float PM25() {
int data_s = 0; //serial receives the data
int num = -1; //serial receives the data and counts
int sum = 0; //checksum
int cal[5]; //receive the data buffer
float dustDensity = 0; //PM2.5 intensity
pmSerial.listen();
while (1) {
if (pmSerial.available() > 0) { //serail cache data
data_s = pmSerial.read(); //read the serial cache data
if (data_s == 0xAA) { //attain the starting position of the data frame
num = 0; //start to count
}
else if (num >= 0) {
cal[num++] = data_s; //read teh data and the number+1, and store the data into the buffer
if (num == 6) { //read to the last bit of the data frame
sum = cal[0] + cal[1] + cal[2] + cal[3]; //calculate the checksum
if (sum == cal[4] && cal[5] == 0xFF) { //checksum match, the last bit of the data frame is 0xFF, representing the data frame received is normal
dustDensity = (cal[0] * 256 + cal[1]) * (5.0 / 1024) * 550; //calculate the PM2.5 intensity, in ug/m3
}
else { //the data received is abnormal
dustDensity = 0; //clear the intensity
}
break;
}
}
}
}
pmSerial.stopListening();
return dustDensity ;
}
PurchaseHistoryPictures
|