dom - Bezpieczeństwo
Czujnik stacji pogodowej na Arduino. Bezprzewodowa stacja pogodowa

Obserwowanie pogody to bardzo ekscytujące zajęcie. Postanowiłem zbudować własną stację pogodową opartą na popularnej .

Prototyp stacji pogodowej wygląda następująco:

Funkcje mojej stacji pogodowej:

  • pomiar i wyświetlanie temperatur w pomieszczeniach i na zewnątrz;
  • wyświetlanie aktualnego czasu (godziny i minuty);
  • wyświetlanie aktualnych faz księżyca i dnia księżycowego;
  • przesyłanie wyników pomiarów do komputera poprzez łącze szeregowe;
  • transmisja wyników pomiarów za pomocą protokołu MQTT za pomocą aplikacji na komputerze.


Klątwa
-plik
oprogramowanie dla (wersja z dnia 9 maja 2018 r.) - .
Jak flashować klątwa-plik na pokład Arduino, opisałem.

Mikrokontroler Arduino Nano 3.0

„Sercem” mojej stacji pogodowej jest mikrokontroler eBay'u):

Do sterowania wyświetlaniem i odpytywaniem czujników używam timera 1 Arduino, powodując przerwy o częstotliwości 200 Hz (okres - 5 ms).

Wskaźnik

Aby wyświetlić zmierzone odczyty czujnika i aktualny czas, podłączyłem się do Arduino czterocyfrowy wskaźnik LED Foryard FYQ-5643BH ze wspólnymi anodami (anody identycznych segmentów wszystkich wyładowań są łączone).
Wskaźnik zawiera cztery cyfry siedmiosegmentowe i dwie kropki oddzielające (godzinowe):

Anody wskaźnikowe są podłączone do zacisków poprzez rezystory ograniczające prąd Arduino:

wypisać 1 2 3 4
wniosek A3 A2 D3 D9

Katody segmentów są połączone z kołkami Arduino:

człon A B C D mi F G P
wniosek D7 D12 D4 D5 D6 D11 D8 D13

Segment wskaźnika zapala się, jeśli na anodzie odpowiedniego wyładowania (1) występuje wysoki potencjał, a na katodzie (0) niski potencjał.

Do wyświetlania informacji na wskaźniku używam wyświetlacza dynamicznego - w danej chwili aktywna jest tylko jedna cyfra. Aktywne wyładowania zmieniają się z częstotliwością 200 Hz (okres wyświetlania 5 ms). Jednocześnie migotanie segmentów jest niewidoczne dla oka.

Czujnik temperatury DS18x20

Aby móc zdalnie mierzyć temperaturę, podłączyłem czujnik , który umożliwia pomiar temperatury zewnętrznej w szerokim zakresie. Czujnik jest podłączony do magistrali 1-przewodowy i ma trzy wyjścia - moc ( VCC), dane ( DATA), Ziemia ( GND):

wyjście czujnika VCC DATA GND
wniosek Arduino 5 V A1 GND

Między pinami VCC I DATA Dołączyłem rezystor podciągający 4,7 kOhm.

Aby przeliczyć stopnie Celsjusza na Fahrenheita, możesz skorzystać z poniższej tabeli:

Czujnik umieściłem za oknem domu w plastikowym etui na długopis:

\

Profesjonalne stacje pogodowe wykorzystują ekran Stevensona, który chroni termometr przed bezpośrednim działaniem promieni słonecznych i zapewnia cyrkulację powietrza. Ekran Stevensona):

Czujnik ciśnienia i temperatury BMP280

Do pomiaru ciśnienia atmosferycznego tradycyjnie używa się barometrów rtęciowych i barometrów aneroidowych.

W barometr rtęciowy ciśnienie atmosferyczne równoważy ciężar słupa rtęci, którego wysokość służy do pomiaru ciśnienia:

W barometr aneroidowy stosuje się ściskanie i rozszerzanie skrzynki pod ciśnieniem atmosferycznym:

Do pomiaru ciśnienia atmosferycznego i temperatury pokojowej w mojej domowej stacji pogodowej używam czujnika - mały SMD-rozmiar czujnika 2 x 2,5 mm, oparty na technologii piezorezystancyjnej:

Szalik z czujnikiem został zakupiony na platformie handlowej eBay'u:

Czujnik jest podłączony do magistrali I2C(szczegóły kontaktu - SD/SDI, styk synchronizacyjny - SCL/SCK):

wyjście czujnika VCC GND SDI SCK
wniosek Arduino 3V3 GND A4 A5

Adafruit- akta Adafruit_Sensor.h, Adafruit_BMP280.h, Adafruit_BMP280.cpp.

Jednostki ciśnienia atmosferycznego

Czujnik poprzez funkcję czytajCiśnienie wyświetla ciśnienie atmosferyczne w paskalach. Podstawową jednostką miary ciśnienia atmosferycznego jest hektopaskal(hPa) (1 hPa = 100 Pa), którego analogiem jest jednostka niesystemowa ” milibar" (mbar) (1 mbar = 100Pa = 1hPa). Do konwersji pomiędzy powszechnie używanymi jednostkami ciśnienia poza układem " milimetr rtęci" (mmHg) i hektopaskali stosuje się następujące współczynniki:
1 hPa = 0,75006 mm Hg. Sztuka. ≈ 3/4 mmHg; 1 mmHg =1,3332 hPa ≈ 4/3 hPa.

Zależność ciśnienia atmosferycznego od wysokości nad poziomem morza

Ciśnienie atmosferyczne można przedstawić zarówno w formie bezwzględnej, jak i względnej.
Absolutne ciśnienie QFE(Język angielski) ciśnienie absolutne) to aktualne ciśnienie atmosferyczne, które nie uwzględnia korekty nad poziomem morza.
Wraz ze wzrostem wysokości o 1 m ciśnienie atmosferyczne spada o około 1 hPa:

Wzór barometryczny pozwala określić korektę odczytów barometru w celu uzyskania ciśnienia względnego (w mmHg):
$\Delta P = 760 \cdot (1 - (1 \over (10^ ( (0.0081350 \cdot H) \over (T + 0.00178308 \cdot H) ))))$ ,
gdzie $T$ to średnia temperatura powietrza w skali Rankina, ° Ra, $H$ - wysokość nad poziomem morza, stopy.
Zamiana stopni Celsjusza na stopnie Rankine’a:
$^(\circ)Ra = (^(\circ)C \cdot 1.8) + 491,67 $
Wzór barometryczny służy do niwelacji barometrycznej - wyznaczania wysokości (z błędem 0,1 - 0,5%). Wzór nie uwzględnia wilgotności powietrza i zmiany przyspieszenia grawitacyjnego wraz z wysokością. W przypadku małych różnic wysokości tę wykładniczą zależność można z wystarczającą dokładnością przybliżyć za pomocą zależności liniowej.
Ciśnienie względne QNH(Język angielski) ciśnienie względne, Wysokość morska kodu Q) to ciśnienie atmosferyczne dostosowane do średniego poziomu morza. Średni poziom morza, MSL) (Dla JEST i temperatura 15 stopni Celsjusza) i jest wstępnie ustawiany z uwzględnieniem wysokości, na której znajduje się stacja pogodowa. Można się tego dowiedzieć z danych służb pogodowych, odczytów ze skalibrowanych przyrządów w miejscach publicznych, na lotniskach (z raportów METAR), z Internetu.
Na przykład dla pobliskiego lotniska Homel ( UMGG) Widzę aktualny raport o pogodzie METAR na ru.allmetsat.com/metar-taf/russia.php?icao=UMGG:
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD//NOSIG ,
Gdzie Q1014- ciśnienie QNH na lotnisku wynosi 1014 hPa.
Historia raportów METAR dostępne na stronie lotniczejwxchartsarchive.com/product/metar.
Dla normalnego względnego ciśnienia powietrza QNH przyjmuje się ciśnienie 760 mmHg. Sztuka. lub 1013,25 hPa (w temperaturze 0°С, na 45° szerokości geograficznej północnej lub południowej półkuli).
Ustawiłem ciśnienie dla barometru aneroidowego QNH za pomocą śruby regulacji czułości:

Prognoza pogody

Analiza zmian ciśnienia pozwala na zbudowanie prognozy pogody, a jej dokładność jest tym większa, im gwałtowniejsze są zmiany ciśnienia. Na przykład stara praktyczna zasada żeglarzy mówi, że spadek ciśnienia o 10 hPa (7,5 mm Hg) w ciągu 8 godzin wskazuje na zbliżanie się silnego wiatru.

Skąd bierze się wiatr? Powietrze przepływa do środka obszaru niskiego ciśnienia, tworząc wiatr- poziomy ruch powietrza z obszarów o podwyższonym ciśnieniu do obszarów o obniżonym ciśnieniu (wysokie ciśnienie atmosferyczne wciska masy powietrza w obszary o niskim ciśnieniu atmosferycznym). Jeśli ciśnienie jest bardzo niskie, wiatr może osiągnąć silny wiatr burze. Jednocześnie w okolicy zredukowany ciśnienie (obniżenie ciśnienia lub cyklon), ciepłe powietrze unosi się i tworzy chmury, które często przynoszą deszcz Lub śnieg.

W meteorologii za kierunek wiatru przyjmuje się kierunek, z którego wieje wiatr:

Kierunek ten sprowadza się do ośmiu punktów.

Do przewidywania pogody często wykorzystuje się algorytm na podstawie ciśnienia barometrycznego i kierunku wiatru. Zambrettiego.

Czujnik wilgotności

Do określenia wilgotności względnej powietrza wykorzystuję moduł DHT11(zakupiony na targu eBay'u):

Czujnik wilgotności DHT11 posiada trzy wyjścia - zasilanie ( + ), dane ( na zewnątrz), Ziemia ( - ):

wyjście czujnika + na zewnątrz -
wniosek Arduino 5 V D10 GND

Do pracy z czujnikiem korzystam z biblioteki z Adafruit- akta DHT.h, DHT.cpp.

Wilgotność powietrza charakteryzuje ilość pary wodnej zawartej w powietrzu. Wilgotność względna pokazuje procentową zawartość wilgoci w powietrzu w stosunku do maksymalnej możliwej ilości przy aktualnej temperaturze. Służy do pomiaru wilgotności względnej :

Dla człowieka optymalny zakres wilgotności powietrza wynosi 40…60%.

Zegar czasu rzeczywistego

Moduł wykorzystałem jako zegar czasu rzeczywistego RTC DS1302(szalik z zegarkiem został zakupiony na platformie handlowej eBay'u):

Moduł DS1302łączy się z autobusem 3-przewodowy. Aby używać tego modułu w połączeniu z Arduino rozwinęła się biblioteka iarduino_RTC ( z iarduino.ru).

Płytka z modułem DS1302 ma pięć pinów, które podłączyłem do pinów płytki Arduino Nano:

wniosek RTC VCC GND RST CLK DATA
wniosek Arduino 5 V GND D2 D1 D0

Aby utrzymać prawidłowe odczyty zegara przy wyłączonym zasilaniu, włożyłem baterię do gniazda na płycie CR2032.

Dokładność mojego modułu zegara okazała się niezbyt wysoka - zegar śpieszy się o około jedną minutę w ciągu czterech dni. Dlatego resetuję minuty do „zera”, a godzinę do najbliższej, przytrzymując przycisk podłączony do pinu A0 Arduino po włączeniu zasilania stacji pogodowej. Po inicjalizacji pin A0 służy do transmisji danych poprzez połączenie szeregowe.

Przesyłanie danych do komputera i praca poprzez protokół MQTT

Aby przesłać dane poprzez połączenie szeregowe do Arduinołączy USB-UART przetwornik:

Wniosek Arduino używany do przesyłania danych w formacie 8N1(8 bitów danych, bez parzystości, 1 bit stopu) przy 9600 bps. Dane przesyłane są w pakietach, których długość wynosi 4 znaki. Transfer danych odbywa się w „ trochę huk", bez użycia sprzętowego portu szeregowego Arduino.

Format przesyłanych danych:

Parametr 1. bajt 2. bajt Trzeci bajt 4. bajt
temperatura na zewnątrz o spacja lub minus dziesiątki stopni lub przestrzeń jednostki stopni
temperatura pokojowa I spacja lub minus dziesiątki stopni lub przestrzeń jednostki stopni
Ciśnienie atmosferyczne P setki mm r. Sztuka. dziesiątki mmHg jednostki mmHg Z.
wilgotność względna H przestrzeń dziesiątki procent lub spacja jednostki procentowe
Obecny czas dziesiątki godzin jednostki godzin dziesiątki minut jednostki minut

MQTT

Golang aplikacja kliencka protokołu MQTT, przesyłanie informacji otrzymanych ze stacji pogodowej na serwer ( MQTT-pośrednik) :

Praca umożliwia utworzenie konta z bezpłatnym planem taryfowym" " (limit: 10 połączeń, 10 Kb/s):

Aby monitorować odczyty stacji pogodowej, możesz użyć Android-aplikacja :

Odżywianie

Do zasilania stacji pogodowej używam ładowarki ze starego telefonu komórkowego Motoroli, wytwarzający napięcie 5 V o prądzie do 0,55 A i podłączony do styków 5 V(+) i GND (-):

Do zasilania można także wykorzystać baterię 9 V podłączoną do styków. VIN(+) i GND (-).

Obsługa stacji pogodowej

Podczas uruchamiania czujniki są inicjowane i testowane.

W przypadku braku czujnika DS18x20 przy braku czujnika wyświetla się błąd "E1". - błąd „E3”.

Następnie rozpoczyna się cykl pracy stacji pogodowej:

  • pomiar i wyświetlanie temperatury zewnętrznej;
  • pomiar i wyświetlanie temperatury pokojowej;
  • pomiar i wyświetlanie ciśnienia atmosferycznego oraz jego trendu;
  • pomiar i wyświetlanie wilgotności względnej powietrza;
  • wyświetlanie aktualnego czasu;
  • wyświetlanie fazy księżyca i dnia księżycowego.


Film przedstawiający działanie mojej stacji pogodowej jest dostępny na moim -kanał: https://youtu.be/vVLbirO-FVU

Wyświetlacz temperatury

Podczas pomiaru temperatury wyświetlane są dwie cyfry temperatury, a dla temperatury ujemnej znak minus (z symbolem stopnia w skrajnej prawej cyfrze);
w przypadku temperatury zewnętrznej na górze wyświetlany jest znak stopnia:


dla temperatury pokojowej - poniżej:

Wyświetlacz ciśnienia

Podczas pomiaru ciśnienia wyświetlane są trzy cyfry ciśnienia w mmHg (z symbolem „ P" w skrajnym prawym miejscu):

Jeśli ciśnienie gwałtownie spadnie, zamiast symbolu „ P„Symbol” jest wyświetlany na skrajnej prawej cyfrze L„jeśli gwałtownie urósł, to” H„. Kryterium ostrości zmiany wynosi 8 mm Hg w ciągu 8 godzin:

Ponieważ moja stacja pogodowa wyświetla ciśnienie bezwzględne ( QFE), wówczas odczyty okazują się nieco zaniżone w stosunku do informacji zawartych w raporcie METAR(co zapewnia QNH) (14 UTC, 28 marca 2018 r.):

Stosunek ciśnień (wg ATIS) wyniosło (1015 \ponad 998) = 1,017 USD. Wysokość lotniska w Homelu (kod ICAO UMGG) nad poziomem morza wynosi 143,6 m. Temperatura wg ATIS wyniosła 1° C.

Odczyty z mojej stacji pogodowej prawie pokrywały się z ciśnieniem bezwzględnym QFE według informacji ATIS!

Maksymalne/minimalne ciśnienie ( QFE), zarejestrowane przez moją stację pogodową przez cały okres obserwacji:

Wyświetlacz wilgotności względnej

Wilgotność względna powietrza wyświetlana jest w procentach (symbol procentu jest wyświetlany w dwóch prawych cyfrach):

Wyświetl aktualny czas

Aktualna godzina wyświetlana jest na wskaźniku w formacie „GG:MM”, ​​przy czym dwukropek oddzielający miga raz na sekundę:

Wyświetlanie faz księżyca i dnia księżycowego

Pierwsze dwie cyfry wskaźnika informują o aktualnej fazie księżyca, a dwie kolejne - o aktualnym dniu księżycowym:

Księżyc ma osiem faz (podano nazwy angielskie i rosyjskie (na niebiesko - niedokładne)):

Fazy ​​są wyświetlane na wskaźniku za pomocą piktogramów:

faza piktogram
rosnący sierp (półksiężyc)
zanikający sierp (półksiężyc)

Przesyłanie danych do komputera

Jeśli podłączysz stację pogodową za pomocą USB-UART konwerter (na przykład oparty na mikroukładzie CP2102), połączony z USB- port komputera, można wykorzystać program terminalowy do obserwacji danych przesyłanych przez stację pogodową:

Rozwijałem się w języku programowania golang program prowadzący rejestr obserwacji pogody i przesyłający dane do serwisu i można je oglądać na Android-smartfon korzystający z aplikacji :

Na podstawie dziennika obserwacji pogody można np. zbudować wykres zmian ciśnienia atmosferycznego:
przykład wykresu z zauważalnym ciśnieniem minimalnym


przykład wykresu z niewielkim wzrostem ciśnienia

Planowane ulepszenia:

  • dodanie czujników kierunku i prędkości wiatru

Na stacjach pogodowych do pomiaru prędkości wiatru stosuje się anemometr z trzema czaszami (1), a do określenia kierunku wiatru stosuje się wiatrowskaz (2):

Służy również do pomiaru prędkości wiatru anemometry z gorącym drutem(Język angielski) anemometr z gorącym drutem). Jako podgrzewany drut możesz użyć żarnika wolframowego z żarówki z potłuczonym szkłem. W produkowanych przemysłowo anemometrach z gorącym drutem czujnik jest zwykle umieszczony na rurze teleskopowej:

Zasada działania tego urządzenia polega na tym, że ciepło jest odbierane z elementu grzejnego w wyniku konwekcji przez przepływ powietrza - wiatr. W tym przypadku opór żarnika zależy od temperatury żarnika. Prawo zmiany rezystancji włókna $R_T$ w zależności od temperatury $T$ ma postać:
$R_T = R_0 \cdot (1 + (\alfa \cdot (T - T_0)))$ ,
gdzie $R_0$ to opór żarnika w temperaturze $T_0$, $\alpha$ to temperaturowy współczynnik oporu (dla wolframu $\alpha = 4,5\cdot(10^(-3) (^(\circ)( C^(-1))))$).

Wraz ze zmianą prędkości przepływu powietrza temperatura zmienia się przy stałym prądzie żarnika (anemometr stałoprądowy, ang. CSW). Jeśli temperatura elementu grzejnego będzie utrzymywana na stałym poziomie, wówczas prąd płynący przez element będzie proporcjonalny do prędkości przepływu powietrza (anemometr stałotemperaturowy, ang.). wezwanie do działania).

Ciąg dalszy nastąpi

W wolnej chwili i tym razem napisałem instrukcję wykonania małej stacji pogodowej. Będzie pełnić funkcję zegara z datą i pokazywać temperaturę wewnętrzną i zewnętrzną. Jako główny kontroler wykorzystamy Arduino UNO, ale sprawdzi się także inna płytka z Atmega328p na pokładzie. Do wyświetlania używamy ekranu graficznego WG12864B. Podłączymy także dwa czujniki temperatury ds18b20. Jedna przebywa w pomieszczeniu, druga zostanie wyprowadzona na zewnątrz. Zaczynajmy.

W procesie wytwarzania domowych produktów będziemy potrzebować:

Arduino UNO (lub dowolna inna płytka kompatybilna z Arduino)
- Ekran graficzny WG12864B
- czujnik temperatury ds18b20, 2 szt.
- Zasilanie 6 – 12 V
- Rezystory 4,7 Kom 0,25 W, 2 szt.
- Rezystory 100 omów 0,25 W
- Komora baterii na 4 baterie typu „pinky” AAA
- Pudełko na naboje SEGA
- Taśma elektryczna
- Podłączenie przewodów
- Płytka drukowana
- Guziki
- Nóż biurowy
- Lutownica
- Lut, kalafonia
- Taśma dwustronna

Krok 1 Przygotuj WG12864B3.
Tych, którzy nie mieli wcześniej styczności z ekranami, może przerazić duża ilość modyfikacji pozornie identycznych ekranów. Pozwól, że trochę wyjaśnię. Większość ekranów tego typu działa na chipach ks0107/ks0108. Wszystkie ekrany można podzielić na 4 typy:

Opcja A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T

Opcja B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Displays AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, QY-12864 F , TM12864L-2, 12864J-1

Opcja C: Shenzhen Jinghua Displays Co Ltd. JM12864

Opcja D: Wintek-Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS19264/HD61202

Wyglądają prawie tak samo. Ale ich piny połączeniowe są różne. Wybrałem i polecam Ci WG12864B3 V2.0, ale jeśli otrzymałeś inny ekran lub po prostu nie masz go pod ręką, możesz to łatwo ustalić, korzystając z tabeli:

Krótko charakterystyka:

W Internecie istnieje wiele różnych schematów połączeń i wszystkie wydają się działać. Rzecz w tym, że istnieją nie tylko różne ekrany, ale także dwa sposoby ich łączenia: szeregowy i równoległy. Korzystając z połączenia poprzez port szeregowy potrzebujemy jedynie 3 wyjść mikrokontrolera. Z równoległym minimum 13. Wybór w tym przypadku jest oczywisty, Arduino i tak nie ma wielu pinów. W przypadku połączenia równoległego schemat połączeń wygląda następująco:

W przypadku połączenia szeregowego, którego będziemy używać, schemat wygląda następująco:

WG12864B – Arduino UNO 1 (GND) – GND 2 (VCC) – +5V 4 (RS) – 10 5 (R/W) – 11 6 (E) – 13 15 (PSB) – GND 19 (BLA) – przez rezystor 100 omów - +5 V 20 (BLK) – GND

Aby wyregulować kontrast, na ekranie musi znajdować się potencjometr. Istnieją ekrany bez niego, ale teraz jest to rzadkie:

Potrzebny jest rezystor 100 omów, aby napięcie 5 woltów nie spowodowało przypadkowego spalenia diod podświetlających.

Krok 2 Wykonanie ciała.
W tym przypadku weź pudełko z kasety konsoli Sega. Jeśli nie znajdziesz tego pudełka pod ręką, możesz skorzystać z innego etui. Najważniejsze, że pasuje do niego ekran i Arduino.

Odetnij przezroczystą folię na górze pudełka, aby nie pozostały żadne kawałki:

Następnie za pomocą noża biurowego wycięliśmy okienko o wymiarach 37x69 na ekran.

Z tyłu wzdłuż krawędzi wycięcia przyklejamy taśmę dwustronną, najlepiej czarną:

Z taśmy usuwamy papier ochronny i przyklejamy na niego nasz ekran:

Z zewnątrz powinno to wyglądać tak:

Poniżej ekranu, również za pomocą taśmy dwustronnej, mocujemy Arduino, po uprzednim wykonaniu wycięć na port USB i gniazdo zasilania:

Wycięcia na gniazda Arduino należy wykonać po obu stronach pudełka, aby można było je swobodnie zamknąć:

Krok 3 Czujniki temperatury.
Będziemy używać cyfrowych czujników temperatury DS18B20. Stosując je uzyskujemy większą dokładność pomiaru, błąd nie większy niż 0,5°C, w szerokim zakresie temperatur -55...+125°C. Dodatkowo czujnik jest cyfrowy i sam wykonuje wszystkie obliczenia, a Arduino po prostu otrzymuje gotowe odczyty. Podłączając ten czujnik nie zapomnij o rezystorze podciągającym o wartości znamionowej 4,7 KOhm, pomiędzy stykami DQ i VDD. Możliwych jest także kilka opcji połączenia. Przy zewnętrznym zasilaniu moim zdaniem najlepszą opcją będzie to co zastosujemy:

Dla dowolnej opcji zasilania czujniki są połączone równolegle:

Na małej tabliczce umieścimy czujnik temperatury wewnętrznej wraz z dwoma przyciskami, za pomocą których ustawimy godzinę i datę zegara:

Podłączamy wspólny przewód obu przycisków do GND, przewód od pierwszego przycisku do A0, od drugiego do A1.
Przyklejamy go taśmą dwustronną obok Arduino:

Lepiej wybrać czujnik, który ma być umieszczony na zewnątrz pomieszczenia, w metalowej, pyło- i wodoodpornej obudowie:

Oblicz drut o wymaganej długości, aby móc zawiesić czujnik za oknem, najważniejsze jest to, że nie jest on dłuższy niż 5 metrów, jeśli potrzebujesz dłuższej długości, będziesz musiał zmniejszyć wartość podciągnięcia rezystor.

Podłączamy przewód z magistrali danych DQ obu czujników do pinu 5 Arduino.
VDD - +5 Arduino.
GND – GND Arduino.

Krok 4 Odżywianie.
Do zasilania można użyć zasilacza o napięciu od 6 do 12 woltów. Na końcu przewodu zasilającego przylutuj wtyczkę odpowiednią do gniazda zasilania Arduino:

Możesz też umieścić komorę baterii w etui na cztery baterie AAA. I podłącz przewód dodatni z przedziału do Vin Arduino, a przewód ujemny do GND.

Krok 5 Przygotuj środowisko programistyczne.
Najpierw musisz pobrać i zainstalować Arduino IDE z oficjalnej strony internetowej

Dodaj także do dwóch bibliotek potrzebnych do szkicu. OneWire – wymagany do komunikacji z czujnikami ds18b20:

U8glib – służy do wyświetlania informacji na ekranie:

Pobieranie bibliotek. Następnie rozpakowujemy archiwa i przenosimy zawartość archiwów do folderu „biblioteki”, znajdującego się w folderze z zainstalowanym Arduino IDE. Biblioteki można także dodawać poprzez Arduino IDE. W tym celu bez rozpakowywania archiwów należy uruchomić Arduino IDE i z menu wybrać Sketch - Connect Library. Na samej górze rozwijanej listy wybierz „Dodaj bibliotekę Zip”. Wskazujemy lokalizację pobranych archiwów. Po wykonaniu wszystkich kroków należy zrestartować Arduino IDE.

Krok 6 Edycja szkicu.
Czujniki temperatury działają w oparciu o protokół One Wire i posiadają unikalny adres dla każdego urządzenia – kod 64-bitowy. Nie zaleca się dodawania do szkicu poleceń wyszukiwania czujników. Nie ma potrzeby ładowania Arduino za każdym razem, gdy czujniki się psują. Dlatego najpierw, po złożeniu wszystkiego, wgrywamy szkic do Arduino, znajdującego się w menu Plik - Przykłady - Temperatura w Dallas - OneWireSearch. Następnie uruchom Narzędzia - Monitor portów. Arduino musi znaleźć nasze czujniki, zapisać adresy i odczyty temperatury. Adresy te należy zapisać lub po prostu gdzieś skopiować. Teraz otwórz szkic Ard_Tic_Tak_WG12864B_2_x_Term_Serial i poszukaj linii:

Bajt adres1=(0x28, 0xFF, 0x75, 0x4E, 0x87, 0x16, 0x5, 0x63);//adres wewnętrzny bajt adres2=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97);//adres zewnętrzny czujnik

Zastępujemy adresy odpowiednich lokalizacji czujników naszymi adresami.
Nasz zegar nie korzysta z modułu RTC (zegar czasu rzeczywistego), dlatego konieczne jest dostosowanie częstotliwości taktowania. Dla wygody odkomentuj linię (na ekranie pojawią się sekundy):

//u8g.setPrintPos(44, 50); u8g.print(sek); // Wyprowadzanie sekund w celu kontrolowania poprawności ruchu

Ustaw prawidłowy czas za pomocą monitora portu. W tym celu należy otworzyć monitor portu, poczekać na zakończenie wstępnych pomiarów temperatury i wprowadzić aktualną datę i godzinę w formacie „dzień, miesiąc, rok, godziny, minuty, sekundy”. Żadnych spacji, liczby oddzielone przecinkami lub kropkami.

Jeśli zegar się spieszy, zmieniamy wartość na większą, polecam poeksperymentować z przyrostami co 100 jednostek. Jeśli jestem w tyle, powinienem zmniejszyć wartość w linii:

If (micros() - prevmicros >494000) ( // zmień na coś innego, aby poprawić, było to 500000

Empirycznie określamy liczbę, przy której zegar chodzi dość dokładnie. Aby określić dokładność ruchu, musisz wyświetlić sekundy. Po dokładnej kalibracji liczby sekundy można skomentować i tym samym usunąć z ekranu.
Prześlij szkic.

Chciałem mieć własną stację pogodową, która przesyła odczyty z czujników na publiczną mapę monitoringu (wyszukiwanie w Google w 5 sekund). Okazało się, że nie jest to takie trudne, jak się wydaje. Przyjrzyjmy się, co zostało zrobione.

Do tej akcji wziąłem sobie do tego Arduino Uno i Ethernet Shield w5100. Wszystko to zostało zamówione z Chin na Aliexpress.

Zamówiłem tam również czujniki: DHT22, DHT11, DS18B20, BMP280 (w planach są też czujniki gazu i dymu...)

Po przeszukaniu forów, Google, Yandex, znalazłem dobrą wersję szkicu - https://student-proger.ru/2014/11/meteostanciya-2-1/

Tam w komentarzach osoba zamieściła gotowy szkic z czujnikami światła i gazu. Wziąłem je za podstawę.

Na tych szkicach nie było wsparcia dla czujnika ciśnienia 280-tego, rozmawialiśmy z autorem, wymienił 180 na 280. Wszystko działało idealnie (wielkie dzięki mu za to)

Poniżej znajduje się przykład ostatecznego szkicu, który wymyśliłem.

Aktualnie mam podłączone czujniki:
DHT22 - 1 szt.
DHT11 - 1 szt.
BMP280 - 1 szt.
DS18B20 - 2 szt.

UWAGA! Przed przesłaniem szkicu nie zapomnij zmienić adresu MAC urządzenia, aby nie przeszkadzać innym (na przykład weź adres Mac swojego telefonu komórkowego i zmień w nim ostatnie litery/cyfry, co nie będzie „przeszkadzać ” Twoja sieć lokalna!

Przybliżony schemat połączeń (zdjęcie zaczerpnięte z tego szkicu w Internecie):

Ze względów technicznych nie mogę zamieścić szkicu bezpośrednio tutaj. Umieściłem to w archiwum. Link do niego znajduje się w wierszu powyżej.

Jak widać odczyty są i działają prawidłowo, dla przykładu wrzucę kilka zrzutów ekranu z moich czujników:

Zaleca się pobranie oprogramowania przed podłączeniem komponentów, aby mieć pewność, że płyta działa. Po złożeniu można go ponownie flashować, płytka powinna być płynnie flashowana. W projektach z mocnymi odbiornikami w obwodzie zasilania 5 V płytki (adresowalne paski LED, serwa, silniki itp.) konieczne jest doprowadzenie zewnętrznego zasilania 5 V do obwodu przed podłączeniem Arduino do komputera, ponieważ USB nie zapewni wymagany prąd, jeśli np. listwa tego wymaga. Może to spowodować przepalenie diody zabezpieczającej na płycie Arduino. Instrukcję pobierania i przesyłania oprogramowania sprzętowego można znaleźć pod spoilerem w następnej linii.

Zawartość folderów w archiwum

  • biblioteki– biblioteki projektów. Zastąp istniejące wersje
  • oprogramowanie sprzętowe– oprogramowanie dla Arduino
  • schematy– schematy połączeń komponentów

Dodatkowo

  • Jak pokazał eksperyment, czujnik temperatury na zewnątrz obudowy pokazuje o 0,5 stopnia mniej niż wewnątrz! Trzeba lepiej rozmieścić elektronikę, odprowadzić i osłonić ciepło z elementów grzejnych...

  • Jeśli wyświetlacz jest zbyt ciemny/na białym tle
    Na płycie sterownika wyświetlacza (do której podłączone są przewody) znajduje się pokrętło kontrastu, za jego pomocą można dostosować kontrast do pożądanego. Ponadto kontrast zależy od kąta patrzenia wyświetlacza (jest to wyświetlacz LCD) i można ustawić wyświetlacz tak, aby wyświetlał wyraźny obraz nawet pod kątem „wyświetlacz na poziomie pępka, patrząc z góry”. A kontrast mocno zależy od zasilania: od 5V wyświetlacz pokazuje tak wyraźnie i jasno jak to tylko możliwe, natomiast przy zasilaniu z USB przez Arduino napięcie wyniesie około 4,5V (część z niego spada na diodę zabezpieczającą wzdłuż linii USB ), a wyświetlacz nie jest już tak jasny. Dostosuj moc wyjściową za pomocą pokrętła z zewnętrznym zasilaniem od 5V!

  • Jeśli czujnik CO2 nie działa prawidłowo (informacje od Jewgienija Iwanowa)
    Cóż, w przykładach znajdują się szkice do kalibracji w folderze biblioteki czujników. można go także uruchomić, zwierając na ślepo złącze „HD” do masy na ponad 7 sekund.
    Oczywiście nie musisz tego robić bezpośrednio na zewnątrz, gdy jest zimno… możesz po prostu napełnić butelkę świeżym powietrzem z czujnikiem w środku i zamknąć ją. Kalibracja trwa co najmniej 20 minut.
    Domyślnie czujnik ma włączoną autokalibrację, która odbywa się codziennie, a jeśli czujnik używany jest w niewentylowanym pomieszczeniu, to kalibracja ta szybko przesuwa wartości poza normę, dlatego należy ją wyłączyć.
    Dokumentacja.

  • Automatyczna kalibracja czujnika CO2 jest wyłączone na szkicu!

  • Jeśli masz Czujnik BME280 nie działa, najprawdopodobniej jego adres jest inny. W projekcie wykorzystano bibliotekę Adafruit_BME280, która nie posiada osobnej funkcji zmiany adresu, dlatego adres ustawiany jest ręcznie w pliku biblioteki Adafruit_BME280.h niemal na samym początku pliku ( znajduje się w folderze Adafruit_BME280 w folderze bibliotek, powinieneś go tam zainstalować), mój moduł miał adres 0x76. Jak mogę znaleźć adres mojego modułu BME280? Istnieje specjalny szkic zwany skanerem i2c. Możesz wpisać w Google, możesz. Flashujesz ten szkic, otwierasz port i otrzymujesz listę adresów urządzeń podłączonych do magistrali i2c. Aby inne moduły Ci nie przeszkadzały, możesz je wyłączyć i pozostawić tylko BME280. Otrzymany adres wskazujemy w bibliotece, zapisujemy plik i ładujemy firmware zegara pogodowego. Wszystko!

  • Jeśli zegar jest powolny, problem najprawdopodobniej tkwi w zasilaniu obwodu. Jeśli problem nie zniknie po zmianie zasilacza na lepszy, podłącz kondensator do zasilania modułu RTC (wlutuj bezpośrednio na płytkę na VCC i GND): zawsze ceramiczny, 0,1-1 µF (oznaczenie 103 lub 104 , patrz tabela znakowania). Można także dostarczyć elektrolit (6,3 V, 47-100 uF)

Ustawienia oprogramowania

#define RESET_CLOCK 0 // resetuje zegar podczas ładowania oprogramowania (dla modułu z niewymienną baterią). Nie zapomnij wpisać 0 i sflashuj go ponownie! #define SENS_TIME 30000 // czas aktualizacji odczytów czujnika na ekranie, milisekundy #define LED_MODE 0 // Typ diody RGB: 0 - katoda główna, 1 - anoda główna #define LED_BRIGHT 255 // Jasność diody CO2 (0 - 255) # zdefiniuj BLUE_YELLOW 1 // kolor żółty zamiast niebieskiego (1 tak, 0 nie), ale ze względu na możliwości połączenia żółty nie jest tak jasny #define DISP_MODE 1 // wyświetlacz w prawym górnym rogu: 0 - rok, 1 - dzień tygodnia, 2 - sekundy #define WEEK_LANG 1 // język dnia tygodnia: 0 - angielski, 1 - rosyjski (transliterowany) #define DEBUG 0 // wyświetl dziennik inicjalizacji czujnika przy uruchomieniu #define PRESSURE 1 // 0 - wykres ciśnienia, 1 - wykres prognozy opadów (zamiast ciśnienia). Nie zapomnij dostosować limitów wykresu // limitów wyświetlania wykresów #define TEMP_MIN 15 #define TEMP_MAX 35 #define HUM_MIN 0 #define HUM_MAX 100 #define PRESS_MIN -100 #define PRESS_MAX 100 #define CO2_MIN 300 #define CO2_MAX 2000

Któregoś dnia spacerując po mieście zauważyłem, że otwarto nowy sklep z elektroniką radiową. Po wejściu do niego znalazłem dużą liczbę nakładek dla Arduino, ponieważ... Miałem w domu Arduino Uno i Arduino Nano i od razu przyszedł mi do głowy pomysł zabawy z nadajnikami sygnału na odległość. Zdecydowałem się kupić najtańszy nadajnik i odbiornik na 433 MHz:

Nadajnik sygnału.


Odbiornik sygnału.

Po nagraniu prostego szkicu transmisji danych (przykład wzięty stąd) okazało się, że urządzenia nadawcze mogą być całkiem odpowiednie do przesyłania prostych danych, takich jak temperatura, wilgotność.

Nadajnik ma następujące cechy:
1. Model: MX-FS - 03 V
2. Zasięg (w zależności od obecności obiektów blokujących): 20-200 metrów
3. Napięcie robocze: 3,5 -12 V
4. Wymiary modułu: 19*19 mm
5. Modulacja sygnału: AM
6. Moc nadajnika: 10mW
7. Częstotliwość: 433 MHz
8. Wymagana długość anteny zewnętrznej: 25cm
9. Łatwe podłączenie (tylko trzy przewody): DATA ; VCC; Ziemia.

Charakterystyka modułu odbiorczego:
1. Napięcie robocze: DC 5 V
2. Prąd: 4mA
3. Częstotliwość robocza: 433,92 MHz
4. Czułość: - 105dB
5. Wymiary modułu: 30*14*7 mm
6. Wymagana antena zewnętrzna: 32 cm.

Internet podaje, że zasięg transmisji informacji przy prędkości 2Kb/s może sięgać nawet 150m. Sam tego nie sprawdzałem, ale w dwupokojowym mieszkaniu jest to akceptowane wszędzie.

Sprzęt do domowej stacji pogodowej

Po kilku eksperymentach zdecydowałem się podłączyć czujnik temperatury, wilgotności i nadajnik do Arduino Nano.


Czujnik temperatury DS18D20 podłącza się do Arduino w następujący sposób:

1) GND do minusa mikrokontrolera.
2) DQ przez rezystor podciągający do masy i do pinu D2 Arduino
3) Vdd do +5 V.

Moduł nadajnika MX-FS - 03V zasilany jest napięciem 5 V, wyjście danych (ADATA) jest podłączone do pinu D13.

Do Arduino Uno podłączyłem wyświetlacz LCD i barometr BMP085.


Schemat podłączenia do Arduino Uno

Odbiornik sygnału jest podłączony do pinu D10.

Moduł BMP085 - cyfrowy czujnik ciśnienia atmosferycznego. Czujnik umożliwia pomiar temperatury, ciśnienia oraz wysokości nad poziomem morza. Interfejs połączenia: I2C. Napięcie zasilania czujnika 1,8-3,6 V

Moduł podłącza się do Arduino w taki sam sposób, jak inne urządzenia I2C:

  • VCC - VCC (3,3 V);
  • GND - GND;
  • SCL - do pinu analogowego 5;
  • SDA - do pinu analogowego 4.
  • Bardzo niski koszt
  • Zasilanie i wejścia/wyjścia 3–5 V
  • Oznaczanie wilgotności 20-80% z dokładnością 5%.
  • Wykrywanie temperatury 0-50 stopni. z dokładnością 2%.
  • Częstotliwość odpytywania nie większa niż 1 Hz (nie więcej niż raz na 1 sekundę)
  • Wymiary 15,5 mm x 12 mm x 5,5 mm
  • 4 piny z odstępem między pinami 0,1 cala

DHT ma 4 piny:

  1. Vcc (zasilanie 3-5 V)
  2. Wyjście danych - Wyjście danych
  3. Nieużywany
  4. Ogólny

Łączy się z D8 Arduino.

Część oprogramowania domowej stacji pogodowej

Moduł nadawczy mierzy i przesyła temperaturę co 10 minut.

Poniżej znajduje się program:

/* Wersja szkicu 1.0 Wysyłaj temperaturę co 10 minut. */ #include #include #include #define ONE_WIRE_BUS 2 //Pin do podłączenia czujnika Dallas OneWire oneWire(ONE_WIRE_BUS); DallasCzujniki temperatury(&oneWire); Adres urządzenia wewnątrzTermometr; void setup(void) ( //Serial.begin(9600); vw_set_ptt_inverted(true); // Konieczne dla DR3100 vw_setup(2000); // Ustaw prędkość transmisji (bit/s) Sensors.begin(); if (! czujniki .getAddress(insideThermometer, 0)); printAddress(insideThermometer); czujniki.setResolution(insideThermometer, 9); ) void printTemperature(DeviceAddress adres_urządzenia) ( float tempC = Sensors.getTempC(deviceAddress); //Serial.print("Temp C : "); //Serial.println(tempC); //Tworzenie danych do wysłania int number = tempC; char symbol = "c"; //Symbol usługi umożliwiający określenie, czy jest to czujnik String strMsg = "z" ; strMsg += symbol; strMsg += " "; strMsg += liczba; strMsg += " "; char msg; strMsg.toCharArray(msg, 255); vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx (); / / Poczekaj, aż transfer się zakończy. opóźnienie(200); ) void pętla(void) ( for (int j=0; j<= 6; j++) { sensors.requestTemperatures(); printTemperature(insideThermometer); delay(600000); } } //Определение адреса void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16); //Serial.print("0"); //Serial.print(deviceAddress[i], HEX); } }

Urządzenie odbiorcze odbiera dane, mierzy ciśnienie i temperaturę w pomieszczeniu i przesyła je do wyświetlacza.

#include #include LiquidCrystal LCD(12, 10, 5, 4, 3, 2); #włącz czujnik dht11; #zdefiniuj DHT11PIN 8 #include #include BMP085 dps = BMP085(); długi Temperatura = 0, Ciśnienie = 0, Wysokość = 0; void setup() ( Serial.begin(9600); vw_set_ptt_inverted(true); // Konieczne dla DR3100 vw_setup(2000); // Ustaw prędkość odbioru vw_rx_start(); // Rozpocznij monitorowanie transmisji lcd.begin(16, 2) ; Wire.begin(); opóźnienie (1000); dps.init(); //lcd.setCursor(14,0); //lcd.write(byte(0)); //lcd.home(); ) void pętli() ( uint8_t buf; // Bufor wiadomości uint8_t buflen = VW_MAX_MESSAGE_LEN; // Długość bufora if (vw_get_message(buf, &buflen)) // Jeśli wiadomość zostanie odebrana ( // Rozpocznij analizowanie int i; // Jeśli wiadomość nie jest adresowana do nas, wyjdź if (buf != "z") ( return; ) char polecenie = buf; // Polecenie jest pod indeksem 2 // Parametr numeryczny zaczyna się od indeksu 4 i = 4; int liczba = 0; // Ponieważ transmisja odbywa się znak po znaku, należy przekonwertować zestaw znaków na liczbę while (buf[i] != " ") ( liczba *= 10; liczba += buf[i] - "0"; i++; ) dps.getPressure(&Ciśnienie); dps.getAltitude (&Altitude); dps.getTemperature(&Temperatura); //Serial.print(polecenie); Serial.print(" "); Serial.println( numer); lcd.print("T="); lcd.setCursor(2,0); lcd.print(liczba); lcd.setCursor(5,0); lcd.print("P="); lcd.print (ciśnienie/133,3); lcd.print("mmH"); lcd.setCursor(0,1); lcd.print("T="); lcd.print (temperatura*0,1); lcd.print("H="); lcd.print(czujnik.wilgotności); lcd.home(); //opóźnienie(2000); int chk = czujnik.odczyt(DHT11PIN); przełącznik (chk) ( case DHTLIB_OK: //Serial.println("OK"); przerwa; case DHTLIB_ERROR_CHECKSUM: //Serial.println("Błąd sumy kontrolnej"); przerwa; case DHTLIB_ERROR_TIMEOUT: //Serial.println("Przekroczono limit czasu błąd"); przerwa; domyślnie: //Serial.println("Nieznany błąd"); przerwa; ) ) )

P.S. W przyszłości planuję dodać:
- czujnik wilgotności do przetwornika, przerobić algorytm transmisji danych
- czujnik do pomiaru prędkości i kierunku wiatru.
- dodaj kolejny wyświetlacz do urządzenia odbiorczego.
- przenieść odbiornik i nadajnik do osobnego mikrokontrolera.

Poniżej zdjęcie tego co się stało:

Lista radioelementów

Przeznaczenie Typ Określenie Ilość NotatkaSklepMój notatnik
Część nadawcza.
Płyta Arduino

Arduino Nano 3.0

1 Do notatnika
czujnik temperatury

DS18B20

1 Do notatnika
Rezystor

220 omów

1 Do notatnika
Moduł nadajnikaMX-FS-03V (433 MHz)1 Do notatnika
Część odbiorcza radia.
Płyta Arduino

Arduino Uno

1 Do notatnika
Rezystor trymera 1 Do notatnika
Rezystor


 


Czytać:



Najlepsze boty na smartfony

Najlepsze boty na smartfony

Rozwój w dziedzinie tworzenia i ulepszania botów nie stoi w miejscu, a użytkownikom stale oferowane są różnorodne pomysły, wdrażane...

Rozwój kariery na SEO-FAST

Rozwój kariery na SEO-FAST

Osobista recenzja: Wsparcie techniczne dla tego pudełka SeoFast to szczyt ignorancji i niekompetencji. Nie będę wdawał się w szczegóły, ale krótko mówiąc, byłem...

Kompletny przewodnik dla początkujących streamerów

Kompletny przewodnik dla początkujących streamerów

Co musisz wiedzieć, aby uniknąć bana na Twitchu? Twitch, jak każda platforma społecznościowa, ma wiele ograniczeń w korzystaniu z niego, ponieważ...

Oprogramowanie sprzętowe i konfiguracja Android Smart TV (Smart TV)

Oprogramowanie sprzętowe i konfiguracja Android Smart TV (Smart TV)

Po przeczytaniu recenzji o dekoderach telewizyjnych opartych na Androidzie, też chciałem taki mieć, ale jakoś nie przeszedł z kanału pożądania na kanał zakupu, z jakiegoś powodu…

obraz kanału RSS