Cz. 2 Budowa stacji meteorologicznej w oparciu o czujniki arduino
![Cz. 2 Budowa stacji meteorologicznej w oparciu o czujniki arduino](/data/include/img/news/1540465247.jpg)
Witam wszystkich czytelników w drugiej części artykułu poświęconego budowie i omówieniu stacji pogodowej, którą każdy konfiguruje według indywidualnych potrzeb i własnego uznania. Nie będę się rozpisywał nad tym, jakie tematy poruszyliśmy w pierwszej części. Wszystkich zainteresowanych odsyłam do niej ->
Budowa stacji meteorologicznej część 1
Aby nie przedłużać, tematem tego artykułu będą moduły, czujniki i inne elementy elektroniczne, dzięki którym będziemy mogli odebrać poszczególne bodźce ze świata zewnętrznego. Postaram się omówić jak najdokładniej każdy z nich, aby nie było wątpliwości co do podłączenia i sposobu działania.
No więc zacznijmy może od najprostszych czujników takich jak detektor wody, czujnik wilgotności gleby czy poziomu wody. Wszystkie wymienione powyżej czujniki funkcjonują w oparciu o podobną zasadę. Większość z nich ma sądy najczęściej występujące w takiej formie:
Płytki różnią się tym, że np. w czujniku wilgotności gleby odstęp między sądami jest znaczny. I tak od lewej strony mamy czujnik deszczu, pośrodku znajduje się czujnik wilgotności gleby a po prawej stronie czujnik cieczy.
Jak widać na zdjęciach zamieszczonych powyżej, sądy te są podobne. Czujnik wody posiada dwie ścieżki na płytce PCB niestykające się ze sobą i mające formę zygzaka.
Gdy pomiędzy ścieżkami pojawi się woda, rezystancja między nimi zmniejsza się, a podane napięcie na płytkę zaczyna przepływać przez nią. Płytka ta posiada osobny moduł wzmacniający sygnał, który podaje sygnał analogowy i cyfrowy (po więcej informacji zapraszam na stronę produktów).
Płytki te wysyłają sygnały analogowe, które odbieramy za pomocą ARDUINO. Napięcie zasilania płytek to 5 V a sygnał analogowy, jaki wysyłają, mieści się, w zakresie 0 do 5 V. Napięcie podane na pin analogowy ARDUINO 5 V przetwornik ADC odczytuje jako wartość 1023 a 0 V to 0.
Jak widać piny analogowe, posiadają dużą rozdzielczość sygnału, dzięki czemu pomiar jest dokładny. Aby odebrać te wartości, wystarczy komenda „analogRead(nr.pinu);”. Wyjścia cyfrowe, jakie są do dyspozycji w niektórych z powyższych czujników to wyjścia cyfrowe 0,1 gdzie 0 to 0 V a 1 to sygnał, a więc 5 V.
Na modułach tych jest wlutowany potencjometr, którym reguluje się próg, po którego przekroczeniu stan sygnału się zmieni. Regulujemy więc nim od jakiego poziomu wody czujnik poda sygnał 1.
To już chyba wszystko na temat wyżej wymienionych czujników co chciałem wam przekazać. Była to prosta rzecz prawda? No to teraz przejdziemy krok do przodu i zajmijmy się kolejnym czujnikiem, tym razem będzie to czujnik, który już wstępnie był omówiony w poprzedniej części, lecz chciałbym zwrócić na niego jeszcze małą uwagę.
Więc tak, higrometr to czujnik jak wiemy, który mierzy wilgotność powietrza. No dobrze, ale jak on działa spytacie i z czego jest zrobiony? Otóż już wam odpowiadam, mianowicie na początku higrometry wykorzystywały w swojej budowie włosy, które pod wpływem wilgoci zmieniały swoją długość. Dziś mamy do dyspozycji specjalne czujniki, które mają klasę dokładności i są kalibrowane.
Takimi właśnie czujnikami są DHT11 , DHT21 i DHT22. Czujniki te w swojej budowie nie wykorzystują już włosów a specjalne elementy elektroniczne. Zastosowane są w nich najczęściej elementy bimetaliczne, które w zależności od wilgotności zmieniają swoją długość. Rzadziej spotykane są czujniki pojemnościowe, które zawierają czynnik higroskopijny. Czujniki te raczej nie są stosowane komercyjnie ze względu na ich skomplikowany pomiar.
Ja użyłem DHT11 i jak widać na zdjęciu poniżej, po otwarciu obudowy ukazuje się nam czujnik, który posiada cztery wyprowadzenia. Z kolei z tyłu czujnika znajduje się moduł scalony, który odpowiedzialny jest za komunikację czujnika za pośrednictwem magistrali SPI jak i wykonywanie pomiarów. Do obsługi tego czujnika przez Arduino dostępna jest biblioteka, a czujnik działa na zasilanie 5 V.
Kolejnym wspomnianym czujnikiem w poprzedniej części był GP2Y1010AU0F.
Czujnik pyłu. Brzmi nietuzinkowo prawda? Jest to ciut bardziej skomplikowany czujnik od tych wymienionych wyżej, ponieważ mierzy cząsteczki pyłów o grubości sięgającej PM2.5. Lecz co oznaczają te liczby i cyfry? A więc tak pomiar bada się w oparciu o ilość pyłu zawieszonego w powietrzu wyrażonego jednostką μg/m3. Czujnik Sharpa, który przedstawiłem, może wykryć cząsteczki o wielkości 0.8μm, czyli niespełna 1/1000 mm!!! Taka specyfikacja pozwala na badanie zanieczyszczeń PM2.5! Imponujące prawda?
Ten czujnik wykrywa najmniejsze cząsteczki a te poniżej 10 μg/m3 są niebezpieczne dla organizmu, ponieważ przedostają się do płuc, a następnie do krwiobiegu przyczyniając się do różnego rodzaju chorób serca, astmy czy nawet raka! Dlatego czujnik ten zastosowałem w stacji meteorologicznej, aby badać jakość powietrza, zwłaszcza w zimie, kiedy to zaczyna się sezon grzewczy.
Czujnik ten posiada fotoemiter podczerwieni, którego promienie odbijają się od drobnych cząsteczek, a odbite światło od pyłków przechodzi przez soczewki i pada na fotodetektor. Obydwa elementy wykonawcze są umieszczone względem siebie pod odpowiednim kątem. W centralnej części czujnika znajduje się otwór, przez który przepływa powietrze. Czujnik działa na zasilanie 5V, a jego sygnał jest sygnałem analogowym o odpowiedniej charakterystyce w zależności od zanieczyszczeń:
Jak widać czujnik wysyła sygnał od 0.5 V do 4.3V, a więc nigdy nie osiąga on 5V co będzie trzeba uwzględnić w sketch-u.
Wyjścia czujnika wyglądają następująco:
Mając już schemat możemy przystąpić do podłączenia czujnika pod Arduino.
Może to później, a teraz przejdźmy dalej do kolejnego czujnika.
Czujnik światła działającym na magistralę I2C. Jest fajnym czujnikiem ze względu na łatwość obsługi i uzyskiwania pomiaru ale i także ze względu na jego charakterystykę, która jest podobna do widma ludzkiego oka a więc odbiera tylko promieniowanie widzialne dla człowieka. A mowa o czujniku BH1750. Jego zakres pomiarowy to od 0 do ponad 58000 lux. Więc pomiar uzyskujemy od razu w luxach a sam czujnik działa na zasilanie 5V.
Kolejnym czujnikiem użytym już w poprzedniej części jest czujnik BMP280. Który mierzy ciśnienie atmosferyczne jak i temperaturę. Również działa na magistralę I2C i jest łatwy w obsłudze dzięki bibliotece, lecz jego napięcie zasilania to 3,3V! Należy o tym pamiętać przy podłączaniu, ponieważ podanie wyższego napięcia uszkodzi czujnik.
Pewnie teraz pomyślicie, że parę czujników działa na tą samą magistralę I2C a ona jest w Arduino tylko jedna, dlatego można użyć tylko jednego z nich. Otóż nie. Do magistrali I2C podobnie jak do SPI można podpiąć wiele czujników więc spokojnie. Można nawet podpiąć moduł, który zamienia jak widzieliśmy w poprzedniej części wiele pinów wyświetlacza LCD (aż 8 pinów w Arduino) na tylko dwa sygnałowe SCL i SDA oprócz zasilania. To magiczne urządzenie nazywa się konwerterem, które możecie znaleźć w naszym sklepie. Lecz pamiętajcie o minusie magistrali, która działa na krótkie odległości do 3m. przewodów!
Do odbierania powyższych czynników są dedykowane czujniki, które zajmują się odczytywaniem tych zjawisk. Problem napotykamy wtedy, gdy chcemy mierzyć jakieś inne czynniki a do tych pomiarów potrzebne czujniki są drogie lub w ogóle ich nie ma. Wtedy trzeba trochę samemu pomyśleć i podedukować. Chciałem również w swoim projekcie dokonywać pomiaru opadów atmosferycznych. W związku z czym wpadłem na parę rozwiązań możliwych do skonstruowania, a mianowicie:
-
pierwszy pomysł odnosił się do czujnika poziomu cieczy, lecz jest ograniczenie w postaci jego wielkości fizycznej i wysyłaniu niejednakowych sygnałów w zależności od poziomu wody.
-
następnym pomysłem był przepływomierz. Zasada funkcjonowania prosta niewielki zbiornik, który będzie „zbierał” opady i kierował je na przepływomierz. Lecz, gdy będą małe opady to przepływomierz ich nie wykryje. No to mała modyfikacja i dodanie elektro zaworu, który co godzinę będzie się otwierał i puszczał zebraną deszczówkę na przepływomierz. Brzmi lepiej, lecz wymaga dodatkowych kosztownych elementów.
-
ostatnim i chyba najlepszym pomysłem jest zastosowanie najzwyklejszego potencjometru z pływakiem umieszczonych w jakimś zbiorniku. Minusem jest brak automatyki (ręczne wylewanie wody). Ponieważ opady godzinowe jesteśmy w stanie wyliczyć w kodzie do Arduino a wynik zresetować i napisać nowy.
Kolejnym czynnikiem, który chciałbym badać to kierunek i prędkość wiatru. Prędkość wiatru możemy obliczyć dzięki enkoderowi wraz z transoptorem szczelinowym i zamontowanym do tarczy enkodera wiatraczkiem. Dzięki zastosowaniu enkodera pozbywamy się oporów zewnętrznych. No tak, a jak określić kierunek wiatru? W sumie można bazować na tej samej zasadzie. Aby pozbyć się oporów i dokonywać pomiarów już najmniejszych ruchów powietrza. Można również użyć magnetometru, lecz jest on przewodowy a przewody będą ograniczać ruch samego czujnika a on działa na magistralę I2C, która jak dobrze wiecie i już to podkreślałem wiele razy ogranicza długość przewodów tej magistrali. Aby zobrazować powyższe typy czujników pokazuję maszt z czujnikami
.
Wiedząc już wszystko na temat czujników możemy zadecydować które z nich chcemy wykorzystać w budowie stacji meteo. Zostało jeszcze parę spraw do omówienia. Mianowicie, części programów odpowiedzialne za obsługę poszczególnych czujników, sposób wyświetlania informacji na wyświetlaczu LCD, o którym była mowa już w części pierwszej, lub sposób przesyłania danych bezprzewodowo. Te zagadnienia poruszymy w następnych częściach, do których już teraz serdecznie zapraszam.