Olá, estou fazendo um timer para irrigação. Mas tenho dificuldades em fazer o tempo em que a bomba ficará ligada. O objetivo é que seja solicitado o valor de um periodo entre 10minutos e 3 horas(maximo), porem o uso de um delay faria com que o programa ficasse travado. Alguem conhece alguma solução ?

Obrigado

Exibições: 1930

Responder esta

Respostas a este tópico

Desculpe José, acabei deixando de responder isso. Então, eu fiz testes das duas maneiras, se entendi bem vc esta perguntando dos reles. Alimentei tanto com uma fonte externa ATX comum de pc como direto com o arduino.

A fonte para o arduino porem foi sempre a mesma. Peguei de um roteador que ja nao uso mais.

Fonte de ATX ou fonte chinesa vai dar na mesma;

O ruido eletrico vai descontrolar o seu Arduino.

Eu sugeri uma bateria....

No meu ponto de vista, terá que colocar filtro na saida da fonte. Capacitor e indutor para bloquear o ruido.

Eu acho que o contactor é que esta gerando o ruido.

Faça outro teste, coloque uma lâmpada comum no lugar do contactor e veja se o Arduino fica descontrolado.

José muito obrigado pela sua recomendação, mas infelizmente nao tenho uma bateria para testar.

Ja fiz esse teste com a lampada, e ao colocar o filtro em paralelo com os contatos do rele rodou normal o sistema. Creio que seja a fonte mesmo, que tipo de fonte vc indicaria para resolver o problema? Como o projeto será fixo acho que não seria viavel eu instalar uma bateria.

Obrigado 

Bateria só para teste !

Não sei que fonte teria uma proteção contra surtos de tensão.

Tem que pesquisar....

Luciano,

Desculpe mas para mim esta confuso, você diz que colocou um filtro nos contatos dos reles e funcionou ok, a fonte alimenta as bobinas dos reles, ou fornece a energia para os contatos dos reles? Se você colocou um filtro nos contatos ( Não sei que tipo de filtro) o que pode ter feito é reduzir o arco voltaico que se produz cada vez que o contato abre ou fecha estando estes com carga, se indutiva mais que quando resistiva a carga.

Se puder esclarecer:

Que filtro usou?

Foi colocado nos contatos dos rele?

Depois de usar este filtro não teve mais o inconveniente que antes tinha?

Se tiver um esquema elétrico ajudaria a entender melhor.

Abs.

Olá Carlos,

Eu quem peço desculpas pela falta de conhecimento. Então a bobina esta sendo alimentada por uma fonte comum. E eu coloquei o filtro entre o NA e o COMUM, não sei se é esse o procedimento correto mas com a lampada funcionou. O arduino deixou de ficar "doido" quando a lampada acende, porem ela fica com um pouco de energia que eu imaginei ser do capacitor.

Mas quando eu troco a lampada pela contatora isso não acontece.Acho que com fotos fica mais facil ..

Anexos

Oi Luciano,

A caixa que usou é de metal? os dois links que usou aqui pra mim não funcional, você mediu entre fase e terra com uma lâmpada incandescente de 100W por exemplo se esta acende com toda intensidade? Para saber se sua haste tem uma resistência igual ou menor a 10ohms.

Abs.

Olá Carlos,

É de metal sim, encontrei uma haste aqui mas nao fiz este teste. Vou fazer, deve ser apenas incandescente?

http://www.maqgutierrez.com.br/imagens/produto/alta/244_quadro_de_c...

veja se agora consegue.

Não cheguei a testar, mas faria diferença se eu colocasse a contatora dentro da caixa?

Obrigado

Sim agora o link esta certo.

Quando me referi em colocar o Arduíno em uma caixa metálica e aterrar, significa isolar a placa de possíveis interferências eletromagnéticas produto da energização e desenergização das bobinas das contatoras que criam um campo por ser uma bobina.

Ao estar a placa em uma caixa fechada de metal, e aterrada, essa energia não desejada seria derivada a terra antes de afetar a placa, que dentro da caixa de metal não sofreria essa interferência.

Sim, na falta do instrumento adequado, que é caro e não teria sentido comprar um, a forma mais viável é usar uma lampada incandescente de 100 ou 200W e verificar se esta acende com toda intensidade, inclusive medir se nos extremos cai uma tensão igual ao da fonte que alimenta, caso seja 220V deveria cai 220V sobre o soquete da lampada, já que o potencial do terra seria o mesmo que o do neutro.

Abs.

 

Olá Pessoal,

O problema da interferência eu consegui resolver criando uma gaiola de faraday com uma caixa de fonte atx aterrada. Funcionou tranquilo.

Porem fui modificar o codigo para acrescentar mais 2 programas de irrigação e o arduino nao esta realizando mais o processo. Para que nao fosse necessário usar delays eu estou calculando o tempo de ligar e desligar os setores e a bomba e deixando uma quantidade bem grande de if's para conferir as condições. Acho que pode ser nisso o problema:

O codigo esta muito grande, vou deixar ele em anexo mas vou citar o trecho que acredito ser o problema

void Bomba()//Tempo que a bomba ficará ligada
{
delay(1000);
while(tBomba >=1)
{
lcd.clear();lcd.setCursor(0,0);lcd.print("Tempo ");lcd.print(tBomba);lcd.print(" minutos");
lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(7,1);lcd.print("(-)");lcd.setCursor(12,1);lcd.print("(+)");
delay(120);
if(tBomba>60){tBomba=1;}
if(digitalRead(bUp)==LOW){delay(70);tBomba++;}
if(digitalRead(bDown)==LOW){delay(70);tBomba--;}
if(digitalRead(bEnter)==LOW){delay(70);tB=tBomba;menu=0;tBomba=0;}
if(digitalRead(bMode)==LOW){menu=0;tBomba=0;}

//Vetores recebem horas e minutos e converte para minutos
//Calculo Programa 1
//Depois acrescenta o valor do tempo de bomba(tB)
//Operação desliga bomba e valvula 4
//Retorna os valores para os vetores com o horario de desligar
//Exemplo: Programa 1 - 6:30 com tempo de bomba 10min
//Em minutos (6*60)+30+10=400minutos
//Tranformando para desligar hora=400/60=6 e minuto=400%60=40

if(h[2]!=0 && h[1]!=0 && h[30]==0 && tB!=0){
h[34]=h[2];h[33]=h[1]; 
h[34]=h[34]*60;h[34]=h[34]+h[33]+(4*tB);h[33]=h[34]%60;h[34]=h[34]/60; 
h[8]=h[2];h[7]=h[1];
h[8]=h[8]*60;h[8]=h[8]+h[7]+tB;h[7]=h[8]%60;h[8]=h[8]/60;//1 tempo(desliga 1 e liga 2)
h[10]=h[2];h[9]=h[1]; 
h[10]=h[10]*60;h[10]=h[10]+h[9]+(2*tB);h[9]=h[10]%60;h[10]=h[10]/60;//2 tempo(desliga 2 e liga 3)
h[12]=h[2];h[11]=h[1];
h[12]=h[12]*60;h[12]=h[12]+h[11]+(3*tB);h[11]=h[12]%60;h[12]=h[12]/60;//3 tempo(desliga 3 e liga 4)


//Calculo Programa 2
if(h[4]!=0 && h[3]!=0 && h[31]==0){
h[14]=h[4];h[15]=h[3];
h[14]=h[14]*60;h[14]=h[14]+h[15]+(4*tB);h[15]=h[14]%60;h[14]=h[14]/60;//Operação Desliga bomba e valvula 4
h[16]=h[4];h[17]=h[3];
h[16]=h[16]*60;h[16]=h[16]+h[17]+tB;h[17]=h[16]%60;h[16]=h[16]/60;//1 tempo(desliga 1 e liga 2)
h[18]=h[4];h[19]=h[3];
h[18]=h[18]*60;h[18]=h[18]+h[19]+(2*tB);h[19]=h[18]%60;h[18]=h[18]/60;//2 tempo(desliga 2 e liga 3)
h[20]=h[4];h[21]=h[3];
h[20]=h[20]*60;h[20]=h[20]+h[21]+(3*tB);h[21]=h[20]%60;h[20]=h[20]/60;//3 tempo(desliga 3 e liga 4)
h[31]=1;

//Calculo Programa 3
if(h[6]!=0 && h[5]!=0 && h[32]==0){
h[22]=h[6];h[23]=h[5];
h[22]=h[22]*60;h[22]=h[22]+h[23]+(4*tB);h[23]=h[22]%60;h[22]=h[22]/60;//Operação Desliga bomba e valvula 4
h[24]=h[6];h[25]=h[5];
h[24]=h[24]*60;h[24]=h[24]+h[25]+tB;h[25]=h[24]%60;h[24]=h[24]/60;//1 tempo(desliga 1 e liga 2)
h[26]=h[6];h[27]=h[5];
h[26]=h[26]*60;h[26]=h[26]+h[27]+(2*tB);h[27]=h[26]%60;h[26]=h[26]/60;//2 tempo(desliga 2 e liga 3)
h[28]=h[6];h[29]=h[5];
h[28]=h[28]*60;h[28]=h[28]+h[29]+(3*tB);h[29]=h[28]%60;h[28]=h[28]/60;//3 tempo(desliga 3 e liga 4)
h[32]=1;
}
}//Fim if Programa 2
h[30]=1;tempo=1;
}//Fim if Programa 1
}//Fim While
}

if(d[0]=1){//Se apção todos os dias for selecionada
//Horarios Para Programa 1
if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,HIGH);digitalWrite(vs1,LOW);delay(70);}//Liga bomba e valvula 1
if(h[8]==RTCValues[4] && h[7]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);delay(70);}//Desliga Valvula 1 e liga Valvula 2
if(h[10]==RTCValues[4] && h[9]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);delay(70);}//Desliga Valvula 2 e liga Valvula 3
if(h[12]==RTCValues[4] && h[11]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);delay(70);}//Desliga Valvula 3 e liga Valvula 4
if(h[34]==RTCValues[4] && h[33]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);delay(70);}//Desliga bomba e desliga Valvula 4
//Horarios Para Programa 2
if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba, HIGH);digitalWrite(vs1,LOW);}//Liga bomba e valvula 1
if(h[16]==RTCValues[4] && h[17]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);}//Desliga Valvula 1 e liga Valvula 2
if(h[18]==RTCValues[4] && h[19]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);}//Desliga Valvula 2 e liga Valvula 3
if(h[20]==RTCValues[4] && h[21]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);}//Desliga Valvula 3 e liga Valvula 4
if(h[14]==RTCValues[4] && h[15]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);}//Desliga bomba e desliga Valvula 4
//Horarios Para Programa 3
if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba, HIGH);digitalWrite(vs1,LOW);}//Liga bomba e valvula 1
if(h[24]==RTCValues[4] && h[25]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);}//Desliga Valvula 1 e liga Valvula 2
if(h[26]==RTCValues[4] && h[27]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);}//Desliga Valvula 2 e liga Valvula 3
if(h[28]==RTCValues[4] && h[29]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);}//Desliga Valvula 3 e liga Valvula 4
if(h[22]==RTCValues[4] && h[23]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);}//Desliga bomba e desliga Valvula 4
}

As variaveis h[1]...h[6] Recebem os horarios de irrigação. Impares minutos e Pares horas

O Codigo Completo esta aqui

http://pastebin.com/M1sD6ycd

Obrigado

Quanta memoria fica disponível depois de carregar o código? Esta usando MEGA?

Quando coloca o código sem modificar funciona normal?

Abs.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço