DHT11 temperature and humidity sensor with 1602 i2C LCD display - Arduino for beginners

Discutii despre placile de dezvoltare compatibile Arduino
User avatar
Levy
Gold User
Posts: 1538
Joined: 02 Oct 2013 15:07
Location: ABSURDISTAN

DHT11 temperature and humidity sensor with 1602 i2C LCD display - Arduino for beginners

Unread postby Levy » 25 Jun 2021 19:43

Pentru incepatori, un senzor de temperatura DHT11 si un ecran LCD 1602 cu interfata i2C, conectat la arduino si testat intr-o zi foarte fierbinte de vara.

Schema legaturilor
Image

Codul pe care l-am incarcat pe Arduino Uno

Code: Select all

#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  Serial.println(F("Senzor de temperatura si umiditate cu display 1602 cu interfata i2c"));
lcd.init();


   lcd.backlight();
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Daradici Levente");
  lcd.setCursor(2,1);
   lcd.print("DHT11 Senzor");
  delay(3000);
  lcd.clear();
  dht.begin();
}

void loop() {
  delay(3000);

  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Temp: ");
  lcd.setCursor(9,0);
   lcd.print(t);
  lcd.setCursor(14,0);
  lcd.print((char)223);
  lcd.setCursor(15,0);
  lcd.print("C");
  lcd.setCursor(0,1);
   lcd.print("Umid:");
  lcd.setCursor(9,1);
   lcd.print(h);
  lcd.setCursor(15,1);
   lcd.print("%");
  Serial.print(F("Umiditate: "));
  Serial.print(h);
  Serial.print(F("%  Temperatura: "));
  Serial.print(t);
  Serial.println(F("°C "));

}

si un scurt video despre cum se construieste si functionarea intr-o zi foarte calduroasa, cu senzorul scos direct la soare.
phpBB [video]
Dacă ai tăiat și ultimul copac, ai otrăvit și ultimul râu și ai prins și ultimul pește, ai să fi uimit să constați că banii nu sunt comestibili !

Image
User avatar
delta2k2
Site Admin
Posts: 1990
Joined: 11 Sep 2013 15:18
Location: Over the rainbow ...

Re: DHT11 temperature and humidity sensor with 1602 i2C LCD display - Arduino for beginners

Unread postby delta2k2 » 26 Jun 2021 07:42

Bună treabă pentru primul pas.
Dacă vrei precizie și fiabilitate mai mare, îți recomand să folosești DHT22.

Mai poți folosi și AM2320 (comunică prin I2C). Practic, poți pune senzorul de temperatură și display-ul pe aceleași fire, făcând "economie" de porturi.
User avatar
Levy
Gold User
Posts: 1538
Joined: 02 Oct 2013 15:07
Location: ABSURDISTAN

Re: DHT11 temperature and humidity sensor with 1602 i2C LCD display - Arduino for beginners

Unread postby Levy » 02 Sep 2021 22:05

S-au adus mici modificari:
-pentru citirea temperaturii s-a adaugat senzorul Dallas DS18B20
-pentru citirea umiditatii a ramas DHT11
-pentru presiune atmosferica s-a adaugat un BMP280, care stie si temperatura si altitudine, dar am folosit senzorul doar pentru presiune atmosferica.

Schema electrica in acest moment arata cam asa:
Image

Iar codul in pastebin i-l puteti descarca de aici.

Am facut si un mic video
phpBB [video]


Ca o curiozitate, toti cei 3 senzori pot citi temperatura, deci nu era chiar nevoie de toti 3 senzorii, insa la inceput, am comparat temperaturiile date de cei 3 senzori. In mod foarte curios doar unul era cu aproape 1* mai mare decat ceilalti doi senzori, iar cei care erau apropiati, erau decalati la o distanta de aproximativ 0,2*C.

Senzorul BMP280 poate sa ne dea si altitudinea, cred ca este in functie de presiunea atmosferica, sau cine stie cum o sesizeaza, insa acesta este relativ gresit, masuratori in acelasi loc in zile diferite dau altitudini diferite. In mod curios vre-o 2 zile afisa si altitudinea corecta, care a fost verificata cu ajutorul unei aplicatii android de pe un telefon.

Probabil trebuie cumva calibrata aceasta posibilitate, insa deocamdata nu am idee cum se poate face acesta.

Am cateva proiecte in cap, am si senzorii si componentele, insa timpul liber foarte limitat ma opreste sa ma apuc de ceva mai stufos.
Dacă ai tăiat și ultimul copac, ai otrăvit și ultimul râu și ai prins și ultimul pește, ai să fi uimit să constați că banii nu sunt comestibili !

Image

Return to “Arduino”

Who is online

Users browsing this forum: No registered users and 5 guests