Skip to content

Raspberry Pi i Domoticz = monitorowanie poziomu pyłu PM10 i PM2.5 za pomocą czujnika PMS5003

Marcin Stojek edited this page Aug 16, 2017 · 10 revisions

Instrukcja wykonania urządzenia monitorującego poziom pyłu w oparciu o Raspberry pi, czujnik PMS5003 i Domoticz.

Do zrobienia takiego urządzenia potrzebujemy:

  1. Raspberry pi
  2. 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
  3. 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
  4. Rezystor 10k

SPRZĘT

Czujnik podłączamy do Raspberry zgodnie ze schematem: Schemat

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

OPROGRAMOWANIE

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

Wyniki pomiarów można zobaczyć poniżej:
Dashboard

PM 2.5
PM2.5

PM10
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.

INFORMACJE DODATKOWE

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$