Sensor de temperatura dht11 acionando um rele


#1

Estou tendo problema para ligar um sensor dht11 com um relé simples para ligar em 18 graus e desligar em 9 graus alguém pode me ajudar com um cód fonte


#2

Seria bom se desse mais detalhes do seu projeto, tipo qual placa está usando (Esp32, Esp8266, Arduino…).


#3

Zellmer, Desenvolvi uma placa que, entre outras coisas, faz exatamente o que você precisa. Lê a temperatura dos sensores e aciona o relê quando necessário. E funciona muito bem. Ocorre que é necessário desenvolver um pequeno algoritmo, porque as leituras não são precisas e corre o risco de o relê ficar mudando de estado muito rapidamente.
Só que precisei de dois CI’s então as informações são trocadas via RX/TX.
O calculo que usei para ter uma leitura mais precisa foi o seguinte:

void Entrada() {
int i;
int a;
int aux;
int cont = 6;
for (i = 0; i < cont; i++) {
Thermistor temp(A2);
entrada = temp.getTemp();
media[i] = entrada;
delay(500);
}
for (a = 1; a < cont; a++) {
for (i = 0; i < cont - 1; i++) {
if (media[i] > media[i + 1]) {
aux = media[i];
media[i] = media[i + 1];
media[i + 1] = aux;
}
}
}
entrada = 0;
for (i = 1; i < cont - 1; i++) {
entrada += media[i];
}
cont = cont - 2;
entrada = entrada / cont;
lcd.setCursor(0, 0);
lcd.print("Entrada: “); lcd.print(entrada); lcd.print(” C ");

O código para acionar o relê no CI master

void Ajusta_temp() {

if (Relay1_State == 0) {
if (cooler <= 6) {
digitalWrite(6, HIGH);
Serial.print(’'); Serial.print("Relay1_OF"); delay(10); digitalWrite(8, LOW); Relay1_State = 1; } if (cooler > 6) { digitalWrite(6, LOW); } if (entrada <= tempMin) { Serial.print('’); Serial.print(“Relay1_OF”);
delay(10);
Relay1_State = 1;
}
if (entrada > tempMin && entrada <= tempMax) {
Serial.print(’'); Serial.print("Relay1_OF"); delay(10); Relay1_State = 1; } } if (Relay1_State == 1) { if (entrada > tempMax && cooler > 6) { Serial.print('’); Serial.print(“Relay1_ON”);
delay(10);
Relay1_State = 0;
}
if (retorno >= tempMax * 1.1 && cooler > 6 && entrada > tempMin) {
delay(10);
Serial.print(’$’); Serial.print(“Relay1_ON”);
Relay1_State = 0;
}
}
}

acionamento no no CI Slave:

void Incoming_Relay1() {

if (Serial.available() > 0) {
delay(10);
while (Serial.available()) {
inChar = (char)Serial.read();
relay1 += String(inChar);
}
}
inChar = “”;
index = relay1.lastIndexOf(’'); relay1 = relay1.substring(index + 1, 11); if (relay1.equals("Relay1_OF")) { digitalWrite(Relay_1, Relay_OFF); delay(50); if (analogRead(Relay_1 ) == 0) { Serial.print('’); Serial.print(“OF”);
}
}
if (relay1.equals(“Relay1_ON”)) {
digitalWrite(Relay_1, Relay_ON);
delay(50);
if (analogRead(Relay_1 ) == 1) {
Serial.print(’$’); Serial.print(“ON”);

}
relay1 = "";

}
}