Wykaz komponentów niezbędnych do budowy stacji pogody
- Czujnik temperatury i wilgotności DHT11
- Wyśwwietlacz LCD 16×2n
- Arduino Mega
- Płytka prototypowa
- Zworki
- Rezystory
DHT11 jest tanim czujnikiem temperatury i wilgotności działającym w oparciu o protokół 1-wire, kosztuje około 2$.
Czujnik ten posiada trzy piny, pierwszy pin do zasilania VCC, środkowy pin do wyjścia sygnału lub DATA, a ostatni pin to GND.
Pomimo tego, że układ DHT11 nie jest najszybszym czujnikiem temperatury i wilgotności, ma on dość dużą dokładność, ±5% dla odczytów wilgotności i ±2% dla odczytów temperatury;
Ekran LCD Keypad shield sprawia, że podłączenie modułu LCD 16×2 do dowolnego systemu jest dość proste, ponieważ po prostu podłącza się go do Arduino Mega, które jest używane w tym projekcie.
Zwykły moduł LCD 16×2 (bez shielda) może być również użyty. Wystarczy upewnić się, że piny są podłączone zgodnie z opisem w kodzie i schemacie poniżej.
Połączenie elementów jest bardzo proste, jeśli używasz shielda klawiatury LCD. Wszystko co musisz zrobić to podłączyć LCD jak pokazano poniżej i podłączyć DHT jak opisano na schemacie powyżej.
Dla lepszego zrozumienia połączeń, poniżej znajduje się zestawienie wszystkich podłączonych komponentów.
Zauważ, że pin RW jest podłączony do GND, ponieważ będziemy pisać tylko do wyświetlacza LCD, a nie odczytywać z niego, aby to było możliwe pin RW musi być podciągnięty do LOW.
Podłączenie DHT11 z Arduino
Podłączenie pinów DHT11 do Arduino pokazano poniżej. Wszystkie czujniki DHT11 mają trzy główne piny funkcyjne. Typy DHT z czterema pinami zawsze mają pin void, który nigdy nie jest podłączony do niczego.
Mając schemat za sobą, przejdźmy do kodu.
Kod stacji pogody do Arduino
Zanim zaczniemy, musimy pobrać bibliotekę DHT oraz ustawić jej typ. Potrzebna biblioteka jest dostępna na githubie. Należy ją pobrać i rozpakować do folderu Arduino libraries, a następnie otworzyć Arduino IDE. W tym miejscu warto zaznaczyć, że biblioteka nie będzie widoczna dla instancji Arduino IDE, która była uruchomiona przed instalacją, po zainstalowaniu biblioteki należy ponownie uruchomić Arduino IDE.
Mając zainstalowaną bibliotekę, możemy przejść do analizy kodu:
Pierwszą rzeczą, którą należy zrobić, jest włączenie wszystkich zależności, których kod potrzebuje do poprawnego działania bibliotek w tym przypadku.
//written by Nick Koumaris
//info@educ8s.tv
//educ8s.tv
#include "DHT.h"
#include <LiquidCrystal.h>
Następnie definiujemy pin, do którego podłączony jest pin DHT11 DATA, a także uwzględniamy typ używanego przez nas czujnika DHT, którym jest DHT11.
#define DHTPIN 22 // what pin we're connected to
#define DHTTYPE DHT11
W linii 4 tworzymy obiekt DHT, a następnie podajemy numer pinu (DHTPIN) oraz typ czujnika (DHTTYPE).
DHT dht(DHTPIN, DHTTYPE);
W następnej linii tworzymy obiekt LCD, podając numery pinów Arduino, do których podłączone są nasze piny LCD w następującym formacie lcd (RS, E, D4, D5, D6, D7).
LiquidCrystal lcd(8,9,4,5,6,7);
Po wykonaniu tych czynności, jesteśmy gotowi do przejścia do funkcji setup.
W funkcji setup, wywołujemy metodę LCD begin, przekazując rozmiar LCD, który jest 16×2. Następnie wypisujemy komunikat informujący, że urządzenie rozpoczęło odczytywanie danych z czujnika w pierwszej linii wyświetlacza LCD, po czym wywołujemy metodę DHT begin.
void setup(void) {
lcd.begin(16, 2);
lcd.print("Reading sensor");
dht.begin();
}
To wszystko jeśli chodzi o funkcję setup().
Przechodząc do funkcji loop(), tworzymy dwie zmienne typu float, które będą przechowywały wartość temperatury i wilgotności, nadajemy im opóźnienie dwóch sekund po wczytaniu do nich wartości, a następnie czyścimy wyświetlacz LCD.
void loop() {
float temperature, humidity;
humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(2000);
lcd.clear();
Następnie tworzymy dwie tablice znaków, obie o rozmiarze sześć, po czym używamy funkcji dtostrf do konwersji wartości temperatury i wilgotności z typu float na string, a następnie wypisujemy je na LCD. Zauważ, że jawne rzutowanie na typ użyte w funkcji lcd.print() ((char)223) jest użyte do wypisania symbolu stopnia na wyświetlaczu.
char tempF[6];
char humF[6];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 2, 0, humF);
lcd.print("T:");
lcd.print(tempF);
lcd.print((char)223);
lcd.print("C ");
lcd.print("H: ");
lcd.print(humF);
lcd.print("%");
}
To tyle jeśli chodzi o pętlę i koniec kodu.
więc tutaj jest kompletny kod:
//written by Nick Koumaris
//info@educ8s.tv
//educ8s.tv
#include "DHT.h"
#include <LiquidCrystal.h>
#define DHTPIN 22 // what pin we're connected to
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8,9,4,5,6,7);
void setup(void) {
lcd.begin(16, 2);
lcd.print("Reading sensor");
dht.begin();
}
void loop() {
float temperature, humidity;
humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(2000);
lcd.clear();
char tempF[6];
char humF[6];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 2, 0, humF);
lcd.print("T:");
lcd.print(tempF);
lcd.print((char)223);
lcd.print("C ");
lcd.print("H: ");
lcd.print(humF);
lcd.print("%");
}
Zapisz swój kod, podłącz Mega do komputera i upewnij się, że w menu narzędzi wybrana płytka to "Arduino/Genuino Mega lub Mega 2560", a także upewnij się, że wybrany jest właściwy port COM. Po zakończeniu kliknij "prześlij" i powinieneś mieć coś takiego jak na zdjęciu tytułowym.