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
-
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.
-
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)
-
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...
-
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
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.
-
Queres que esteja ligado entre as 13 e as 15 e o resto do tempo desligado?
Então é isto:
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 é:
hora = now.hour();
if (hora >= 13 && hora < 15) digitalWrite(relay2, HIGH);
else digitalWrite(relay2, LOW);
-
Desculpa, tinha lido à pressa :-[ Mas já te responderam.
-
Tens mais elses que if's, assim nunca funciona.
-
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??
-
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:
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...
-
Não podes ter condições no else.
-
Não podes ter condições no else.
Pode-se...
-
Não podes não...
Apenas no else if.
-
Não podes não...
Apenas no else if.
Podes ter um if dentro de outro ou um if dentro de um else.
-
...
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 ^^
-
Desculpa, pensava que estavas a dizer que não podias ter um if dentro de um else.