Segue sketch do meu projeto com DHT11 com acionamento de rele e alarme por baixa ou alta temperatura.
Só uma dúvida: gostaria de saber como fazer uma função para quando o rele armar ficar pelo menos 3 minutos sem rearmar, porque variação rapida de temperatura faz com que o rele arme e desarme rapidamente, e como eu quero usar em um equipamento de ar condicionado isso não pode acontecer, o mesmo caso para quando o rele desarme, mais eu não queria alterar o tempo de leitura que é de 2 em 2 segundos.
#include <dht11.h>//Biblioteca dht11.
#include <LiquidCrystal.h>//Biblioteca LCD 16X2.
#define dht_dpin A1 //Pino DATA do Sensor (Pino 2) ligado na porta Analogica A1.
dht11 DHT;
int rele=8;//Define o pino 8 como pino de sinal para o rele.
int alarme=9;//Define o pino 9 como pino de alarme.
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);//Pinos do arduino onde estão ligados
//os pinos do display.
void setup()
{
pinMode(alarme,OUTPUT);
pinMode(rele,OUTPUT);
lcd.begin(16, 2);//Inicializando o LCD e informando o tamanho de 16 colunas e 2 linhas.
Serial.begin(9600);
delay(1000);//Aguarda 1 seg antes de acessar as informações do sensor.
Serial.println("Bem-Vindo!");
lcd.setCursor(3,0);//Posiciona o cursor do LCD.
lcd.print("Bem-Vindo!");
delay(2000);
lcd.clear();
Serial.println("Leandro Agapito");
lcd.setCursor(0,0);
lcd.print("Leandro Agapito");
Serial.println("IFMT-CUIABA-MT");
lcd.setCursor(0,1);
lcd.print(" IFMT-CUIABA-MT");
delay(4000);
lcd.clear();//Limpa o display.
}
void loop()
{
DHT.read(dht_dpin);
Serial.print("UMIDADE-TEMPERATURA ");
Serial.print(DHT.humidity);
Serial.print(" ");
Serial.print("");
Serial.print(DHT.temperature);
Serial.println("");
lcd.setCursor(0,0);
lcd.print("UMIDADE");
lcd.setCursor(12,0);
lcd.print(DHT.humidity);
lcd.print(" %");
lcd.setCursor(0,1);
lcd.print("TEMPERATURA");
lcd.setCursor(12,1);
lcd.print(DHT.temperature);
lcd.print(" C");
delay(2000);
{
if(DHT.temperature>=24)//Se temperatura for maior ou igual a 28 graus, aciona o rele.
digitalWrite(rele,HIGH);
else
digitalWrite(rele,LOW);
if(DHT.temperature>=20&&DHT.temperature<=28)
noTone(alarme);
else
tone(alarme,500,1000);
}
}
Tags:
Acredito que se colocar o trecho que liga/desliga o relé dentro de um "temporizador" pode resolver o problema.
O temporizador poderia ser com a função millis();
http://labdegaragem.com/profiles/blogs/tutorial-sobre-timer-no-arduino
Ajusta o "interval" para os 3 minutos que deverá funcionar (lembrando que esse valor deve ser em milisegundos).
Ola pelo q entendi, nao é necessariamente o tempo , mas vc nao quer q o rele fique armando e desarmando? se for isso. pode apenas mudar a logica do IF.. nao testei apenas é uma ideia pq nao trabalho com arduino, troque :
if(DHT.temperature>=24)//Se temperatura for maior ou igual a 28 graus, aciona o rele.
digitalWrite(rele,HIGH);
else
digitalWrite(rele,LOW);
por
if(DHT.temperature>=24)//Se temperatura for maior ou igual a 24 graus, aciona o rele.
digitalWrite(rele,HIGH);
if(DHT.temperature<=22)//Se temperatura for maior ou igual a 22 graus, desliga o rele.
digitalWrite(rele,LOW);
assim vc terá um histerese de 2 graus ou o q desejar
Veja esse tópico. Pode ser util.
Vou tentar esses métodos e posto os resultados, quando estiver ok posto o esquema de montagem pra quem quiser, abraços.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por