-
Notifications
You must be signed in to change notification settings - Fork 2
Raspberry Pi i Domoticz = monitorowanie poziomu pyłu PM10 i PM2.5 za pomocą czujnika PMS5003
Instrukcja wykonania urządzenia monitorującego poziom pyłu w oparciu o Raspberry pi, czujnik PMS5003 i Domoticz.
Do zrobienia takiego urządzenia potrzebujemy:
- Raspberry pi
- Czujnik pyłu PMS5003: https://pl.aliexpress.com/item/PLANTOWER-PM2-5-SENSOR-laser-dust-sensor-G5-PMS5003-High-precision-laser-dust-concentration-sensor-digital/32618735056.html?spm=a2g0s.9042311.0.0.oqLEmn
- Kabelki połączeniowe: https://pl.aliexpress.com/item/10-Set-1-25mm-Pitch-Male-Connector-Wire-15CM-Long-28AWG-2-3-4-5-6/32787305004.html?spm=a2g0s.9042311.0.0.oqLEmn
lub
https://pl.aliexpress.com/item/10-Set-1-25mm-Pitch-Male-Connector-Wire-15CM-Long-28AWG-2-3-4-5-6/32788088544.html?spm=a2g0s.9042311.0.0.oqLEmn - Rezystor 10k
Czujnik podłączamy do Raspberry zgodnie ze schematem:
Ja pin RESET(6) zostawiłem niepodłączony. Pin SET(3) podłączyłem pod GPIO24.
Dokumentację czujnika PMS5003 można znaleźć na stronie elty.pl:
plantower-pms5003-manual_v2-3.pdf
PMS5003_LOGOELE.pdf
Gdy sprzęt mamy gotowy pozostaje nam zainstalować oprogramowanie na Raspberry.
Na Raspberry instalujemy bibliotekę "periphery"
pip install python-periphery
Może też być konieczne właściwe skonfigurowanie portu szeregowego na Raspberry - polecam sprawdzić w Google jak to zrobić w przypadku Waszej wersji Raspberry i systemu operacyjnego.
W Domoticz dodajemy wirtualne sensory typu "Custom" - dla poziomu pyłu PM1.0, PM2,5, PM10. Warto tez dodać kolejne trzy sensory typu "Percentage" które pokażą nam procentowo poziom zanieczyszczenia. Notujemy identyfikatory IDX tych sensorów.
Kopiujemy program pms5003-logger a dokładniej plik pmlog.py. Możemy go ściągnąć z Githuba: https://github.com/mstojek/pms5003-logger/
Do Crontaba dodajemy wpis który co X minut (tutaj 30) zmierzy poziom zanieczyszczenia i zaraportuje do Domoticza:
*/30 * * * * sudo /usr/bin/python /opt/domoticz/scripts/pmlog.py -p /dev/ttyAMA0 --enable-pin 24 --warmup-time 35 domoticz -ip 127.0.0.1 -p 8080 -m oneshot --pm_1_idx 10 --pm_25_idx 11 --pm_10_idx 12 --pm_1_percent_idx 13 --pm_25_percent_idx 14 --pm_10_percent_idx 15
W przykładzie powyżej robimy pomiar co 30 minut. W przypadku Raspberry pi model B dane czytamy z portu szeregowego /dev/ttyAMA0. Pin SET podłączony jest do GPIO24. Dajemy czujnikowi pyłu 35 sekund na "rozgrzanie się" (instrukcja zaleca minimum 30). Domoticz ma adres ip 127.0.0.1 i nasłuchuje na porcie 8080. Opcja oneshot oznacza ze zrobimy tylko jeden pomiar i go zaraportujemy (mozemy tez dać tryb monitor - raportowac wyniki co określony czas). Wyniki pomiarów zostaną zaraportowane do wirtualnych sensorów o IDX od 10 do 15.
Wyniki pomiarów można zobaczyć poniżej:
PM 2.5
PM10
Jak widać rozrzut jest spory - niestety ten czujnik w zakresie do 100 ug/m3 ma błąd pomiaru na poziomie +-10ug/m3. Potem jest +-10% wyniku. Do dokładnych pomiarów nie nadaje się, ale do oceny czy jest dobrze, źle, czy bardzo źle ta dokładność jest wystarczająca.
Program pmlog ma sporo opcji - zamiast do Domoticza może wyniki pomiaru wypisywać na ekran:
Główne opcje:
osmc@osmc:~/git/pms5003-logger$ ./pmlog.py -h
usage: pmlog.py [-h] [-p PORT] [--reset-pin RESET_PIN]
[--enable-pin ENABLE_PIN] [--warmup-time WARMUP_TIME]
{monitor,oneshot,domoticz} ...
PMS5003 data logger
positional arguments:
{monitor,oneshot,domoticz}
optional arguments:
-h, --help show this help message and exit
-p PORT, --serial-port PORT Serial port connected to the PMS5003 sensor
--reset-pin RESET_PIN
GPIO number connected to the RESET signal
--enable-pin ENABLE_PIN
GPIO number connected to the SET (enable) signal
--warmup-time WARMUP_TIME
Seconds to wait before reading data
osmc@osmc:~/git/pms5003-logger$
Tryb monitor - pomiary wypisywane okresowo na ekran:
osmc@osmc:~/git/pms5003-logger$ ./pmlog.py monitor -h
usage: pmlog.py monitor [-h] [--measure-period MEASURE_PERIOD]
optional arguments:
-h, --help show this help message and exit
--measure-period MEASURE_PERIOD
Seconds between measurements
osmc@osmc:~/git/pms5003-logger$
Tryb jednorazowego pomiaru - pomiar wypisywany na ekran:
osmc@osmc:~/git/pms5003-logger$ ./pmlog.py oneshot -h
usage: pmlog.py oneshot [-h]
optional arguments:
-h, --help show this help message and exit
osmc@osmc:~/git/pms5003-logger$
Tryb raportowania do Domoticza:
osmc@osmc:~/git/pms5003-logger$ ./pmlog.py domoticz -h
usage: pmlog.py domoticz [-h] -ip IP_ADDRESS [-p PORT] [-m {oneshot,monitor}]
[--measure-period MEASURE_PERIOD]
[--pm_1_idx PM_1_IDX] [--pm_25_idx PM_25_IDX]
[--pm_10_idx PM_10_IDX]
[--pm_1_percent_idx PM_1_PERCENT_IDX]
[--pm_25_percent_idx PM_25_PERCENT_IDX]
[--pm_10_percent_idx PM_10_PERCENT_IDX]
optional arguments:
-h, --help show this help message and exit
-ip IP_ADDRESS, --domoticz-ip IP_ADDRESS
IP address of domoticz server
-p PORT, --domoticz-port PORT Port of domoticz server
-m {oneshot,monitor}, --mode {oneshot,monitor}
Monitor or oneshot mode
--measure-period MEASURE_PERIOD
Seconds between measurements
--pm_1_idx PM_1_IDX IDX of PM1 - if empty nothing will be reported to
domoticz
--pm_25_idx PM_25_IDX
IDX of PM2.5 - if empty nothing will be reported to
domoticz
--pm_10_idx PM_10_IDX
IDX of PM10 - if empty nothing will be reported to
domoticz
--pm_1_percent_idx PM_1_PERCENT_IDX
IDX of PM1 percent (100% is 25 ug/m3) - if empty
nothing will be reported to domoticz
--pm_25_percent_idx PM_25_PERCENT_IDX
IDX of PM2.5 percent (100% is 25 ug/m3) - if empty
nothing will be reported to domoticz
--pm_10_percent_idx PM_10_PERCENT_IDX
IDX of PM10 percent (100% is 50 ug/m3) - if empty
nothing will be reported to domoticz
osmc@osmc:~/git/pms5003-logger$