collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Controlando relay com RTC  (Lida 6047 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline matheus.mattia

  • Mini Robot
  • *
  • Mensagens: 10
Controlando relay com RTC
« 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.



Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Controlando relay com RTC
« Responder #1 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

Offline matheus.mattia

  • Mini Robot
  • *
  • Mensagens: 10
Re: Controlando relay com RTC
« Responder #2 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

Primeiramente obrigado pela resposta, mas já estou com ele montado e funcionando, a dúvida era no código mesmo...

Offline matheus.mattia

  • Mini Robot
  • *
  • Mensagens: 10
Re: Controlando relay com RTC
« Responder #3 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.
« Última modificação: 23 de Agosto de 2012, 10:27 por matheus.mattia »

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Controlando relay com RTC
« Responder #4 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);
« Última modificação: 23 de Agosto de 2012, 13:50 por Pedrock »

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Controlando relay com RTC
« Responder #5 em: 23 de Agosto de 2012, 13:34 »
Desculpa, tinha lido à pressa  :-[ Mas já te responderam.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Controlando relay com RTC
« Responder #6 em: 23 de Agosto de 2012, 21:50 »
Tens mais elses que if's, assim nunca funciona.
Avr fanboy

Offline matheus.mattia

  • Mini Robot
  • *
  • Mensagens: 10
Re: Controlando relay com RTC
« Responder #7 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??

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Controlando relay com RTC
« Responder #8 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...
« Última modificação: 24 de Agosto de 2012, 12:17 por Pedrock »

Offline rsoares

  • Mini Robot
  • *
  • Mensagens: 64
Re: Controlando relay com RTC
« Responder #9 em: 24 de Agosto de 2012, 12:41 »
Não podes ter condições no else.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Controlando relay com RTC
« Responder #10 em: 24 de Agosto de 2012, 13:17 »
Não podes ter condições no else.
Pode-se...

Offline rsoares

  • Mini Robot
  • *
  • Mensagens: 64
Re: Controlando relay com RTC
« Responder #11 em: 24 de Agosto de 2012, 13:43 »
Não podes não...
 Apenas no else if.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Controlando relay com RTC
« Responder #12 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.

Offline rsoares

  • Mini Robot
  • *
  • Mensagens: 64
Re: Controlando relay com RTC
« Responder #13 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 ^^

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Controlando relay com RTC
« Responder #14 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.