พอรันตามนี้แล้วค่า pm1,2.5,10 มันขึ้นแปลกๆครับ บางครั้งขึ้นเป็นหลักหมื่นทั้งสามค่าแล้วค่าก็ไม่ลดเลย บางครั้งก็หลักร้อยครับ
ผมอยากทราบว่าเป็นที่ code หรือตัวเซนเซอร์ครับ
code ที่ใช้ ร่วมกับจอ LCD
//library จอ LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
//library เซ็นเซอร์ตรวจจับฝุ่นละออง PMS3003
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11); // RX, TX
unsigned int pm1 = 0;
unsigned int pm2_5 = 0;
unsigned int pm10 = 0;
void setup() {
lcd.begin();
Serial.begin(9600);
while (!Serial) ;
mySerial.begin(9600);
}
void loop() {
int index = 0;
char value;
char previousValue;
while (mySerial.available()) {
value = mySerial.read();
if ((index == 0 && value != 0x42) || (index == 1 && value != 0x4d)){
Serial.println("Cannot find the data header.");
break;
}
if (index == 4 || index == 6 || index == 8 || index == 10 || index == 12 || index == 14) {
previousValue = value;
}
else if (index == 5) {
pm1 = 256 * previousValue + value;
Serial.print("pm1:");
Serial.print(pm1);
Serial.print(" ");
lcd.setCursor(0, 0);
lcd.print("pm1: ");
lcd.setCursor(0, 1);
lcd.print(pm1);
lcd.setCursor(4, 1);
lcd.print(" ");
}
else if (index == 7) {
pm2_5 = 256 * previousValue + value;
Serial.print("pm2.5:");
Serial.print(pm2_5);
Serial.print(" ug/m3");
Serial.print(" ");
lcd.setCursor(5, 0);
lcd.print("2.5: ");
lcd.setCursor(5, 1);
lcd.print(pm2_5);
lcd.setCursor(10, 1);
lcd.print(" ");
}
else if (index == 9) {
pm10 = 256 * previousValue + value;
Serial.print("pm10:");
Serial.print(pm10);
Serial.print(" ug/m3");
lcd.setCursor(11, 0);
lcd.print("10: ");
lcd.setCursor(11, 1);
lcd.print(pm10);
}
else if (index > 15) {
break;
}
index++;
}
while(mySerial.available()) mySerial.read();
Serial.println(" }");
delay(1000);
}
ลองแยกทดสอบเฉพาะโมดูล PM2.5 โค้ดตัวอย่างตามนี้ครับ
https://wiki.dfrobot.com/PM2.5_laser_dust_sensor_SKU_SEN0177