Arduino uno + Dht11 activar 2 relays Ajuda Pf

bem eu sou novo em tudo tanto no forum como no Arduino
Eu sou paraplégico a muitos anos e o meu passa tempo é o pc
e eu comprei um Arduino uno e tenho dois dht11 e eu gostaria de o por a funcionar da seguinte forma
que era 2 dht11 e 4 relays em que 1 dht11 me punha a ligar 2 relays com temperaturas diferentes
em que eu teria 2 temperaturas que era ligar quando atingisse +/- 30 graus (podendo mudar) e se desligava +/- 25 graus (podendo se mudar) de temperatura mas caso a temperatura não baixasse então ligava o segundo relay igualmente com temperatura alta e outra baixa para ele se desligar.
eu não sei se dá pra fazer assim seria tb para o segundo dht11 em que eu depois só ligava caso precisasse deles

desde já o meu muito obrigado
será que haverá alguma Alma caridosa que me posa ajudar

ja vi que ninguém pode me ajudar neste problema com o arduino e relays
talvez seja complicado de mais
mas eu não sei pq eu não entendo nada de programação
eu faço como muitos copio as programações da net mas este eu ainda não o encontrei

Não me parece muito complicado de fazer. O maior problema é a parte de:

josesilva:
Eu sou paraplégico a muitos anos e o meu passa tempo é o pc
(...)
será que haverá alguma Alma caridosa que me posa ajudar

Não me parece que esta parte seja relevante para o programa/aplicação que se está a descrever. Se em vez disso tivesse explicado melhor qual é o objectivo deste projecto, neste momento já deveria ter a solução, ou pelo menos algumas respostas. Se quiser explicar melhor:

  • qual é o objectivo deste projecto?
  • porque é que ele tem que funcionar assim?
  • porquê 2 sensores e não apenas 1?
  • como é que está a pensar em alterar as temperaturas?
  • na parte "mas caso a temperatura não baixasse então ligava (...)", não baixe durante quanto tempo?

pode ser que obtenha mais respostas.

obrigado por me ter respondido

qual é o objectivo deste projecto = seria para por a ligar duas ventoinhas ( talvez por dentro de um local fechado
porque é que ele tem que funcionar assim = porque caso a ventoinha numero um não funcionasse activaria a segunda ventoinha (ou um alarme)
porquê 2 sensores e não apenas 1 = eu disse 2 pq eu não sei se dá só com um dht11 desculpe minha ignorância
como é que está a pensar em alterar as temperaturas = me desculpe mas não sei mas as temperaturas no meu ver para por a funcionar dois relays acho eu (mas eu não sei) que devem de ter 2 temperaturas diferentes
na parte "mas caso a temperatura não baixasse então ligava (...)", não baixe durante quanto tempo =
bem seria assim a primeira ventoinha tinha de se ligar mas caso ela avariasse não podia refrescar o local aonde estaria e a temperatura iria subir alem da temperatura que era suposto por a funcionar a primeira ventoinha então accionava o alarme ou relay para ligar a segunda ventoinha
bem em resumo seria 1 dht11 a activar 2 relays com a temperatura mas individualmente mediante as temperaturas programadas

me desculpe se eu não expliquei bem mas seria uma coisa assim e obrigado por a sua compreensão

Caro josesilva esse programa não é complicado, mas o ideal seria você tentar programa-lo, posso lhe ajudar desta vez, vamos lá:

#include "DHT.h"
 
#define DHTPIN A1 // pino que estamos conectado
#define DHTTYPE DHT11 // DHT 11
 
// Conecte pino 1 do sensor (esquerda) ao +5V
// Conecte pino 2 do sensor ao pino de dados definido em seu Arduino
// Conecte pino 4 do sensor ao GND
// Conecte o resistor de 10K entre pin 2 (dados) 
// e ao pino 1 (VCC) do sensor
DHT dht(DHTPIN, DHTTYPE);

float t = dht.readTemperature();
float tempMaxima     = 32.000;
float tempMinimo      = 29.000;
int delayRele2 = 4 // tempo em segundos entre ligar o primeiro relé e o segundo relé
int intervalo = 0;
int rele1 = 5;
int rele2 = 6;

 
void setup() 
{
  Serial.begin(9600);
  dht.begin();
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
}
 
void loop() 
{
  // A leitura da temperatura e umidade pode levar 250ms!
  // O atraso do sensor pode chegar a 2 segundos.
  // testa se retorno é valido, caso contrário algo está errado.
  if (isnan(t) || isnan(h)) 
  {
    Serial.println("Erro ao ler a temperatura do DHT");
  } 
  else
  {
    Serial.print("Temperatura: ");
    Serial.print(t);
    Serial.println(" *C");

    if (t >= tempMaxima){

      digitalWrite(rele1,HIGH);
      if(intervalo == 0){
         intervalo = millis();
      }
      if( (millis() - intervalo) /1000 >= delayRele2) { // se a temperatura não baixar e passar o intervalo desejado, o programa vai ligar o segundo relé
        digitalWrite(rele2,HIGH);
      }
       
    }
    
    if( t<= temMinimo) {

       digitalWrite(rele1,LOW);
       digitalWrite(rele2,LOW);
       intervalo = 0;
    } 

  }

}

código fonte baseado no código do site Felipeflop

Espero ter ajudado, mas espero que você estude um pouco de programação para não depender tanto dos outros.
Abraços

Obrigado mesmo muito obrigado por me ajudar mas infelizmente ele me dá erro nesta linha

DHT dht;//DHTPIN, DHTTYPE);

e eu não sei o que fazer se me pudesse Ajudar novamente

Obrigado e sim era bom eu saber de programação sim mas eu não sei inglês

Isso deverá ser a biblioteca mal instalada. Como instalou a biblioteca? Seguiu este procedimento?

a versão arduino-1.6.5-r2 ja tras DHT Include library
eu faço adicionar mas me dá o mesmo erro

em: DHT dht;//DHTPIN, DHTTYPE);

eu não sei o que fazer
aqui vai o erro que ele me dá

sensortemperatura:14: error: 'DHT' does not name a type
sensortemperatura:16: error: expected primary-expression before '.' token
sensortemperatura:20: error: expected ',' or ';' before 'int'
sensortemperatura.ino: In function 'void setup()':
sensortemperatura:28: error: expected unqualified-id before '.' token
sensortemperatura.ino: In function 'void loop()':
sensortemperatura:38: error: 'h' was not declared in this scope
sensortemperatura:51: error: 'intervalo' was not declared in this scope
sensortemperatura:54: error: 'intervalo' was not declared in this scope
sensortemperatura:60: error: 'temMinimo' was not declared in this scope
sensortemperatura:64: error: 'intervalo' was not declared in this scope
'DHT' does not name a type

Mas o erro:

sensortemperatura:14: error: 'DHT' does not name a type

quer dizer que a biblioteca não está instalada. O Arduino IDE até pode trazer uma versão da biblioteca para comunicar com o sensor DHT, mas não é a mesma que foi utilizada para escrever este sketch.

ups me desculpe eu não sabia poderia me indicar pf aonde eu poderia ir buscar essa biblioteca compatível para poder gravar o sketch

Obrigado e me desculpe

A biblioteca é esta.
Tem que carregar no botão do lado direito da página que diz "Download ZIP". Com o IDE desligado deve pegar no conteúdo do ficheiro e guardá-lo na directoria "\sketchbook\libraries". Depois disso pode abrir o IDE, criar um novo sketch, copiar para lá o código:

#include "DHT.h"

#define DHTPIN A1 // pino que estamos conectado
#define DHTTYPE DHT11 // DHT 11

// Conecte pino 1 do sensor (esquerda) ao +5V
// Conecte pino 2 do sensor ao pino de dados definido em seu Arduino
// Conecte pino 4 do sensor ao GND
// Conecte o resistor de 10K entre pin 2 (dados)
// e ao pino 1 (VCC) do sensor
DHT dht(DHTPIN, DHTTYPE);

float tempMaxima     = 32.000;
float tempMinimo      = 29.000;
int delayRele2 = 4; // tempo em segundos entre ligar o primeiro relé e o segundo relé
int intervalo = 0;
int rele1 = 5;
int rele2 = 6;


void setup()
{
  Serial.begin(9600);
  dht.begin();
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
}

void loop()
{
  // A leitura da temperatura e umidade pode levar 250ms!
  // O atraso do sensor pode chegar a 2 segundos.
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  // testa se retorno é valido, caso contrário algo está errado.
  if (isnan(t) || isnan(h))
  {
    Serial.println("Erro ao ler a temperatura do DHT");
  }
  else
  {
    Serial.print("Temperatura: ");
    Serial.print(t);
    Serial.println(" *C");

    if (t >= tempMaxima){

      digitalWrite(rele1,HIGH);
      if(intervalo == 0){
        intervalo = millis();
      }
      if( (millis() - intervalo) /1000 >= delayRele2) { // se a temperatura não baixar e passar o intervalo desejado, o programa vai ligar o segundo relé
        digitalWrite(rele2,HIGH);
      }

    }

    if( t<= tempMinimo) {

      digitalWrite(rele1,LOW);
      digitalWrite(rele2,LOW);
      intervalo = 0;
    }

  }

}

e ver se funciona. Este código tem algumas correcções em relação ao partilhado inicialmente pelo tecdiego.

já dá fixe Obrigado muito mas muito obrigado Vc é o maior
vou testar a ver como funciona :slight_smile: :wink:

Obrigado

esta a dar bem obrigado
mas uma pergunta ele não faz o reset depois de ele disparar a primeira vez ?
eu digo isso pq ele comigo não faz eu tenho de o desligar pra ele recomeçar a dar bem
pq se eu não o desligo ele me desliga os 2 relays

Obrigado desculpe o incomodo

No programa, o que está definido é que quando a temperatura baixa para além dos 29 graus ele desliga os dois relés.

muito Obrigado VC é o Maior
sim ele desliga os 2 (relays) sim mas depois se ele volta a disparar ele liga os 2 tb o que seria as 2 (ventoinhas) o mesmo tempo e não uma só até fazer o tempo pra ligar a segunda ventoinha
isto é o que eu estou a ver que ele faz com os meus relays
de inicio ele faz isso sim mas depois de disparar a primeira vez ja não o faz ele liga os 2 o mesmo tempo

desculpe a minha pergunta mas daria pra fazer assim ?

1 relay
float tempMaxima = 32.000;
float tempMinimo = 29.000;

e fazer a mesma coisa mas para o segundo relay ?

2 relay
float tempMaxima = 35.000;
float tempMinimo = 32.000;

Obrigado muito Obrigado por a sua Ajuda e desculpe a minha ignorância

Bem, isso deve ficar assim:

#include "DHT.h"

#define DHTPIN A1 // pino que estamos conectado
#define DHTTYPE DHT11 // DHT 11

// Conecte pino 1 do sensor (esquerda) ao +5V
// Conecte pino 2 do sensor ao pino de dados definido em seu Arduino
// Conecte pino 4 do sensor ao GND
// Conecte o resistor de 10K entre pin 2 (dados)
// e ao pino 1 (VCC) do sensor
DHT dht(DHTPIN, DHTTYPE);

float tempMaxima1 = 32.0;
float tempMinima1 = 29.0;
float tempMaxima2 = 35.0;
float tempMinima2 = 32.0;
int delayRele2 = 4; // tempo em segundos entre ligar o primeiro relé e o segundo relé
int intervalo = 0;
int rele1 = 5;
int rele2 = 6;


void setup()
{
  Serial.begin(9600);
  dht.begin();
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
}

void loop()
{
  // A leitura da temperatura e umidade pode levar 250ms!
  // O atraso do sensor pode chegar a 2 segundos.
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  // testa se retorno é valido, caso contrário algo está errado.
  if (isnan(t) || isnan(h))
  {
    Serial.println("Erro ao ler a temperatura do DHT");
  }
  else
  {
    Serial.print("Temperatura: ");
    Serial.print(t);
    Serial.println(" *C");

    if (t >= tempMaxima1){

      digitalWrite(rele1,HIGH);
    }

    else if( t < tempMinima1) {

      digitalWrite(rele1,LOW);
    }

    if (t >= tempMaxima2){

      digitalWrite(rele2,HIGH);
    }

    else if( t < tempMinima2) {

      digitalWrite(rele2,LOW);
    }
  }

}

Essa parte dos pontos existe, só que como vocês não lêem as regras não sabem disso. Basta carregar no "[add]" junto ao "Karma" do lado esquerdo do post que acho útil.