SDS011 w zestawie z konwerterem i kabelkiem |
- pomiar PM2.5 i PM10
- zakres pomiarowy 0.0 - 999.9 µg/m3
- maksymalny prąd pracy 220mA
- napięcie zasilania 5V
- prąd uśpienia 2mA
- temperatura pracy od -10° do 50°C
- wilgotność pracy maksymalnie 70%RH
- ciśnienie robocze powietrza: 86kPa - 110kPa
- czas odpowiedzi 1s
- czas odpowiedzi na zmiany zanieczyszczeń do 10s
- błąd pomiaru maksymalnie ±15% i ±10µg/m3 (przy 25°C i 50%RH)
- komunikacja UART, PWM (na poziomie 3,3V)
- wbudowany wentylator (zasysający powietrze)
- minimalna rozdzielczość cząsteczek 0.3µg/m3
- czas życia diody laserowej do 8000 godzin (czyli z grubsza 11 miesięcy pracy ciągłej)
- rozmiary: 71x70x23mm
W przypadku potrzeby posiadania aktualnych danych o zanieczyszczeniach (czujnik pracuje jako detektor) można użyć domyślnej konfiguracji, przy której częstotliwość pomiarów wynosi raz na sekundę. Przy innych zastosowaniach, można ograniczyć częstotliwość dokonywania pomiarów i tym samym przedłużyć żywot czujnika.
Druga rzecz, to zadbanie o warunki pracy czujnika podane w specyfikacji. Do tego przydałyby się dodatkowe czujniki temperatury i wilgotności. Praca poza warunkami pracy "przekreśla" wyniki pomiarów. Z informacji użytkowników czujnika znalezionych w sieci, wynika, że przy przekroczonej wilgotności roboczej, czujnik zaczyna zawyżać wyniki pomiarów. Ograniczenie pracy do 70%RH stawia pod znakiem zapytania działanie urządzenia na zewnątrz, gdyż przy deszczu czy mgle nie będzie ono prawidłowo dokonywać pomiarów. W sieci pojawiają się wprawdzie wzmianki o osuszaniu/podgrzewaniu powietrza docierającego do czujnika, ale trudno powiedzieć na ile jest to skuteczne rozwiązanie.
Podłączenie
Pin | Opis |
---|---|
1 (NC) | nieużywany |
2 (1um) | wyjście PWM dla PM2.5 |
3 (5V) | zasilanie 5V |
4 (25um) | wyjście PWM dla PM10 |
5 (GND) | masa GND |
6 (RXD) | RX UART (3,3V) |
7 (TXD) | TX UART (3,3V) |
Uruchomienie
Aplikacja producenta
W zestawie z czujnikiem dostajemy konwerter USB oraz przewody do podłączenia czujnika z konwerterem. Dzięki temu można czujnik podłączyć bezpośrednio do komputera i tam odczytać wyniki pomiarów za pomocą programu dostarczanego przez producenta. Program można pobrać ze strony produktu. Obsługuje on różne czujniki (i mierniki) tego producenta. W paczce (rar) z programem znajdują się także sterowniki konwertera, specyfikacja czujnika, a nawet przykładowe dane pomiarowe. Zamieszczona jest także pomoc do aplikacji, niestety w języku chińskim i tu pozostaje jedynie ratowanie się, na przykład translatorem Google.
Aplikacja producenta do odczytu danych z czujnika |
Prezentacja danych (przykładowe dane producenta) |
Smog Cop
Aplikacja Smog Cop, dostępna na Android, umożliwia odczyt danych z czujnika na ekranie telefonu. Czujnik można podłączyć zdalnie przez bluetooth lub bezpośrednio z telefonem kablem OTG. Ja wybrałem to drugie rozwiązanie, jako szybsze. Docelowo wygodniejsze jest połączenie bezprzewodowe. Okazało się, że z wyjścia mikro USB w moim telefonie bez problemu można było zasilić czujnik i odczytać wyniki pomiarów.
Uruchomienie czujnika na komórce |
Dwa ekrany z wynikami pomiarów |
Arduino
Przykładowy kod pod Arduino SDS011_Simple_SoftwareSerial dołączony jest do biblioteki SDS011 z której skorzystałem. Do wyboru tej konkretnej biblioteki skłonił mnie drugi, bardziej zaawansowany przykład SDS011_Extended_SoftwareSerial. Prezentuje on bardziej praktyczne użycie czujnika i dodaje takie elementy, jak to m.in. okresowy pomiar, uśrednianie pomiarów, uwzględnianie czasu rozruchu czujnika, usypianie/wybudzanie czujnika itp. To istotne udogodnienia, jeśli nie chcemy katować czujnika i ma on dłużej nam posłużyć.
Uruchomienie pod Arduino Mini Pro |
Schemat blokowy połączeń |
#include "SDS011.h" #include <SoftwareSerial.h> // pins for SoftwareSerial #define SDS_PIN_RX 5 #define SDS_PIN_TX 6 // Setup SoftwareSerial and Sensor SoftwareSerial serialSDS(SDS_PIN_RX, SDS_PIN_TX); SDS011 sds011(serialSDS); void setup() { Serial.begin(9600); // default rate for sensor serialSDS.begin(9600); } void loop() { float pm25, pm10; // read sensor, print readings, ignore errors if (sds011.getData(&pm25, &pm10) == SDS011_STATUS_OK) { Serial.print("PM2.5: "); Serial.println(pm25, 1); Serial.print("PM10: "); Serial.println(pm10, 1); } delay(3000); }
Jak widać wyniki wyszły bardzo duże, żeby nie powiedzieć zatrważająco duże ;) Tym bardziej, że nosem niczego nie czułem. Tak więc zacząłem się zastanawiać, czy np. wyników jeszcze nie trzeba podzielić przez 10. Szczęśliwie, posiadam w domu oczyszczacz powietrza i po jego uruchomieniu w pobliżu czujnika, już po kilku minutach wartości PM spadły z grubsza o połowę.
Wyniki pomiaru na terminalu |
Wyniki po kilku minutach pracy oczyszczacza powietrza |
Opisywany czujnik użyłem w domowej stacji pogody. Skorzystałem tam z drugiego, bardziej zaawansowanego przykładu zamieszczonego w użytej bibliotece obsługującej SDS011 (4). Wprowadza on takie funkcjonalności, jak okresowe uruchamianie czujnika, kilkusekundowy rozruch wiatraczka, wykonanie kilku - kilkunastu pomiarów, obliczenie średniej z pomiarów i uśpienie czujnika. Uśrednione dane z czujnika prezentowane są na wyświetlaczu LCD i dodatkowo rejestrowane w pliku na karcie pamięci.
Aktualizacja (23-10-2019). W jednym z komentarzy pojawiała się słuszna uwaga, że zgodnie z dokumentacją napięcia na szynie RS powinno wynosić maksymalnie 3,3V . Co oznacza konieczność użycia albo konwertera poziomów, albo użycia Arduino pracującego na 3,3V. Oryginału układu ze zdjęcia niestety już nie mam, ale patrząc na opis na 99% było to Arduino zasilane 5V. W moim przypadku nic się nie spaliło i czujnik działał poprawnie. Co więcej na google można znaleźć więcej takich przypadków, np thingiverse.com/thing:3356806. Biorąc jednak pod uwagę względnie wysoką cenę czujnika oraz niewielką - konwertera, lepiej go zastosować. Przy tej okazji, spojrzałem jeszcze raz na specyfikację z załącznika opatrzoną wersją 1.2. W tabeli Interface Specification przy tych pinach nie ma mowy o napięciu 3,3V. Natomiast w wersji 1.3 specyfikacji już jest ;)
Źródła
1) Strona produktu SDS011 producenta
2) Specyfikacja producenta (v1.2)
3) Komendy sterujące
4) Biblioteka SDS011 (hafu/SDS011)
5) Specyfikacja producenta (v1.3)
Dziękuję. Rzetelny i bardzo przydatny post.
OdpowiedzUsuńNie wiem jakiej wersji Arduino Pro Mini użyłeś, ale czujnik wymaga napięcia 3.3V na porcie RS, dlatego trzeba dopisać, że przy układach Arduino mających stany 5V na RX i TX wymagany jest konwerter stanów logicznych.
OdpowiedzUsuńDzięki, jest tak jak piszesz. Używałem wersji na 5V patrząc na zdjęcie (oryginału układu nie mam) oraz biorąc pod uwagę fakt, że nie piszę nic o 3,3V na RX/TX. Wniosek tak, że miałem szczęście i bez konwertera układ też pracuje. Patrząc na układy z sieci (np https://www.instructables.com/id/Make-one-PM25-monitor-with-Arduino-UNO) to jest więcej takich przypadków.
UsuńJak pobrać program dla Windowsa ze strony producenta.
OdpowiedzUsuńna androida juz nie aktulne ?
Wpisz w google hasło "Smog Cop download" i bez problemu da się znaleźć instalkę apk. Nie sprawdzałem, jednak czy działa i czy to na pewno ta sama apka.
UsuńJakby ktoś szukał, to na Windows polecam DustViewer (https://github.com/Galch/DustViewerSharp)
OdpowiedzUsuńKod ma błędy i zwyczajnie nie działa.
OdpowiedzUsuń// Setup SoftwareSerial and Sensor
SoftwareSerial serialSDS(SDS_PIN_RX, SDS_PIN_TX);
SDS011 sds011(serialSDS);
Przepraszam, działa po zmianie na inna biblioteke
OdpowiedzUsuń