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);
   
}
   }

Exibições: 2010

Responder esta

Respostas a este tópico

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

Vou tentar esses métodos e posto os resultados, quando estiver ok posto o esquema de montagem pra quem quiser, abraços.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço