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.