Sensor-Dust
From Microduino Wiki
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(); //update the counter
}
}
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 ;
}
PurchaseHistory |