Lekcija 20/31: Prikaz temperature i vlažnosti sa DHT11 na LCD ekranu
Ovaj tutorijal pokazuje kako kombinovati DHT11 senzor temperature i vlažnosti sa I2C LCD1602 displejom kako biste napravili kompaktnu stanicu za praćenje okoline. Umjesto čitanja sirovih podataka sa senzora sa serijskog monitora, naučit ćete prikazivati žive vrijednosti temperature i vlažnosti na 16x2 karaktera ekranu. Ovaj projekat je idealan za izradu desktop meteorološke stanice, malog monitora za staklenik ili dodavanje lokalnog prikaza bilo kojem projektu kućne automatizacije. I2C interfejs pojednostavljuje ožičenje, čineći ovaj projekat pristupačnim za početnike i brzim dodatkom za iskusne majstore.
Evo nekoliko praktičnih ideja šta možete napraviti s ovim znanjem:
- Desktop meteorološka stanica koja prikazuje trenutne uslove u prostoriji.
- Kompaktan displej za terarij za gmizavce ili biljke.
- Lokalni prikaz za okruženje serverske sobe ili radionice.
- Osnovni modul za složeniji sistem kućne automatizacije.
Hardver i komponente
Za izradu ovog projekta trebat će vam sljedeće komponente:
- Arduino Uno (ili kompatibilna ploča)
- LCD1602 displej sa I2C interfejs modulom
- DHT11 senzor temperature i vlažnosti
- Otpornik od 4.7kΩ ili 10kΩ za podizanje napona (ako koristite goli DHT11 senzor)
- Kratkospojne žice
- Breadboard (opciono, za lakše povezivanje)
Razumijevanje I2C LCD1602
LCD1602 je uobičajeni displej sa 16 kolona i 2 reda. "I2C" modul zalemljen na poleđini displeja ključ je njegove jednostavnosti. Ovaj modul pretvara paralelni interfejs LCD-a u serijski I2C interfejs, koji zahtijeva samo dvije žice za podatke (SDA i SCL) i dvije za napajanje (VCC i GND). Ovo drastično smanjuje broj pinova potrebnih na vašem Arduinu, ostavljajući više dostupnih za druge senzore i aktuatore. Modul također uključuje mali potenciometar za podešavanje kontrasta displeja, što je ključno za osiguravanje vidljivosti teksta. I2C adresa modula može se promijeniti pomoću malih lemnih mostova (A0, A1, A2) na ploči, omogućavajući da više I2C uređaja koegzistira na istoj magistrali.
Vodič za povezivanje
Povežite komponente kao što je prikazano na dijagramu ispod. I2C LCD koristi Arduino I2C pinove, dok DHT11 senzor koristi digitalni pin.
Za LCD1602-I2C:
- VCC na Arduino 5V
- GND na Arduino GND
- SDA na Arduino A4
- SCL na Arduino A5
Za DHT11 senzor:
- VCC (Pin 1) na Arduino 5V
- Data (Pin 2) na Arduino Digitalni Pin 2 (sa otpornikom od 10kΩ za podizanje napona na 5V)
- NC (Pin 3) - Nije povezano
- GND (Pin 4) na Arduino GND
(u videu na 25:16)
Postavljanje biblioteka
Ovaj projekat zahtijeva dvije biblioteke. Wire.h biblioteka je dio standardne Arduino instalacije. Trebat ćete instalirati LiquidCrystal_I2C biblioteku i dht11 biblioteku. Video prikazuje kako ih instalirati. Biblioteke možete preuzeti s linkova navedenih u opisu videa ili sa Robojax web stranice. Nakon preuzimanja, možete ih instalirati putem Arduino IDE-a navigacijom do Sketch > Include Library > Add .ZIP Library... i odabirom preuzetih datoteka. (u videu na 06:16)
Pronalaženje I2C adrese vašeg LCD-a
Prije nego što možete koristiti displej, morate odrediti njegovu I2C adresu. Najčešća adresa je 0x27 ili 0x3F, ali može varirati. Da biste je pronašli, možete koristiti I2C skener skicu. Ovo je jednostavan program koji skenira I2C magistralu i prijavljuje sve pronađene adrese na serijski monitor. Učitajte skener kod, otvorite serijski monitor na 9600 bauda i prikazat će adresu vašeg LCD-a. (u videu na 08:11)
Objašnjenje koda
Ovaj odjeljak objašnjava ključne dijelove koda koje korisnik može konfigurirati. Cijeli program dostupan je za preuzimanje ispod članka.
Kod počinje uključivanjem potrebnih biblioteka i definiranjem pinova i objekata koji se koriste.
// header datoteka sa GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // kreiraj objekt DHT11
#define dhtpin 2 // postavi pin za povezivanje na DHT11
// početak postavki za LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Postavi LCD adresu na 0x3F za displej od 16 karaktera i 2 linije
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// kraj postavki za LCD1602-I2C
Ovo su najvažnije linije za konfiguraciju vašeg postava:
#define dhtpin 2: Ovo definira Arduino pin povezan s data pinom DHT11 senzora. Promijenite broj2ako koristite drugi pin.LiquidCrystal_I2C lcd(0x3F, 16, 2);: Ova linija kreira LCD objekt. Prvi parametar,0x3F, je I2C adresa koju ste pronašli u prethodnom koraku.16i2definiraju broj kolona i redova vašeg displeja. Ažurirajte adresu ako je vaš skener pronašao drugu (npr.0x27).
Kod koristi prilagođenu funkciju, getTemp(), za čitanje temperature i pretvaranje u različite jedinice. Ovo je moćna funkcija koja čini kod ponovno upotrebljivim za različite aplikacije.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//dohvati temp
if(type =='F')
{
return temp * 1.8 + 32;// pretvori u Fahrenheite
}else if(type =='K')
{
return temp + 274.15;// pretvori u Kelvine
}else{
return temp;
}
}
Da biste koristili ovu funkciju, pozivate je s jednim znakovnim argumentom koji predstavlja željenu jedinicu. Na primjer, getTemp('C') vraća temperaturu u Celzijusima, getTemp('F') vraća je u Fahrenheitima, a getTemp('K') vraća je u Kelvinima. Funkcija čita sirovu temperaturu sa senzora DHT11 i primjenjuje potrebnu formulu pretvorbe. Ovo vam omogućava da lako promijenite prikazanu jedinicu u glavnoj loop() petlji bez ponovnog pisanja logike čitanja senzora. Glavna petlja ispisuje temperaturu i vlažnost na LCD pomoću funkcija lcd.setCursor() i lcd.print() kako bi kontrolirala gdje se vrijednosti pojavljuju na ekranu.
Prikazivanje simbola stepena
Standardni HD44780 LCD skup znakova ne uključuje namjenski simbol stepena (°). Da biste ga prikazali, morate koristiti funkciju lcd.write() s decimalnom vrijednošću znaka iz LCD ROM-a. Za simbol stepena, ova vrijednost je 223. Kod to demonstrira koristeći lcd.print((char)223); za ispis simbola nakon vrijednosti temperature. (u videu na 30:16)
Demonstracija uživo projekta
Nakon što se kod prenese, ekran će prikazati poruku pokretanja prije nego što se očisti i prikaže trenutnu temperaturu i vlažnost. Prvi red ekrana prikazuje tekst "LCD1602 DHT11", dok drugi red prikazuje temperaturu u Celzijusima, praćenu simbolom stepena i "C", a zatim temperaturu u Fahrenheitima, praćenu simbolom stepena i "F". Vrijednost vlažnosti ispisuje se na serijski monitor. Demonstracija u videu prikazuje ekran koji se ažurira svake pola sekunde dok se senzor drži, precizno odražavajući uvjete okoline. (u videu na 29:42)
Prikazivanje napona s potenciometra na LCD-u obrađeno je u Lekciji 20/31: Prikazivanje napona na LCD1602.
Korištenje istog LCD-a za prikaz udaljenosti s ultrazvučnog senzora obrađeno je u Lekciji 20/31: Korištenje LCD1602 s Arduinom za prikaz temperature, napona i udaljenosti | Robojax.
Povezani projekti iz ovog videa
- Lekcija 20/31: Korištenje LCD1602 s Arduinom za prikaz temperature, napona i udaljenosti | Robojax
- Lekcija 20/31: Prikazivanje napona na LCD1602
Poglavlja
- [00:00] Uvod u LCD1602 i pregled projekta
- [01:30] Objašnjenje LCD1602 hardvera i I2C modula
- [02:47] Podešavanje kontrasta LCD-a
- [03:14] LCD pinout i konfiguracija I2C adrese
- [05:28] Dijagram povezivanja za LCD1602
- [06:16] Instalacija LiquidCrystal_I2C biblioteke
- [08:11] Pronalaženje I2C adrese sa skenerom
- [09:28] Osnovni kod za ispis teksta na LCD
- [11:10] Primjeri: trepćući kursor i prilagođeni znakovi
- [13:46] Kreiranje i korištenje prilagođenih znakova
- [18:51] Primjer serijskog prikaza
- [23:16] Skrolovanje teksta na LCD-u
- [24:36] Kombiniranje DHT11 senzorskog koda s LCD-om
- [30:16] Prikazivanje simbola stepena
- [32:03] Uklanjanje decimalnih tačaka s temperature
- [33:00] Prikazivanje napona s potenciometra na LCD-u
- [35:56] Prikazivanje udaljenosti s ultrazvučnog senzora
/*
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;
}
}
Stvari koje bi vam mogle zatrebati
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Resursi i reference
-
DokumentacijaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
EksternoPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Datoteke📁
Arduino biblioteke (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
Korisnički priručnik
-
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