Komunikacja z Plantower PMS1003, PMS3003

Kilka technicznych szczegółów komunikacji z czujnikiem zapylenia z mojej stacji pomiaru jakości powietrza.

Czujnik zapylenia PMS1003 wysyła dane przez port seryjny – 32 bajty:

  • 0-1 sygnału informującego o rozpoczęciu transmisji 0x42, 0x4d
  • 2-3 sygnał kontrolny (nie używany)
  • 4-5 koncentracja PM1.0 „CF=1, standard particle”
  • 6-7 koncentracja PM2.5 „CF=1, standard particle”
  • 8-9 koncentracja PM10 „CF=1, standard particle”
  • 10-11 koncentracja PM1.0 „under atmospheric environment”
  • 12-13 koncentracja PM2.5 „under atmospheric environment”
  • 14-15 koncentracja PM10 „under atmospheric environment”
  • 16-27 – kolejno po dwa bajty – ilość cząstek pyłu o rozmiarze do 0,3µm; 0,5µm; 1.0µm; 2,5µm; 5,0µm; 10µm w objętości 0.1 litra powietrza.
  • 28-29 – nieużywane
  • 30-31 suma kontrolna (suma bajtów 0-29)

Na początku korzystałem z danych opisanych jako „CF=1, standard particle”, ponieważ były wysyłane na początku transmisji. Wyniki z drugiej partii danych (atmospheric environment) są niższe średnio o 20-30%. Poszukałem jednak różnych źródeł i doszedłem do tego, dlaczego producent zastosował. Oczywiście nikt tego nie opisał w parametrach technicznych urządzenia, to by było zbyt proste.

Czujnik mierzy ilość cząsteczek pyłu na podstawie odbić promienia lasera. Oczywiście nie mierzy ich wszystkich i pewnie wyniki są odpowiednio przeliczane. Później ilość cząstek przelicza się na ich masę w 1 m³ powietrza. I to już nie jest takie jasne. Na dodatek na dole instrukcji znajduje się dopisek „Note: CF=1 should be used in the factory environment”. Według odnalezionych przeze mnie informacji producent zastosował dwa przeliczenia – a właściwie dwie metody kalibracji urządzenia:

  1. „CF=1, standard particle” podawana gdzieniegdzie jako „TSI Standard” – jest to przeliczenie na podstawie jakichś norm (amerykańskich?)
  2. „Under atmospheric environment” – okazało się, że powyższe przeliczenie nie odzwierciedla wyników uzyskiwanych przez profesjonalne urządzenia monitorujące powietrze w Chinach, więc odpowiednio skalibrowano odczyty.

Dlatego właśnie trzeba stosować dane „Atmospheric std.” bo to one są zbliżone do  polskich stacji pomiarowych.

Sterowanie PMS1003

Jak już pisałem, po podłączeniu zasilania urządzenie pracuje w trybie aktywnym. Samo mierzy i wysyła dane, zależnie od szybkości zmian zapylenia.

Pin oznaczony jako „SET” służy do kontroli trybu praca/uśpienie, ale jest fabrycznie podciągnięty do 1. Nie trzeba go używać, ponieważ pracę można kontrolować za pomocą komend.

Komendy wysyła się od bajtów 0x42, 0x4d, później 1 bajt komendy a następnie 2 bajty parametrów tej komendy:

  • komenda 0xe2 – uruchomienie odczytu w trybie pasywnym (nie używam)
  • komenda 0xe1 – zmiana trybu (parametr 0x00, 0x00 – pasywny, 0x00, 0x01 – aktywny)
  • komenda 0xe4 – uśpienie (0x00, 0x00 uśpienie, 0x00, 0x01 wybudzenie)

Na koniec dwa bajty sumy kontrolnej. Ponieważ nie jest tego dużo, obliczyłem całe ciągi znaków do wysłania – bezpośrednie komendy robiące to, co trzeba: wybudzenie, uśpienie, przejście w tryb aktywny (po wybudzeniu domyślnie jest pasywny).

I to cała filozofia PMS1003.

Plantower PMS3003 jest bardzo podobny – różni się wymiarami i długością ciągu przychodzących danych – 24 bajty zamiast 32. Nie zmienia się początek i informacje o stężeniach podanych w µg/m³, a znaki kontrolne są na ostatnich pozycjach – 22,23.

6 komentarzy to “Komunikacja z Plantower PMS1003, PMS3003”

You can Dodaj komentarz or Trackback this post.

  1. markac - 5 stycznia 2018 o 19:07

    Więc, który standard należy używać w Polsce? 😉 Z artykułu niewiele wynika, standard particle czy atmospheric environment?
    „jakichś norm” to nie jest dobre sformułowanie na artykuł, albo robimy to dobrze, albo nie 🙂
    Jeśli powstał art. na ten temat, to musiał być jakiś ważny powód, projekt? 🙂

  2. atomic77 - 5 stycznia 2018 o 22:04

    Zacytuję sam siebie: „Dlatego właśnie trzeba stosować dane „Atmospheric std.” bo to one są zbliżone do polskich stacji pomiarowych” 😉
    Ale przyznaję, niezbyt czytelnie to opisałem, chciałem tylko opisać problemy jakie sam miałem. To jednak żaden artykuł a zwykły luźny wpis w blogu, stąd „jakieś normy”. Producent nie podaje jakie, znalazłem tylko informacje o „normach amerykańskich”. Podejrzewam, że po prostu skalibrowali odczyty korzystając z urządzeń stosowanych w Chinach i USA. Nie mam pojęcia. Skupiłem się tylko na podłączeniu i na tym, że należy odczytać „atmospheric environment”. Nawet sama nazwa „atmospheric environment” jest w innym miejscu opisana jako „atmospheric std”.
    To nie był żaden projekt, po prostu kiedyś postanowiłem dla zabawy zrobić taką stację pomiarową i działa już ponad rok, a wyniki są dość zbliżone do wyników pobliskiej stacji państwowej 🙂
    Tutaj stronka z wynikami: pszow.cc8.pl

  3. markac - 5 stycznia 2018 o 22:25

    Hmmm, też taki zrobiłem 🙂
    Wzorowałem się chyba na tym artykule tworząc bibliotekę do Plantower PMS (nie chciało mi się liczyć sum kontrolnych :):
    https://github.com/fu-hsi/PMS
    CF-1 to chyba Correction Factor, ale co dokładnie znaczy, to nie wiem (nie mówię o dosłownym tłumaczeniu).
    Przestudiowałem temat dogłębnie, różne przeliczenia itp. aby skompensować pomiary w zależności od wilgotności, która podobno ma wpływ na ostateczny wynik.
    Na razie zbieram dane, żeby później porównać.
    Mam też stację GIOŚ w mieście, z czasem także porównam wyniki.
    Uwzględniasz wilgotność? Może masz ogrzewanie powietrza?

  4. atomic77 - 6 stycznia 2018 o 17:36

    Wszystko jest na githubie? Znowu na nowo odkrywałem koło 😀
    Wyniki koryguję na podstawie wilgotności – nie jest to super dokładne, ale wyniki nie odbiegają za bardzo od stacji WIOŚ, zresztą zaznaczam to na stronie i mam świadomość, że wyniki są orientacyjne. W przeciwieństwie do osób, które sprzedają takie same zestawy jak mój na allegro i zapominają o tym wspomnieć 🙂 Teraz przy wilgotności 90% wynik jest dwukrotnie zawyżony.
    Państwową stację mam kilka kilometrów ode mnie, ale funkcja korygująca pochodzi od autora strony krakow-zdroj.pl, który mieszka pomiędzy trzema takimi stacjami i obliczył zależności. Na mojej stronie z wykresami jest też odnośnik do wersji bez korekty: http://pszow.cc8.pl/?bezkorekty . Jakoś wątpię, żeby zwykłe podgrzanie powietrza bezpośrednio przed wlotem do czujnika aż tak wpływało na wynik. Wydaje mi się, że ten układ musiałby być bardziej skomplikowany niż krótka rurka z grzałką, żeby obniżyć wilgotność przed samym czujnikiem.
    Wydaje mi się, że słynne sensory Airly za 1500zł też korzystają z jakiejś korekty matematycznej.

  5. markac - 6 stycznia 2018 o 18:03

    Sam Airly podaje na stronie, że wilgotność nie ma wpływu na pomiary…;-)
    Więc pewnie nie stosują żadnej kompensacji. LookO2 tak samo, pewnie matematyczną, albo żadną.
    Te projekty za dużą kasę poszły na łatwiznę mi się wydaje i całkowicie pominęły tę kwestię.
    Wzór na kompensację od wspomnianego krakow-zdroj.pl znam z facebooka, ale on się odnosi do konkretnej sytuacji (ich czujnika wilgotności i PM).
    Sam autor podaje, że stosowanie w innych stacjach jest bezcelowe.
    Zależności można łatwo sprawdzić kiedy ma się wilgotność i pomiar PM z kilku dni.
    W końcu zapylenie nie może być większe w wilgotne dni z powodów czysto fizycznych mi się wydaje.
    Drobinki nasycone wodą po prostu opadają szybciej i powietrze jest czystsze, ale mogę się mylić…
    Jak jesteś zainteresowany tym tematem, to mogę dopisać później swoje spostrzeżenia z wyników.
    Na razie zbieram logi 🙂

  6. Adrian - 12 listopada 2018 o 15:56

    Cześć. Mam w planach budowę czujnika zapylenia na PMS3003. Czytam tutaj , że wyniki należy korygować ze względu na wilgotność. Czy wzór na korekcję matematyczną jest ogólnodostępny? Nigdzie nie mogę go znaleźć. Będę robił dwa urządzenia jedno z korekcją matematyczna, a drugie z grzaniem rury wlotowej i chciałbym porównać uzyskane wyniki. Będę wdzięczny za odpowiedź.

Napisz odpowiedź

Twój adres e-mail nie zostanie opublikowany.