// Bibliotecas----------------------------------------------------------
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
// Constantes e variáveis-----------------------------------------------
#define DHTPIN 32 // Pino onde o DHT22 está conectado
#define DHTTYPE DHT22 // Modelo do sensor
DHT dht(DHTPIN, DHTTYPE);
// GPIO onde o DS18B20 está conectado
const int OneWireBus = 4;
// Instância OneWire para o DS18B20
OneWire oneWire(OneWireBus);
DallasTemperature sensors(&oneWire);
// LCD I2C no endereço 0x27 com 16 colunas e 2 linhas
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variáveis de leitura
float temp = 0, umid = 0;
float tempSoma = 0, umidSoma = 0;
float tempMedia = 0, umidMedia = 0;
void setup() {
Serial.begin(115200);
sensors.begin();
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
// Leitura do DS18B20
sensors.requestTemperatures();
float temperaturaC = sensors.getTempCByIndex(0);
float temperaturaF = sensors.getTempFByIndex(0);
// Cálculo da média de temperatura e umidade do DHT22
tempSoma = 0;
umidSoma = 0;
for (int i = 0; i < 100; i++) {
temp = dht.readTemperature();
umid = dht.readHumidity();
tempSoma += temp;
umidSoma += umid;
delay(10); // pequena pausa entre leituras
}
tempMedia = tempSoma / 100.0;
umidMedia = umidSoma / 100.0;
//variavel abs para comparar as medições
float diferença = abs(temperaturaC - tempMedia);
// Exibe a temperatura do DS18B20 no Serial Monitor
Serial.print("DS18B20: ");
Serial.print(temperaturaC);
Serial.println(" ºC");
Serial.print("DS18B20: ");
Serial.print(temperaturaF);
Serial.println(" ºF");
// Exibe a média do DHT22 no Serial Monitor
Serial.print("DHT22 - Temp média: ");
Serial.print(tempMedia);
Serial.println(" ºC");
Serial.print("DHT22 - Umidade média: ");
Serial.print(umidMedia);
Serial.println(" %");
//comparação dos valores de medição
Serial.print("Diferença das leituras = ");
Serial.print(diferença);
//Exibe a temperatura no LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DSc = ");
lcd.print(temperaturaC);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("DSf = ");
lcd.print(temperaturaF);
lcd.print(" F");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DHTt = ");
lcd.print(tempMedia);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("DHTu = ");
lcd.print(umidMedia);
lcd.print("%");
delay(4000);
}
// RESPOSTA A PERGUNTA DO EXERCICIO:
//sobre a pergunta do exercicio podemos afirmar sim que os valores medidos sao iguais.
//pois com a ajuda da variavel "ABS" para fazer a diferença dos dois sensores,
//vemos que nao temos restos ao igualarmos os valores nos sensores, ou seja sao iguais.