[PROJEKT] Czujnik pyłu PMS3003 i Arduino

W artykule zaprezentowany jest czujnik jakości powietrza oparty o sensor PMS3003. W czasach, niestety, coraz większej ilości zanieczyszczeń i smogu, czujnik jawi się jako tańsza alternatywa dla profesjonalnych mierników. Pozwala wyznaczyć współczynniki PM2,5, i PM10, czyli najpopularniejsze miary czystości powietrza. Układ wykorzystuje także alfanumeryczny wyświetlacz LCD 2 x 16 będący częścią płytki LCD Keypad Shield firmy DFRobot. Na tym wyświetlaczu będą prezentowane wyniki pomiaru.

Do realizacji projektu potrzebne są:

PMS3003 firmy Plantower to optyczny czujnik zawartości pyłów w powietrzu. Działa na zasadzie rozszczepienia światła lasera na drobinkach pyłów. Mierzy w zakresie 0-500 μg/m³ we wszystkich trzech zakresach. Sensor przesyła dane interfejsem UART co oznacza, że będzie doskonale współpracował z Arduino oraz w zasadzie wszystkimi innymi mikrokontrolerami.

Sensor wysyła dane cyfrowe o stałej długości ramki wynoszącej 24 bajty. Kolejne bajty ramki protokołu mają następujące znaczenie:

Numer bajtu Znaczenie
 1  0x42 (stały)
 2  0x4d (stały)
 3, 4  Długość ramki – 2×9+2 (dane + sprawdzenie poprawności)
 5, 6  Współczynnik PM1,0 wg standardu TSI
 7, 8  Współczynnik PM2,5 wg standardu TSI
 9, 10  Współczynnik PM10 wg standardu TSI
 11, 12  Współczynnik PM1,0 w środowisku atmosferycznym
 13, 14  Współczynnik PM1,0 w środowisku atmosferycznym
 15, 16  Współczynnik PM1,0 w środowisku atmosferycznym
 17, 18  zastrzeżone
 19, 20  zastrzeżone
 21, 22  zastrzeżone
 23, 24  Kod kontrolny – suma wszystkich pozostałych bajtów w ramce

Dane podawane wg standardu TSI to dane skalibrowane dla środowiska zamkniętego, np. fabryki. Dane dla środowiska atmosferycznego są skalibrowane do pomiaru w środowisku otwartym. I takie powinny być używane, gdy chcemy zmierzyć ilość pyłów w powietrzu za oknem (czyli w zastosowaniu zakładanym przez autora). Dane przesyłane są w postaci 16-bitowej, tj. jako dwa kolejne bajty. Należy pamiętać, że najpierw przesyłanych jest 8 bitów starszych, następnie bity młodsze.

Kolejnym elementem użytym w projekcie jest Shield na Arduino firmy DFRobot o nazwie LCD Keypad Shield. Oprócz ekranu zawiera on m.in. również 5 przycisków użytkownika oraz potencjometr do kierowania jasnością wyświetlacza. W projekcie wykorzystamy jednak tylko wyświetlacz.

Niezbędnym elementem projektu jest konwerter stanów logicznych, np. KAmodLVC. Niestety czujnik mimo, że jest zasilany napięciem 5 V, to do komunikacji wykorzystuje sygnały o maksymalnym napięciu 3,3 V. Podłączenie sensora bezpośrednio do Arduino może więc spowodować uszkodzenie sensora, gdyż nie jest on przystosowany do komunikacji przy napięciu 5 V.

Czujnik posiada w zestawie różnokolorowy kabel połączeniowy. Przeznaczenie poszczególnych pinów sensora wraz z odpowiadającym mu kolorem izolacji jest następujące:

Nazwa pinu Kolor Znaczenie
 VCC  Brązowy  Zasilanie +5 V
 GND  Niebieski  Masa układu
 SET  Zielony  Uśpienie (gdy stan niski)
 RX  Pomarańczowy  Linia odbioru danych
 TX  Biały  Linia transmisji danych
 RESET  Zółty  Zerowanie (gdy stan niski)
 N/C  Czarny
 N/C  Czerwony

Podczas standardowej pracy układu linie SET i RESET mogą być niepodłączone, a linie oznaczone N/C – wręcz nie powinny. Do linii VCC należy doprowadzić zasilanie +5 V. Natomiast linie TX i RX należy podłączyć do ich odpowiedników na płytce Arduino (ale na krzyż – tzn. TX czujnika do RX płytki i analogicznie linię RX czujnika do TX na płytce Arduino) za pośrednictwem konwertera stanów logicznych (Arduino po stronie „VCC”, czujnik po stronie „VL”). Płytce KAmodLVC należy też zapewnić zasilanie obu typów tj. 5 V (do pinu VCC) i 3,3 V (do pinu VL) oraz masę układu (do któregokolwiek z pinów GND).

 

Uwaga. W celu ułatwienia połączeń na przewodu czujnika założono piny BLT-LF oraz obudowy BLS01. Fabrycznie przewody są ich pozbawione.

Do pobrania

O autorze