Sekcje witryny
Wybór redaktorów:
- Jak otworzyć dysk Yandex. Jak zalogować się na swoją stronę w Yandex.Disk? Instrukcje dla wszystkich urządzeń Jak utworzyć chmurę na dysku Yandex
- Jak łatwo ułożyć krzyżówkę na komputerze online lub za pomocą programu?
- Telefon komórkowy Lenovo A616 (czarny)
- Do sieci trafiły pierwsze wysokiej jakości rendery Samsunga Galaxy S11
- Jak zresetować HTC do ustawień fabrycznych
- Testowanie i zapewnienie jakości
- Który odkurzacz robota Xiaomi lepiej wybrać: porównanie liderów z nowościami Odkurzacz Xiaomi wersja 2
- Jak ZX Spectrum podbił ZSRR
- Odbiorniki Globo, Tunery Globo, wprowadzanie kluczy BISS, instrukcja wprowadzania kluczy BISS do odbiornika, Wprowadzanie kluczy BISS, wprowadzanie przez użytkownika kluczy BISS w odbiorniku Wprowadzanie kluczy BISS w tunerach satelitarnych
- Instalowanie systemu Windows z dysku flash USB za pośrednictwem systemu BIOS
Reklama
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:
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). Anody wskaźnikowe są podłączone do zacisków poprzez rezystory ograniczające prąd Arduino:
Katody segmentów są połączone z kołkami Arduino:
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):
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: Czujnik jest podłączony do magistrali I2C(szczegóły kontaktu - SD/SDI, styk synchronizacyjny - SCL/SCK):
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: 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. 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: 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 ( - ):
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:
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:
MQTT Golang aplikacja kliencka protokołu MQTT, przesyłanie informacji otrzymanych ze stacji pogodowej na serwer ( MQTT-pośrednik) : 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 (-): 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:
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); 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:
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: Planowane ulepszenia:
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ć: 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) Krok 1 Przygotuj WG12864B3. 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. 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. 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. 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. Krok 4 Odżywianie. 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. 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. 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. //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. 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: 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
Dodatkowo
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.
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: Charakterystyka modułu odbiorczego: 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. 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.
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:
DHT ma 4 piny:
Łą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ć: Poniżej zdjęcie tego co się stało: Lista radioelementów
|
Czytać: |
---|
Popularny:
Nowy
- Jak łatwo ułożyć krzyżówkę na komputerze online lub za pomocą programu?
- Telefon komórkowy Lenovo A616 (czarny)
- Do sieci trafiły pierwsze wysokiej jakości rendery Samsunga Galaxy S11
- Jak zresetować HTC do ustawień fabrycznych
- Testowanie i zapewnienie jakości
- Który odkurzacz robota Xiaomi lepiej wybrać: porównanie liderów z nowościami Odkurzacz Xiaomi wersja 2
- Jak ZX Spectrum podbił ZSRR
- Odbiorniki Globo, Tunery Globo, wprowadzanie kluczy BISS, instrukcja wprowadzania kluczy BISS do odbiornika, Wprowadzanie kluczy BISS, wprowadzanie przez użytkownika kluczy BISS w odbiorniku Wprowadzanie kluczy BISS w tunerach satelitarnych
- Instalowanie systemu Windows z dysku flash USB za pośrednictwem systemu BIOS
- Kiedy nie możesz obejść się bez noindex i nofollow