KKM: Plantower PMS5003

Početnik si s Croduinom. 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 e-radionice 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 Croduinom 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 odziva: ≤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) - pozitivna 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 [email protected]
•PIN5 (TX) - Serijski port TX pin / TTL [email protected]
•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 Croduino.

 #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 Croduina koristimo CTRL+SHIT+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.

Leave a Reply