Lekcija 27: Korištenje DHT11 senzora temperature s LCD ekranom | Arduino korak-po-korak kurs
Ovaj vodič vas provodi kroz izgradnju sistema za praćenje temperature i vlažnosti koristeći DHT11 senzor i I2C LCD ekran, zasnovan na Lekciji 27 Robojax Arduino Step-by-Step kursa. Iako video transkript pominje HTU21DF senzor, kod i principi predstavljeni ovdje direktno se primjenjuju na češći i pristupačniji DHT11 modul, koji je osnovni element za projekte mjerenja okoline. Ovaj projekat je savršen za početnike koji žele da pređu dalje od treperenja LED dioda i počnu čitati stvarne podatke iz okoline.

Stvarna vrijednost ovog projekta je ogromna. Ovu postavku možete koristiti za širok spektar praktičnih primjena, uključujući:
- Izgradnju jednostavnog digitalnog termometra i higrometra za vaš dom ili ured.
- Kreiranje klimatskog monitora za terarij za gmizavce ili staklenik za biljke.
- Razvoj osnovne meteorološke stanice koja bilježi podatke na vaš računar putem serijskog monitora.
- Dodavanje automatizacije zasnovane na temperaturi, kao što je uključivanje ventilatora ili grijača kada se pređe određeni prag.
Ovaj tutorijal će vas provesti kroz povezivanje, potrebne biblioteke i kod, omogućavajući vam da izgradite vlastiti sistem za praćenje okoline.
Hardver i komponente
Za izgradnju ovog projekta trebat će vam sljedeće komponente:
- Arduino ploča (npr. Uno, Nano).
- DHT11 modul senzora temperature i vlažnosti.
- LCD1602 ekran sa I2C interfejs modulom.
- Konektorski kablovi (jumper wires).
- Breadboard (opciono, ali preporučljivo za lakše povezivanje).
Vodič za povezivanje
Povezivanje za ovaj projekat je jednostavno, zahvaljujući I2C interfejsu na LCD-u i jednostavnom digitalnom izlazu DHT11 senzora. I2C LCD zahtijeva samo dvije podatkovne žice (SDA i SCL) i dvije žice za napajanje, što značajno pojednostavljuje povezivanje. DHT11 senzor također ima jednostavan tropinski interfejs.
Ovdje je dijagram povezivanja za projekat:
Povežite komponente na sljedeći način:
- DHT11 senzor: Povežite VCC (ili +) pin na 5V pin Arduina, GND (-) pin na GND Arduina, a DATA (ili OUT) pin na digitalni pin 2 na Arduinu.
- I2C LCD (LCD1602): Povežite VCC pin na 5V pin Arduina, GND pin na GND Arduina, SDA pin na analogni pin A4 Arduina, a SCL pin na analogni pin A5 Arduina.
Ove veze su sve što vam treba za napajanje senzora i ekrana te za omogućavanje komunikacije između komponenti.
Objašnjenje koda
Kod je dizajniran da čita temperaturu i vlažnost sa DHT11 senzora i prikazuje vrijednosti na I2C LCD ekranu. Također ispisuje podatke na serijski monitor radi lakšeg pregleda na vašem računaru.
Hajde da raščlanimo dijelove koda koje korisnik može konfigurisati, a koje ćete možda željeti prilagoditi za vlastite projekte.
// header file from GitHub: 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
- #define dhtpin 2: Ovo definira digitalni pin Arduina koji je povezan na DATA pin DHT11 senzora. Ako ga povežete na drugi pin, morate promijeniti ovaj broj.
- LiquidCrystal_I2C lcd(0x3F, 16, 2): Ova linija inicijalizira LCD. Prvi parametar,
0x3F, je I2C adresa vašeg specifičnog LCD modula. Ova adresa ponekad može biti0x27ovisno o proizvođaču. Druga dva parametra,16i2, definiraju broj kolona i redova na vašem LCD ekranu.
U loop() funkciji, kod koristi prilagođenu funkciju pod nazivom getTemp() za čitanje i pretvaranje temperature. Ova funkcija je odličan primjer kako učiniti vaš kod čišćim i višekratno upotrebljivim.
float getTemp(char type) {
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;
}
}
Da biste koristili ovu funkciju, jednostavno je pozovite i proslijedite jedan znak za specificiranje željene jedinice. Na primjer, getTemp('C') će vratiti temperaturu u Celzijusima, getTemp('F') u Farenhajtima, a getTemp('K') u Kelvinima. Ovo čini vrlo lakim prikazivanje temperature u više skala, kao što je prikazano u video demonstraciji.
Demonstracija uživo projekta
Nakon što sastavite krug i prenesete kod, vidjet ćete na LCD ekranu prikaz "DHT11 Sensor" dvije sekunde, nakon čega slijede očitanja temperature i vlažnosti uživo. Ekran će prikazati temperaturu i u Celzijusima i u Farenhajtima. Također možete otvoriti serijski monitor (podešen na 9600 bauda) za pregled podataka, koji će uključivati temperaturu u Kelvinima i postotak relativne vlažnosti.
U videu, voditelj demonstrira reakciju senzora primjenom topline iz toplotnog pištolja. Vidjet ćete kako se očitanje temperature na LCD ekranu brzo povećava dok očitanje vlažnosti opada, pokazujući mogućnosti senzora u realnom vremenu. Ovo je odličan način da testirate svoju postavku i potvrdite da sve radi ispravno.
Poglavlja
- [00:00] Uvod u DHT11 i HTU21DF temperaturne senzore
- [01:38] Specifikacije senzora i pregled tehničkog lista
- [02:28] Detaljan vodič za povezivanje senzora
- [03:03] Instalacija potrebnih Arduino biblioteka
- [04:05] Objašnjenje originalnog primjera koda
- [07:34] Demonstracija rada senzora
- [08:33] Predstavljanje modificiranog koda s prilagođenom funkcijom
- [10:22] Kako funkcionira funkcija getTemp()
- [12:19] Živa demonstracija: prikaz temperature u Celzijusima, Fahrenheitima i Kelvinima
- [13:01] Testiranje maksimalne temperaturne granice senzora
/*
* Robojax Arduino Step-by-Step Course
* Lesson 26 DHT11 with LCD1602-I2C display
* This is the Arduino code for the 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 January 4, 2018
* Robojax.com
Please watch video instructions 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 downloaded 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 GitHub: 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 backlight 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;
}
}
Stvari koje bi vam mogle zatrebati
-
AmazonBuy LCD1602-I2C from Amazonamzn.to
-
AmazonPurchase DHT11 from Amazonamzn.to
-
eBayPurchase LCD1602-I2C from eBayebay.us
-
AliExpressDHT11 and DHT22 from AliExpressamzn.to
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
-
AliExpressPurchase LCD1602-I2C from AliExpresss.click.aliexpress.com
-
BanggoodPurchase DHT11 module from Banggoodbanggood.com
Resursi i reference
-
EksternoDHT11 library on GitHubgithub.com
-
EksternoDHT11 Manual (PDF)robojax.com
-
EksternoLCD library from Robojax.com (ZIP)robojax.com
Datoteke📁
Fritzing datoteka
-
Temperature Sensor DHT11
Temperature Sensor DHT11.fzpz0.01 MB -
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Korisnički priručnik
-
DHT11 User's Manual
robojax-DHT11_manual.pdf0.82 MB
Ostale datoteke
-
DHT11 Simple Arduino Library
robojax-DHT11-simple_library.zip