นวัตกรรม สิ่งประดิษฐ์ และเทคโนโลยี

กรุณา เข้าสู่ระบบ หรือ สมัครสมาชิก.

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
การค้นหาขั้นสูง  

ผู้เขียน หัวข้อ: เซ็นเซอร์ PM2.5 และ PM1.0 # SDS011  (อ่าน 75 ครั้ง)

NAWATTAKAM

  • Administrator
  • Sr. Member
  • *****
  • กระทู้: 383
เซ็นเซอร์ PM2.5 และ PM1.0 # SDS011
« เมื่อ: มีนาคม 27, 2019, 10:54:11 AM »

Arduino

- ต่อขา TxD (ขา1) บอร์ด SDS011  เข้าขา 10 ของ UNO






โค๊ด
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // ->(10) RX  ,  (11) TX->


float p10, p25;
int error;


void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) { }

  mySerial.begin(9600);

}


void PM()
{

 byte buffer;
  int value;
  int len = 0;
  int pm10_serial = 0;
  int pm25_serial = 0;
  int checksum_is;
  int checksum_ok = 0;
  int error = 1;

while (( mySerial.available() > 0) && ( mySerial.available() >= (10-len)))
  {
    buffer =  mySerial.read();
    value = int(buffer);
    switch (len) {
      case (0): if (value != 170) { len = -1; }; break;
      case (1): if (value != 192) { len = -1; }; break;
      case (2): pm25_serial = value; checksum_is = value; break;
      case (3): pm25_serial += (value << 8); checksum_is += value; break;
      case (4): pm10_serial = value; checksum_is += value; break;
      case (5): pm10_serial += (value << 8); checksum_is += value; break;
      case (6): checksum_is += value; break;
      case (7): checksum_is += value; break;
      case (8): if (value == (checksum_is % 256)) { checksum_ok = 1; } else { len = -1; }; break;
      case (9): if (value != 171) { len = -1; }; break;
    }
    len++;
    if (len == 10 && checksum_ok == 1) {
      p10 = (float)pm10_serial/10.0;
      p25 = (float)pm25_serial/10.0;
      len = 0; checksum_ok = 0; pm10_serial = 0.0; pm25_serial = 0.0; checksum_is = 0;
      error = 0;
    }

  }



if (!error) {
    Serial.print("P2.5: " + String(p25));    Serial.println("         P10:  " + String(p10));
  }
  delay(100);


 
}


void loop() { // run over and over
 
   PM();
   
}



ผล

บันทึกการเข้า