Pretraži kod

Lekcija 27: Korištenje DHT11 senzora temperature s LCD ekranom | Arduino korak-po-korak kurs

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.

DHT11 Module

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 DHT11 modula i LCD1602

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 biti 0x27 ovisno o proizvođaču. Druga dva parametra, 16 i 2, 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

Slike

DHT11 Module
DHT11 Module
DHT11 module LCD1602 wiring
DHT11 module LCD1602 wiring
521-Lesson 27: Using a DHT11 Temperature Sensor with an LCD Screen | Arduino Step-by-Step Course
Jezik: C++
/*
 * 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

Resursi i reference

Datoteke📁

Fritzing datoteka

Korisnički priručnik

Ostale datoteke