Spisu treści:

Stacja pogodowa przy użyciu Arduino UNO: 7 kroków
Stacja pogodowa przy użyciu Arduino UNO: 7 kroków

Wideo: Stacja pogodowa przy użyciu Arduino UNO: 7 kroków

Wideo: Stacja pogodowa przy użyciu Arduino UNO: 7 kroków
Wideo: Kurs Arduino #4: DHT11/DHT22 - Czujnik temperatury i wilgotności + Stacja pogodowa 2024, Lipiec
Anonim
Stacja pogodowa przy użyciu Arduino UNO
Stacja pogodowa przy użyciu Arduino UNO

Utworzony przez: Hazel Yang

Ten projekt to stacja pogodowa wykorzystująca płytkę Arduino UNO do sterowania przepływem danych, czujnik DHT22 do zbierania danych i ekran OLED do wyświetlania danych.

Krok 1: Lista przedmiotów

Lista przedmiotów
Lista przedmiotów

1. Ekran: OLED, wyświetlacz 1.3 SH1106, kolor biały I2C ---- PID: 18283

2. Czujnik: cyfrowy czujnik wilgotności i temperatury DHT22 ---- PID: 7375

3. Łączy: Przewody połączeniowe ---- PID: 10316 lub 10318 lub 10312 (w zależności od długości) lub można użyć stałego przewodu 22 AWG ---- PID: 22490

Breadboard ---- PID: 10686 lub 10698 lub 103142 (w zależności od rozmiaru)

4. Zasilanie: ten kabel może łączyć się tylko z portem USB komputera, a kabel służy również do przesyłania danych między płytą IDE i Arduino. KABEL USB, A DO B, M/M, 0,5 m (1,5 stopy) ---- PID: 29862

Lub możesz użyć tego do zasilania płyty: 5 V 2A AC/DC Adapter ---- PID: 10817.

Krok 2: Wstęp względny

Względne wprowadzenie
Względne wprowadzenie
Względne wprowadzenie
Względne wprowadzenie

Wprowadzenie ekranu: biały wyświetlacz OLED o przekątnej 1,3 cala

1. Możesz znaleźć dokument przedstawiający podstawową konfigurację i opisy:

Wprowadzenie do czujnika: czujnik wilgotności i temperatury DHT22 1. Możesz znaleźć dokument z opisami:

Krok 3: Podłącz obwód

Podłącz obwód
Podłącz obwód

Czujnik DHT22 wysyła dane szeregowe do pinu 2. Podłącz więc drugi pin od lewej, pin "SDA" powinien być połączony z pinem 2.

W przypadku wyświetlacza SSH1106 do transmisji wykorzystuje pin analogowy. Obwód ekranu to pin "SCL" do pinu "A5" Arduino i pin "SDA" do "A4" Arduino. Podczas gdy dane o pozycji piksela są przesyłane w sposób ciągły, funkcja wyświetlania w programie wyzwala polecenie tylko raz za każdym razem, gdy odczytuje dane z czujnika.

Zarówno czujnik, jak i ekran mogą wykorzystywać napięcie 3,3 V do zasilania Arduino jako wejścia zasilania DC. Do zasilania musimy podłączyć oba piny „VCC” do „3,3V” Arduino. A piny „GND” można po prostu podłączyć do pinu „GND” na płytce Arduino.

Użyj kabla USB A do B, podłącz Arudino do komputera.

Krok 4: Przygotuj się do kompilacji

"u8glib" dla ekranu SSH1106 firmy Olikraus.

"Biblioteka czujników DHT" dla czujnika DHT22 firmy Adafruit. Należy pobrać dwie biblioteki: Biblioteka czujnika DHT22:

U8glib:

I użyj „zarządzaj biblioteką” w IDE, aby je rozpakować. Instrukcja zarządzania bibliotekami online:

Krok 5: Kod testowy portu szeregowego czujnika DHT22

Testuj kod dla portu szeregowego czujnika DHT22 (który znajduje się w bibliotece DHT22>>przykłady):

(Możesz pominąć tę część.)

Wystarczy przetestować czujnik DHT22 normalnie odczytuje dane

#włączać

#włączać

#włączać

#włączać

#włączać

#zdefiniuj DHTPIN 2

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

pusta konfiguracja () {

Serial.początek(9600);

Serial.println(F("Test DHT22!"));

dht.początek();

}

pusta pętla () {

// Odczekaj kilka sekund między pomiarami.

opóźnienie (2000);

// Odczyt temperatury lub wilgotności zajmuje około 250 milisekund!

// Odczyty czujnika mogą być również „stare” do 2 sekund (jest to bardzo wolny czujnik)

float h = dht.odczytWilgotność();

// Odczytaj temperaturę w stopniach Celsjusza (domyślnie)

float t = dht.odczytTemperatura();

// Odczytaj temperaturę w stopniach Fahrenheita (isFahrenheit = true)

float f = dht.odczytTemperatura(prawda);

// Sprawdź, czy jakiekolwiek odczyty nie powiodły się i wyjdź wcześniej (aby spróbować ponownie).

jeśli (isnan(h) || isnan(t) || isnan(f)) {

Serial.println(F("Nie udało się odczytać z czujnika DHT!"));

powrót;

}

// Oblicz indeks ciepła w stopniach Fahrenheita (domyślnie)

float hif = dht.computeHeatIndex(f, h);

// Oblicz indeks ciepła w stopniach Celsjusza (isFahreheit = false)

float hic = dht.computeHeatIndex(t, h, false);

Serial.print(F("Wilgotność: "));

druk.seryjny(h);

Serial.print(F("% Temperatura: "));

Serial.print(t);

Serial.print(F("°C"));

druk.seryjny(f);

Serial.print(F("°F Indeks ciepła: "));

Serial.print(hic);

Serial.print(F("°C"));

Serial.print(hif);

Serial.println(F("°F"));

}

// Po skompilowaniu programu kliknij NARZĘDZIA >> MONITOR SZEREGOWY, aby sprawdzić dane.

// Koniec programu testowego.

Krok 6: Kod projektu

#włączać

#włączać

#włączać

#włączać

#włączać

#zdefiniuj DHTPIN 2

#define DHTTYPE DHT22

#include "U8glib.h"

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);

Czujnik DHT (DHTPIN, DHTTYPE);

nieważne remis (nieważne) {

u8g.setFont(u8g_font_unifont);

float h = sensor.readHumidity();

// Odczytaj temperaturę w stopniach Celsjusza (domyślnie)

float t = sensor.readTemperature();

// Sprawdź, czy jakiekolwiek odczyty nie powiodły się i wyjdź wcześniej (aby spróbować ponownie).

jeśli (isnan(h) || isnan(t)) {

u8g.print("Błąd.");

dla(;;);

powrót;

}

u8g.setPrintPos(4, 10);

u8g.print("Temperatura(C):");

u8g.setPrintPos(4, 25);

u8g.print(t);

u8g.setPrintPos(4, 40);

u8g.print("Wilgotność(%):");

u8g.setPrintPos(4, 55);

u8g.print(h);

}

nieważne ustawienia (unieważnione) {

u8g.setRot180();

Serial.początek(9600);

czujnik.początek();

}

pusta pętla (pusta) {

// pętla obrazu

u8g.pierwszaStrona();

robić {

remis();

} while(u8g.nextPage());

// odbuduj obrazek po pewnym opóźnieniu delay(2000);

}

// Koniec programu głównego.

Krok 7: Opis

Opis
Opis

Następnie zainicjuj obwody pinów dla płyty Arduino. Ponieważ biblioteka czujników wymaga danych do zadeklarowania obiektu.

Możesz też przetestować dane czujnika, monitorując dane wyjściowe za pomocą cyfrowego styku 2, korzystając z funkcji o nazwie „Serial.print()”. Ponieważ częstotliwość transmisji danych to w przybliżeniu 1 odczyt co 2 sekundy (czyli 0,5 Hz), po zaprogramowaniu w Arduino IDE musimy ustawić opóźnienie wewnątrz funkcji pętli na więcej niż 2 sekundy. Tak więc wewnątrz funkcji pętli jest "delay(2000)". Dzięki temu dane będą często odświeżane. W funkcji "draw" pobierz dane z portu danych szeregowych i umieść je w liczbach zmiennoprzecinkowych za pomocą funkcji "readHumidity" i "readTemperature".

Wydrukuj wilgotność i temperaturę za pomocą funkcji drukowania w pliku „u8glib”. Możesz dostosować pozycję, zmieniając numer w funkcji "setPrintPos". Funkcja drukowania może bezpośrednio wyświetlać tekst i liczby.

Aby skonfigurować sprzęt, daj portowi szeregowemu 10-sekundowe opóźnienie. Następnie wywołaj funkcję begin dla czujnika. Według mojego obwodu mój ekran był do góry nogami. Dołączyłem więc również funkcję „setRot180” do obracania wyświetlacza.

Główną funkcją jest funkcja pętli płytki Arduino. Ciągle wywołuje funkcję rysowania, aby wyświetlać tekst i dane za każdym razem, gdy czujnik jest odświeżany.

Ekran wygląda tak:

Możesz odłączyć Arduino UNO od komputera i zasilać go za pomocą zasilacza 5 V DC podłączonego do gniazda zasilania 2,1 mm. Przechowuje program w swoim napędzie i może stale uruchamiać program po włączeniu zasilania.

Zalecana: