Go Down

Topic: Arduino uno + Dht11 activar 2 relays Ajuda Pf (Read 3822 times) previous topic - next topic

josesilva

Jul 10, 2015, 12:50 pm Last Edit: Jul 17, 2015, 03:33 am by josesilva
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

josesilva

#1
Jul 11, 2015, 12:20 pm Last Edit: Jul 11, 2015, 12:25 pm by josesilva
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



luisilva

Não me parece muito complicado de fazer. O maior problema é a parte de:
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.

josesilva

#3
Jul 12, 2015, 02:18 am Last Edit: Jul 16, 2015, 11:30 am by josesilva
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

tecdiego

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


Code: [Select]

#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

josesilva

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

luisilva

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

josesilva

#7
Jul 18, 2015, 02:56 am Last Edit: Jul 18, 2015, 03:32 am by josesilva
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

luisilva

Mas o erro:
Code: [Select]
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.

josesilva

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 

luisilva

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:
Code: [Select]

#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.

josesilva

#11
Jul 18, 2015, 12:16 pm Last Edit: Jul 18, 2015, 12:52 pm by josesilva
já dá  fixe  Obrigado muito mas muito obrigado Vc é o maior
vou testar a ver como funciona  :)  ;)

Obrigado

josesilva

#12
Jul 18, 2015, 05:34 pm Last Edit: Jul 18, 2015, 05:36 pm by josesilva
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

luisilva

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

josesilva

#14
Jul 18, 2015, 05:52 pm Last Edit: Jul 18, 2015, 08:04 pm by josesilva
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

Go Up