KKM: PLANTOWER PMS5003

KKM: PLANTOWER PMS5003-Uncategorized

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

PMS5003 je vrsta digitalnog univerzalnog senzora za mjerenje koncentracije čestica u zraku,
koji se može koristiti za dobivanje informacija o čistoći zraka.

SPECIFIKACIJE

OSNOVNO
• Radni napon: 4.95 ~ 5.05V
• Maksimalna električna struja: 120mA
• Struja mirovanja: ≤200 uA
• Vrijeme odaziva: ≤10 s
• Raspon radne temperature: -20 ~ 50C
• Raspon radne vlažnosti: 0 ~ 99% RH
• Maksimalna veličina: 65 × 42 × 23 (mm)

ISTAKNUTO
• Brzi odaziv
• Kalibracijska krivulja drugog reda u više točaka
• Minimalna rezolucija 0,3 mikrona

PRINCIP RADA

Senzor koristi princip laserskog raspršivanja, tj. proizvodi raspršivanje
pomoću lasera za zračenje suspendirajućih čestica u zraku, a zatim prikuplja to svijetlo
u određenom stupnju te konačno dobijemo krivulju promjene raspršenog svjetla. Na kraju, ekvivalentni promjer čestica i broj čestica s različitim promjerom po jedinici volumena koji se može izračunati pomoću mikroprocesora na temelju MIE teorije.

Blokovski prikaz rada senzora

 

PINOVI

•PIN1 (VCC) – pozitivan napon 5V
•PIN2 (GND) – nulti potencijal
•PIN3 (SET) – 3.3V aktivan 0V/GND neaktivan, nije potrebno spajati ako se ne koristi neaktivan mod jer je iznutra spojen preko pull up otpornika
•PIN4 (RX) – Serijski port RX pin / TTL level@3.3V
•PIN5 (TX) – Serijski port TX pin / TTL level@3.3V
•PIN6 (RESET) – Signal resetiranja modula / TTL razina @ 3.3V V ,low reset
•PIN7/8 (NC) – Not connected

SPAJANJE I KOD

Kako bismo spojili ovaj modul koristiti ćemo 3 njegova pina. 2 za napajanje te jedan pin preko kojega će modul serijskom vezom slati podatke na Dasduino.

#include //Koristi serial library
    SoftwareSerial pmsSerial(2, 3);//TX RX linija za slanje te linija za primanje
     
    void setup() {
      
      Serial.begin(115200);//Linija za primanje
     
      // baud rate senzora 9600
      pmsSerial.begin(9600);//Linija za komunkikaciju s PMS senzorom
    }
     
    struct pms5003data {//deklaracija uint16_t koji ima vrijednost od 0 do 65,535
      uint16_t framelen;
      uint16_t pm10_standard, pm25_standard, pm100_standard;
      uint16_t pm10_env, pm25_env, pm100_env;
      uint16_t particles_03um, particles_05um, particles_10um, particles_25um, particles_50um, particles_100um;
      uint16_t unused;
      uint16_t checksum;
    };//stvaranje strukture podataka
     
    struct pms5003data data;
        
    void loop() {
      if (readPMSdata(&pmsSerial)) {//Ako dolaze nekakvi podatci preko primajuće linije onda
        
        Serial.println("---------------------------------------");
        Serial.print("Cestica u zraku > 0.3um / 0.1L zraka:");
Serial.println(data.particles_03um);//Čestica većih od 0.3 um
        Serial.print("Cestica u zraku > 0.5um / 0.1L zraka:");
Serial.println(data.particles_05um);//Čestica većih od 0.5 um
        Serial.print("Cestica u zraku > 1.0um / 0.1L zraka:");
Serial.println(data.particles_10um);//Čestica većih od 1 um
        Serial.print("Cestica u zraku > 2.5um / 0.1L zraka:");
Serial.println(data.particles_25um);//Čestica većih od 2.5 um
        Serial.print("Cestica u zraku > 5.0um / 0.1L zraka:");
Serial.println(data.particles_50um);//Čestica većih od 5 um
        Serial.print("Cestica u zraku > 10.0 um / 0.1L zraka:");
Serial.println(data.particles_100um);//Čestica većih od 10 um
        Serial.println("---------------------------------------");
      }
    }
     
    boolean readPMSdata(Stream *s) {
      if (! s->available()) {
        return false;
      }
      
      //čitaj byte po bit dok ne dobijemo '0x42' startni byte
      if (s->peek() != 0x42) {
        s->read();
        return false;
      }
     
      // Sada pročitaj sva 32 bytes
      if (s->available() < 32) { return false; } uint8_t buffer[32]; uint16_t sum = 0; s->readBytes(buffer, 32);
     
      // provjerimo sve s kontrolnim zbrojem
      for (uint8_t i=0; i<30; i++) {
        sum += buffer[i];
      }
     
    
      
      // Podatci dolaze u endian'd protokolu, ovaj dio koda omogućava podržanost na svim platformama
      uint16_t buffer_u16[15];
      for (uint8_t i=0; i<15; i++) {
        buffer_u16[i] = buffer[2 + i*2 + 1];
        buffer_u16[i] += (buffer[2 + i*2] << 8);
      }
     
      // spremimo sve u strukturu
      memcpy((void *)&data, (void *)buffer_u16, 30);
     
      if (sum != data.checksum) {
        Serial.println("Checksum failure");
        return false;
      }
      // kada sve uspije vraćamo rezultat
      return true;
    }

 

KONAČNI REZULTAT

Kako bi smo dobili serial  monitor s Dasduina koristimo CTRL+SHIFT+M prečac unutar Arduino IDE programa te nam se nakon toga otvara serial monitor preko kojega ćemo primati informacije s našeg senzora.

Primjetite kako su očitanja senzora podjeljena u 6 kategorija ovisno o veličinama detektiranih čestica u zraku.
————————————————–
• Čestica u zraku veće od 0.3μm u 0.1L zraka ima 6942
• Čestica u zraku veće od 0.5μm u 0.1L zraka ima 2052
• Čestica u zraku veće od 1.0μm u 0.1L zraka ima 332
• Čestica u zraku veće od 2.5μm u 0.1L zraka ima 34
• Čestica u zraku veće od 5.0μm u 0.1L zraka ima 4
•Čestica u zraku veće od 10.0μm u 0.1L zraka ima 0

Imajte na umu da je ovaj modul potrebno kalibrirati prije korištenja u ozbiljnijim projektima.