18 de fevereiro de 2022

Visão Meteorológica com sensores DHT22 e LDR

Visualizando a temperatura, umidade e luminosidade ambiente através de um display LCD.

A umidade e a luminosidade são exibidas em porcentagem, e a temperatura em graus celsius.

O projeto utiliza o sensor DHT22 para realizar as leituras de umidade e temperatura, e um LDR para leitura da luminosidade.

O sensor DHT22 possui o mesmo funcionamento do DHT11, porém, com maior resolução de leitura. É composto por um sensor capacitivo e um termistor NTC que permitem, respectivamente, leituras de umidade e temperatura em um único módulo.

Para a luminosidade é utilizado o LDR, um resistor variável de acordo com a luz incidente.

Os valores das leituras dos sensores são exibidos em um LCD 16x2 conectado a um módulo I2C, para comunicação com os pinos A4 e A5 do Arduino (SDA e SCL).

Um Arduino Nano como controlador dos sensores e LCD.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*---------------------------------------------------------
  Programa : VISÃO METEOROLÓGICA COM DHT22 E LDR
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 27/06/2020
  ---------------------------------------------------------*/
#include <DHT.h>               //https://github.com/adafruit/DHT-sensor-library
#include <LiquidCrystal_I2C.h> //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

#define DHTTYPE DHT22
#define DHTPIN  2
#define LDR     A0

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F, 16, 2); //LCD 16x2 no endereço 0x3F
bool screen = true;

void setup() {
  //Inicializa o sensor de umidade e temperatura DHT22
  dht.begin();

  //Inicializa o lcd
  lcd.begin();
}

void loop() {
  //Leitura do sensor DHT22
  double h = dht.readHumidity();
  double t = dht.readTemperature();

  //Verifica se alguma das leituras falhou, reiniciando o loop para nova leitura
  if (isnan(h) || isnan(t)) return;

  //Leitura do sensor de luminosidade LDR
  int valueLDR = map(analogRead(LDR), 0, 1023, 0, 100);

  //Escreve os valores no LCD
  if (screen) {
    screen = false;
    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("TEMP    UMIDADE");
    lcd.setCursor(1, 1);
    lcd.print(t, 1);
    lcd.setCursor(10, 1);
    lcd.print(h, 1);
  } else {
    screen = true;
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("LUMINOSIDADE");
    lcd.setCursor(7, 1);
    lcd.print(String(valueLDR) + "%");
  }

  delay(5000);
}

4 comentários: