// After running the simulator, click on the DS18B20 chip to change the temperature
// Chip by bonnyr, source code: https://github.com/bonnyr/wokwi-ds1820-custom-chip/
//https://wokwi.com/projects/358129234661487617
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DHT.h>
#include <LiquidCrystal.h>
OneWire oneWire(8);
DallasTemperature sensor(&oneWire);
DHT dht(9,DHT22); // Declara objeto do tipo DHT
float umid, temp, senterm; // Declara variáveis
LiquidCrystal lcd (2, 3, 4, 5, 6, 7);;
void setup(void) {
Serial.begin(9600);
delay(2);
sensor.begin();
dht.begin(); // Inicializa objeto dht
delay(20);
lcd.begin(16,2);
// print a message to the LCD
//lcd.backlight();
//lcd.setCursor(2,3);
//lcd.print("Lernfeld LF07-V2");
}
void loop(void) {
sensor.requestTemperatures();
Serial.print("Temperature is: ");
delay(10);
Serial.println(sensor.getTempCByIndex(0));
delay(1000);
umid = dht.readHumidity(); // Lê umidade
temp = dht.readTemperature(); // Lê temperatura
senterm = dht.computeHeatIndex(temp,umid,false);//sensação térmica true=farenheit e false=graus celsius
Serial.print("\n\nUmidade: ");
Serial.print(umid); // Exibe umidade
Serial.print(" %");
Serial.print("\nTemperatura: ");
Serial.print(temp); // Exibe temp.
Serial.print(" °C");
Serial.print("\nSensação Térmica: ");
Serial.print(senterm);
Serial.println(" °C");
delay(2000);
// Wait a few seconds between measurements.
//delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
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);
//float f = dht.readTemperature(false);
//lcd.setCursor(0,0);
//lcd.print("Messung laeuft");
lcd.setCursor(0,0);
//lcd.print("Temp: "+String(t,1) +" C");
lcd.print("T2: "+String(t,1) +" C");
lcd.setCursor(0,1);
//lcd.print("F: "+String(h,1) + " %");
lcd.print("UR: "+String(h,1) + " %");
}
// ################ Vou colocar 2 sketch que funcionaram separados ####
// 1) Sketch do DB18S20
// 2) Sketch do DHT22
// ####### Meu sketch que tá com muitos erros ######
/*
//2023_08_10_Temperatura_Umidade_DHT22_DB18S20_LCD_Uno
#include <SdFat.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h> // Incluindo a biblioteca do LCD
LiquidCrystal lcd (2, 3, 4, 5, 6, 7); //Definindo os pinos de controle do LCD (RS, E, D4, D5, D6, D7). programa da apostila aula 6A
//#define dados 8 //No original estava no pino 2 (eu já usava) coloquei o 8
OneWire oneWire(dados); /*Protocolo OneWire*/
DallasTemperature sensors(&oneWire); /*encaminha referências OneWire para o sensor
SdFat sdCard;
SdFile meuArquivo;
#include <DHT.h> //Biblioteca indicada pelo ìtalo p inserir: DHT sensor library versão 1.4.4
#include <DHT_U.h> //Veio junto com a bibloteca acima
#define DHTPIN 9 // Definindo o pino 9 como o pino de dados do DHT22.
#define DHTTYPE DHT22 // Definindo o sensor DHT22.
DHT dht(DHTPIN, DHTTYPE); // Inicializando a biblioteca do sensor DHT22.
char temperatura[] = "A=00.0 "; // É a temperatura lida do DHT22 (Eu criei no pgm com o DB18S20), vou chamar de "A" (Não vai aparecer a letra C (Centigrados)
char umidade [] = "Umid.= 00.0 %"; // Criando a váriável "umidade" e iniciando zerada.
const int chipSelect = 10;
const int PINO_ONEWIRE = 8; // Estou usando o NANO então mudei p 8
OneWire oneWire(PINO_ONEWIRE); // Cria um objeto OneWire
DallasTemperature sensor(&oneWire); // Informa a referencia da biblioteca dallas temperature para Biblioteca onewire
DeviceAddress endereco_temp; // Cria um endereco temporario da leitura do sensor
void setup()
{
Serial.begin(9600); //Eu inclui p depurar
Serial.println(" Leitura nos Sensores DHT22 e DB18S20 "); /*Printa "Demonstração do funcionamento do sensor"
sensors.begin(); /*inicia biblioteca
lcd.begin(16, 2); // Inicializando e definindo o número de colunas e linhas do LCD
dht.begin(); // Inicializando o sensor DHT22.
sensor.begin();
if(!sdCard.begin(chipSelect,SPI_HALF_SPEED))sdCard.initErrorHalt();
}
void loop()
{
if (!meuArquivo.open("Grava_temperatura.txt", O_RDWR | O_CREAT | O_AT_END)) // Abre o arquivo LER_POT.TXT
{
sdCard.errorHalt("Erro na abertura do arquivo Grava_temperatura.txt!");
}
Serial.print(" Leitura DB18S20");
sensors.requestTemperatures(); /* Envia o comando para leitura da temperatura
sensor.requestTemperatures(); // Envia comando para realizar a conversão de temperatura
if (!sensor.getAddress(endereco_temp,0)) { // Encontra o endereco do sensor no barramento
Serial.println("SENSOR NAO CONECTADO"); // Sensor conectado, imprime mensagem de erro
} else {
Serial.print("Temperatura = "); // Imprime a temperatura no monitor serial
Serial.println(sensor.getTempC(endereco_temp), 1); // Busca temperatura para dispositivo
}
delay(1000);
/*******************************************************************
Serial.println(); /*Para pular umalinha
Serial.print("T(DB18S20) = ");
Serial.println(sensors.getTempCByIndex(0)); /* Endereço do sensor - Valor da temperatura do sensor DB18S20
//Serial.println(" Temperatura lida do DB18S20");
delay(2000); // Esperando 2s entre leituras
Serial.print(" Leitura DHT22");
Serial.print("T(DHT22 e UR(%))= ");
int UR = dht.readHumidity() * 10; // fazendo a leitura da umidade.
int Temp = dht.readTemperature() * 10; // Fazendo a leitura da temperatura em graus Celcius.
//Serial.print(" Temp="); //Para depuração e entender a conta "(Temp / 100) % 10 + 48;"
Serial.println(Temp);
if (isnan(UR) || isnan(Temp)) // " || = OU lógico" (isnan: Is Not a Number) Verificando se ocorreu alguma falha de leitura.
//Se ocorrer, ele monstra "Erro" tenta ler novamente.
//Verifica se a umidade ou temperatura são ou não um número
{
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Erro");
Serial.println("erro");//Eu inclui
return;
}
if(Temp < 0)
{
temperatura[6] = '-';
Temp = abs(Temp); //abs "Calcula o módulo (ou valor absoluto) de um número"
}
else
temperatura[2] = (Temp / 100) % 10 + 48; //O + 48 é só p adicionar o algarismo 0(zero)
temperatura[3] = (Temp / 10) % 10 + 48;
temperatura[5] = Temp % 10 + 48;
temperatura[6] = 223; // Gerar o símbolo de graus no LCD.
if(UR >= 1000)
umidade[6] = '1';
else
umidade[6] = ' ';
umidade[7] = (UR / 100) % 10 + 48;
umidade[8] = (UR / 10) % 10 + 48;
umidade[10] = UR % 10 + 48;
lcd.setCursor(0, 0); // Posiciona o cursor na linha 1 e coluna 1 do LCD.
lcd.println(temperatura); // escreve o valor da temperatura no LCD, temperatura do DHT22 (temperatura[] = "A=00.0 ")
Serial.println(temperatura);//Eu inclui
lcd.setCursor(0, 1); // Posiciona o cursor na linha 2 e coluna 1 do LCD.
//UR = umidade[];
lcd.print(umidade); // Escreve o valor da umidade no LCD, lida do DHT22
lcd.setCursor(9,0 );
lcd.print("B="); //Temperatura lida do DB18S20
lcd.print(sensors.getTempCByIndex(0)); //Temperatura lida do DB1820
Serial.println(umidade);//Eu inclui
delay(1000);
//}
meuArquivo.println("2024_02_19_Grava_Cartao_SD_V2");
meuArquivo.print("Leitura Temperatura: ");
meuArquivo.println(sensor.getTempC(endereco_temp));
meuArquivo.print(" Leitura DHT22");
meuArquivo.println(temperatura);
meuArquivo.print(umidade);
meuArquivo.close();
}*/