KKM: PLANTOWER PMS5003
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.



