LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: matheus.mattia em 23 de Agosto de 2012, 07:03

Título: Controlando relay com RTC
Enviado por: matheus.mattia em 23 de Agosto de 2012, 07:03
E ai galera, estou fazendo um sistema para automatização de um grow para pequenas plantas. Estou usando um DS1307, 3 relays para controle de luz, irrigação e ventilação, dois LM35 para controle de temperatura dentro e fora do grow e também duas pontas de prova para controle de umidade do solo.

Tenho algumas duvidas e gostaria da ajuda de vocês.

-Como faço para ativar o relay 18hrs por dia, começando um horário programado? (preciso de ajuda com o código)

-Para ligar a ventilação, estou fazendo a seguinte lógica:

void ligarVent(){
  val = digitalRead(relay1);
  if(tempInt >= 30.00){
      if((tempInt - tempExt) >= 3.00){if(val == HIGH){}
          else{digitalWrite(relay1, HIGH);}
                else{digitalWrite(relay1, LOW);}}
                      else{digitalWrite(relay1, LOW);}}


Ele está lendo ambas as temperaturas, dentro e fora, caso a temperatura interna esteja muito alta, ele calcula se a externa está mais baixa (mais de 3ºC de diferença), caso esteja, liga a ventilação... O problema que estou tendo é que ao ativar o relay, os valores das temperaturas sobem. A duvida é: Isso está sendo causado por estar alimentando o relay e os sensores com o arduino? Por enquanto estou usando a corrente da entrada USB, mas pretendo usar uma fonte 12V 1A.


Por enquanto são essas as minhas dúvidas, agradeço toda e qualquer ajuda.


Título: Re: Controlando relay com RTC
Enviado por: rglove em 23 de Agosto de 2012, 09:13
Olá, tens aqui este tutorial sobre o RTC ds1307:
http://lusorobotica.com/index.php?topic=681.0 (http://lusorobotica.com/index.php?topic=681.0)
Título: Re: Controlando relay com RTC
Enviado por: matheus.mattia em 23 de Agosto de 2012, 10:19
Olá, tens aqui este tutorial sobre o RTC ds1307:
http://lusorobotica.com/index.php?topic=681.0 (http://lusorobotica.com/index.php?topic=681.0)

Primeiramente obrigado pela resposta, mas já estou com ele montado e funcionando, a dúvida era no código mesmo...
Título: Re: Controlando relay com RTC
Enviado por: matheus.mattia em 23 de Agosto de 2012, 10:25
Consegui fazer por conta o código para ligar e desligar o relay, alguém poderia dar uma conferida se não irá dar nenhum bug com o tempo?

Ficou o seguinte:

Digamos que eu queira ativar o relay as 13:00 e desativar as 15:00

Código: [Seleccione]
hora = now.hour();
 
  if(hora == 13){if(timer == 0){timer = 1;
                  digitalWrite(relay2, HIGH);}else{}}else{};
                 
  if(hora == 15){if(timer == 1){timer = 0;digitalWrite(relay2, LOW);}else{}}else{}
 

o timer é para que ele não fique definindo o relay2 como HIGH toda vez que ele roda a função

Desde já, obrigado.
Título: Re: Controlando relay com RTC
Enviado por: Pedrock em 23 de Agosto de 2012, 11:54
Queres que esteja ligado entre as 13 e as 15 e o resto do tempo desligado?
Então é isto:
Código: [Seleccione]
hora = now.hour();
if (hora >= 13 && hora <= 15) digitalWrite(relay2, HIGH);
else digitalWrite(relay2, LOW);

EDIT: Desta forma vai ligar das 13:00h até às 15:59h.
Para ser das 13:00h às 14:59 é:
Código: [Seleccione]
hora = now.hour();
if (hora >= 13 && hora < 15) digitalWrite(relay2, HIGH);
else digitalWrite(relay2, LOW);
Título: Re: Controlando relay com RTC
Enviado por: rglove em 23 de Agosto de 2012, 13:34
Desculpa, tinha lido à pressa  :-[ Mas já te responderam.
Título: Re: Controlando relay com RTC
Enviado por: senso em 23 de Agosto de 2012, 21:50
Tens mais elses que if's, assim nunca funciona.
Título: Re: Controlando relay com RTC
Enviado por: matheus.mattia em 24 de Agosto de 2012, 03:33
Tens mais elses que if's, assim nunca funciona.

acho que você não contou direito...

E quanto ao problema da alteração da leitura com o ativamento dos relay, alguém??
Título: Re: Controlando relay com RTC
Enviado por: Pedrock em 24 de Agosto de 2012, 12:05
Tens mais elses que if's, assim nunca funciona.

acho que você não contou direito...

E quanto ao problema da alteração da leitura com o ativamento dos relay, alguém??
Acho que ele está a falar disto:
Código: [Seleccione]
void ligarVent(){
  val = digitalRead(relay1);
  if(tempInt >= 30.00){
      if((tempInt - tempExt) >= 3.00){if(val == HIGH){}
          else{digitalWrite(relay1, HIGH);}
                else{digitalWrite(relay1, LOW);}}
                      else{digitalWrite(relay1, LOW);}}
EDIT:
Por acaso tem 3 if e 3 else, mas está de uma forma muito estranha.

Por exemplo:
Isto:
          if(val == HIGH){}
          else{digitalWrite(relay1, HIGH);
Devia estar:
if(val == LOW) digitalWrite(relay1, HIGH);

EDIT2:
E isto:
val = digitalRead(relay1);
Está mal. Não podes ler um output...
Título: Re: Controlando relay com RTC
Enviado por: rsoares em 24 de Agosto de 2012, 12:41
Não podes ter condições no else.
Título: Re: Controlando relay com RTC
Enviado por: Pedrock em 24 de Agosto de 2012, 13:17
Não podes ter condições no else.
Pode-se...
Título: Re: Controlando relay com RTC
Enviado por: rsoares em 24 de Agosto de 2012, 13:43
Não podes não...
 Apenas no else if.
Título: Re: Controlando relay com RTC
Enviado por: Pedrock em 24 de Agosto de 2012, 14:07
Não podes não...
 Apenas no else if.
Podes ter um if dentro de outro ou um if dentro de um else.
Título: Re: Controlando relay com RTC
Enviado por: rsoares em 24 de Agosto de 2012, 15:39
...

Não se pode ter condições no else..

 ex.:
 else(a == b)
{}


PS: No entanto após reler o código, esse erro não foi feito, o layout não ajudou na leitura de qualquer forma fica a info. para os mais novatos ^^
Título: Re: Controlando relay com RTC
Enviado por: Pedrock em 24 de Agosto de 2012, 16:09
Desculpa, pensava que estavas a dizer que não podias ter um if dentro de um else.