Lekcja 20/31: Wyświetlanie temperatury i wilgotności z DHT11 na ekranie LCD
Ten samouczek pokazuje, jak połączyć czujnik temperatury i wilgotności DHT11 z wyświetlaczem LCD1602 z obsługą I2C, aby stworzyć kompaktową stację monitorowania środowiska. Zamiast odczytywać surowe dane z czujnika z monitora szeregowego, nauczysz się wyświetlać bieżące odczyty temperatury i wilgotności na ekranie znakowym 16x2. Ten projekt idealnie nadaje się do zbudowania stacji pogodowej na biurko, małego monitora szklarni lub dodania lokalnego odczytu do dowolnego projektu automatyki domowej. Interfejs I2C upraszcza okablowanie, co czyni ten projekt dostępnym dla początkujących i szybkim dodatkiem dla doświadczonych twórców.
Oto kilka praktycznych pomysłów na to, co możesz zbudować dzięki tej wiedzy:
- Stacja pogodowa na biurko pokazująca aktualne warunki w pomieszczeniu.
- Kompaktowy wyświetlacz do terrarium dla gadów lub roślin.
- Lokalny odczyt dla serwerowni lub warsztatu.
- Moduł bazowy dla bardziej złożonego systemu automatyki domowej.
Sprzęt i komponenty
Do zbudowania tego projektu będziesz potrzebować następujących komponentów:
- Arduino Uno (lub kompatybilna płyta)
- Wyświetlacz LCD1602 z modułem interfejsu I2C
- Czujnik temperatury i wilgotności DHT11
- Rezystor podciągający 4,7 kΩ lub 10 kΩ (jeśli używasz gołego czujnika DHT11)
- Przewody połączeniowe
- Płytka stykowa (opcjonalnie, dla łatwiejszych połączeń)
Zrozumienie I2C LCD1602
LCD1602 to popularny wyświetlacz znakowy z 16 kolumnami i 2 wierszami. Moduł „I2C” przylutowany z tyłu wyświetlacza jest kluczem do jego prostoty. Moduł ten konwertuje równoległy interfejs LCD na szeregowy interfejs I2C, który wymaga tylko dwóch przewodów do danych (SDA i SCL) oraz dwóch do zasilania (VCC i GND). To drastycznie zmniejsza liczbę pinów potrzebnych na Arduino, pozostawiając więcej dostępnych dla innych czujników i elementów wykonawczych. Moduł zawiera również mały potencjometr do regulacji kontrastu wyświetlacza, co jest kluczowe dla zapewnienia widoczności tekstu. Adres I2C modułu można zmienić za pomocą małych zworek lutowniczych (A0, A1, A2) na płytce, co pozwala na współistnienie wielu urządzeń I2C na tej samej magistrali.
Schemat połączeń
Połącz komponenty zgodnie ze schematem poniżej. LCD I2C używa pinów I2C Arduino, podczas gdy czujnik DHT11 używa pinu cyfrowego.
Dla LCD1602-I2C:
- VCC do Arduino 5V
- GND do Arduino GND
- SDA do Arduino A4
- SCL do Arduino A5
Dla czujnika DHT11:
- VCC (Pin 1) do Arduino 5V
- Data (Pin 2) do Arduino Pinu cyfrowego 2 (z rezystorem podciągającym 10 kΩ do 5 V)
- NC (Pin 3) – niepodłączony
- GND (Pin 4) do Arduino GND
(na filmie w 25:16)
Konfiguracja bibliotek
Ten projekt wymaga dwóch bibliotek. Biblioteka Wire.h jest częścią standardowej instalacji Arduino. Musisz zainstalować bibliotekę LiquidCrystal_I2C oraz bibliotekę dht11. Film pokazuje, jak je zainstalować. Biblioteki można pobrać z linków podanych w opisie filmu lub ze strony Robojax. Po pobraniu można je zainstalować przez Arduino IDE, przechodząc do Szkic > Dołącz bibliotekę > Dodaj bibliotekę .ZIP... i wybierając pobrane pliki. (na filmie w 06:16)
Znajdowanie adresu I2C wyświetlacza LCD
Zanim będziesz mógł użyć wyświetlacza, musisz określić jego adres I2C. Najczęstszy adres to 0x27 lub 0x3F, ale może się różnić. Aby go znaleźć, możesz użyć szkicu skanera I2C. Jest to prosty program, który skanuje magistralę I2C i zgłasza znalezione adresy do monitora szeregowego. Wgraj kod skanera, otwórz monitor szeregowy z prędkością 9600 bodów, a wyświetli on adres Twojego wyświetlacza. (na filmie w 08:11)
Wyjaśnienie kodu
Ta sekcja wyjaśnia kluczowe, konfigurowalne przez użytkownika części kodu. Pełny program jest dostępny do pobrania poniżej artykułu.
Kod zaczyna się od dołączenia niezbędnych bibliotek i zdefiniowania używanych pinów i obiektów.
// plik nagłówkowy z GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // utwórz obiekt DHT11
#define dhtpin 2 // ustaw pin do podłączenia DHT11
// początek ustawień dla LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Ustaw adres LCD na 0x3F dla wyświetlacza 16 znaków i 2 linii
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// koniec ustawień dla LCD1602-I2C
To najważniejsze linie do skonfigurowania dla Twojego zestawu:
#define dhtpin 2: To definiuje pin Arduino podłączony do pinu danych czujnika DHT11. Zmień liczbę2, jeśli używasz innego pinu.LiquidCrystal_I2C lcd(0x3F, 16, 2);: Ta linia tworzy obiekt LCD. Pierwszy parametr,0x3F, to adres I2C znaleziony w poprzednim kroku.16i2definiują liczbę kolumn i wierszy Twojego wyświetlacza. Zaktualizuj adres, jeśli Twój skaner znalazł inny (np.0x27).
Kod używa niestandardowej funkcji, getTemp(), do odczytu temperatury i konwersji jej na różne jednostki. To potężna funkcja, która sprawia, że kod jest wielokrotnego użytku w różnych zastosowaniach.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//pobierz temp
if(type =='F')
{
return temp * 1.8 + 32;// konwertuj na Fahrenheita
}else if(type =='K')
{
return temp + 274.15;// konwertuj na Kelwina
}else{
return temp;
}
}
Aby użyć tej funkcji, wywołujesz ją z pojedynczym argumentem znakowym reprezentującym żądaną jednostkę. Na przykład getTemp('C') zwraca temperaturę w stopniach Celsjusza, getTemp('F') zwraca ją w Fahrenheitach, a getTemp('K') zwraca ją w Kelvinach. Funkcja odczytuje surową temperaturę z czujnika DHT11 i stosuje niezbędny wzór konwersji. Pozwala to łatwo zmienić wyświetlaną jednostkę w głównej pętli loop() bez przepisywania logiki odczytu czujnika. Główna pętla wypisuje temperaturę i wilgotność na wyświetlacz LCD za pomocą funkcji lcd.setCursor() i lcd.print(), aby kontrolować, gdzie na ekranie pojawiają się wartości.
Wyświetlanie symbolu stopnia
Standardowy zestaw znaków wyświetlacza LCD HD44780 nie zawiera dedykowanego symbolu stopnia (°). Aby go wyświetlić, należy użyć funkcji lcd.write() z wartością dziesiętną znaku z pamięci ROM wyświetlacza. Dla symbolu stopnia ta wartość wynosi 223. Kod demonstruje to, używając lcd.print((char)223); do wydrukowania symbolu po wartości temperatury. (na filmie w 30:16)
Prezentacja projektu na żywo
Po wgraniu kodu wyświetlacz pokaże komunikat startowy, zanim wyczyści się i wyświetli bieżącą temperaturę i wilgotność. Pierwsza linia wyświetlacza pokazuje tekst "LCD1602 DHT11", podczas gdy druga linia pokazuje temperaturę w stopniach Celsjusza, po której następuje symbol stopnia i "C", a następnie temperaturę w Fahrenheitach, po której następuje symbol stopnia i "F". Wartość wilgotności jest wypisywana na monitorze szeregowym. Demonstracja na filmie pokazuje wyświetlacz aktualizujący się co pół sekundy, gdy czujnik jest trzymany, dokładnie odzwierciedlając warunki otoczenia. (na filmie w 29:42)
Wyświetlanie napięcia z potencjometru na wyświetlaczu LCD jest omówione w Lekcji 20/31: Wyświetlanie napięcia na LCD1602.
Użycie tego samego wyświetlacza LCD do pokazywania odległości z czujnika ultradźwiękowego jest omówione w Lekcji 20/31: Użycie LCD1602 z Arduino do wyświetlania temperatury, napięcia i odległości | Robojax.
Powiązane projekty z tego filmu
- Lekcja 20/31: Użycie LCD1602 z Arduino do wyświetlania temperatury, napięcia i odległości | Robojax
- Lekcja 20/31: Wyświetlanie napięcia na LCD1602
Rozdziały
- [00:00] Wprowadzenie do LCD1602 i przegląd projektu
- [01:30] Wyjaśnienie sprzętu LCD1602 i modułu I2C
- [02:47] Regulacja kontrastu wyświetlacza LCD
- [03:14] Rozmieszczenie pinów LCD i konfiguracja adresu I2C
- [05:28] Schemat połączeń dla LCD1602
- [06:16] Instalacja biblioteki LiquidCrystal_I2C
- [08:11] Znajdowanie adresu I2C za pomocą skanera
- [09:28] Podstawowy kod do drukowania tekstu na LCD
- [11:10] Przykłady: migający kursor i niestandardowe znaki
- [13:46] Tworzenie i używanie niestandardowych znaków
- [18:51] Przykład wyświetlania szeregowego
- [23:16] Przewijanie tekstu na LCD
- [24:36] Łączenie kodu czujnika DHT11 z LCD
- [30:16] Wyświetlanie symbolu stopnia
- [32:03] Usuwanie miejsc dziesiętnych z temperatury
- [33:00] Wyświetlanie napięcia z potencjometru na LCD
- [35:56] Wyświetlanie odległości z czujnika ultradźwiękowego
/*
Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
* This is the Arduino code for DHT11 module to read temperature and humidity
* This code can display temperature in:
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
* *
* Written by Ahmad Shamshiri for Robojax
* on Jan 04, 2018
* Robojax.com
Please watch video instruction here https://youtu.be/0XMLnCYkvbE
This code is available at http://robojax.com/course1/?vid=lecture11
with over 100 lectures Free On YouTube Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// header file from GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C
void setup() {
Serial.begin(9600);// setting up serial monitor
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("DHT11 Sensor");
delay(2000);
}
void loop() {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
lcd.clear();// clear previous values from screen
lcd.setCursor (0,0); //character zero, line 1
lcd.print("LCD1602 DHT11"); // print text
// print distance in degrees C
lcd.setCursor (0,1); //character 0, line 2
lcd.print(getTemp('C'));// print Temperature Celsius
lcd.setCursor (4,1); //character 5, line 2
lcd.print((char)223);// print degree
lcd.setCursor (5,1); //character 6, line 2
lcd.print("C");// print C
// print distance degrees F
lcd.setCursor (7,1); //character 8, line 2
lcd.print(getTemp('F'));// print distance in cm
lcd.setCursor (13,1); //character 14, line 2
lcd.print((char)223);// print degree
lcd.setCursor (14,1); //character 16, line 2
lcd.print("F");// print F
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
}
/*
* getTemp(char type)
* type character of upper case
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
*/
float getTemp(char type) {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
float temp = (float)DHT11.temperature;//get temp
if(type =='F')
{
return temp * 1.8 + 32;// convert to Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// convert to Kelvin
}else{
return temp;
}
}
Rzeczy, których możesz potrzebować
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Zasoby i odniesienia
-
DokumentacjaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ZewnętrznyPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Pliki📁
Biblioteki Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
Instrukcja obsługi
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB