Ir ao conteúdo

Posts recomendados

Postado

É um laço de repetição

For, enquanto

for (int i = 0; i <= 240; i++) {

 

xxx


}


int i = 0       -> A variável i, vai receber 0 na entrada

i <= 240     -> Enquanto i menor ou igual a 240 o laço se repetirá

i++             -> A cada volta no laço, será somado +1 em i

 

 

digitalWrite(bomba, HIGH); //liga a bomba

for (int i = 0; i <= 240; i++) { //inicia a repetição de 240 vezes

      delay(2000); //espera 2 segundos

     [testa se o reservatorio está vazio, caso estiver desligue a bomba] //teste se esvaziou a bomba durante o processo e desliga a bomba caso isso ocorra

}

digitalWrite(bomba, LOW); //desliga a bomba ao final do processo

 

Postado

Boa tarde pessoal.

 

@Thiago Miotto, entendi como funciona e a lógica da função (for) agora, mas fiquei com uma dúvida: a repetição se dará a cada 2 segundos, considerando o delay(2000)? e cada uma dessas repetições é que somará um número a variável "i" ?

 

E a todos - @MOR, @rmlazzari58, @Thiago Miotto, e todos os demais que estão me ajudando, demorei a responder pois quis deixar os testes acontecendo por alguns períodos, já que estou fazendo os mesmos em produção.

Bom, as interferências ainda persistem, mesmo após a separação das fontes.

É certo que, por enquanto, o travamento em um dos relés, ocasionando o esvaziamento do reservatório, não ocorreu, mas o display lcd continua com muitas interferências.

Alguma outra coisa que eu possa fazer?

Postado
16 minutos atrás, Alexandre Mariz Paiva disse:

@Thiago Miotto, entendi como funciona e a lógica da função (for) agora, mas fiquei com uma dúvida: a repetição se dará a cada 2 segundos, considerando o delay(2000)? e cada uma dessas repetições é que somará um número a variável "i" ?

Isso mesmo.
Delay (x) para o sistema por x milisegundos, então delay(2000) para o sistema por 2 mil milisegundos, que é igual a 1 segundo.

Explique melhor o que é esta interferencia no display.
Tenta tirar acentos e cedilhas da escrita p/ ver se melhora

  • Membro VIP
Postado
49 minutos atrás, Alexandre Mariz Paiva disse:

Alguma outra coisa que eu possa fazer?

Publicar esquemas e fotos. Uma visão física da coisa pode ajudar. A interferência pode estar vindo por montagem "melhorável", sinais de potência próximos dos de controle, falta de filtros tanto no hw como no sw..(este: 1 capítulo a parte), .. etc.

 

Obs: sou contra o uso de delay longo. Em vez disso, uma comparação de tempo pra executar funções me parece ser mais aproveitável. Algo como:

if ((tempo>5) && (tempo<10)) faça_isso();
if ((tempo>11) && (tempo<16)) faça_aquilo();

Detalhe é que a variável tempo seria incrementada por fora numa interrupt p.ex.

delay()... uma perda de tempo 😁

 

Ah sim.. você pode usar delay até eterno se quiser desde que não te esqueças de deixar ligada uma interrupção externa p.ex. pra ler botões e realizar alguma operação de ajuste.

  • Curtir 1
  • Haha 1
Postado

No Arduino existe a função millis(), que retorna quanto tempo o software já está rodando.
Usado em programas multifunção, você salva numa variável o millis atual, e depois compara esse variável com o millis até chegar ao tempo de uso que você deseja que aquela função rode, sem parar o programa todo. É uma poderosa ferramenta, possibilitando um software 100% multifunção.

Millis retorna um variável longint unsigned se não me falha a memória
 

Postado
2 horas atrás, .if disse:

delay()... uma perda de tempo

Ri alto, aqui, kkk...

 

E (desculpe mas) por curiosidade mas principalmente porque não tenho familiaridade com ambiente rural, também sinto vontade de

2 horas atrás, .if disse:

Uma visão física da coisa

 

que distância há entre o sensor de tanque cheio e o arduino? Os relés imagino que estejam perto do arduino mas e a distância entre o arduino e as solenoides? O cabos que vão dos relés às válvulas tem o... sei lá, calibre ABNT AWG adequado? E do reservatório às solenoides a água vai por mangueira, tubo de cobre... o que? O arduino, sua botoeira e sua fonte estão protegidos contra água, poeira... mau contato? mau contato pode causar bagunça nos display, pode não? Aliás e se o display é que estiver zoado?

Postado

Bom dia pessoal.

 

@Thiago Miotto, @.if, @rmlazzari58, vou fazer fotos do sistema físico para postar aqui, conforme vossa sugestão. Do quadro de controle até a distribuição para as solenóides.

 

Algumas respostas que posso antecipar aqui: 

- o sistema todo está montado dentro de um quadro de distribuição com proteção contra intempéries;

- os relés estão ao lado do Arduino, já as solenóides estão separadas pelos locais de irrigação, em uma linha reta, e vão em distância do Arduino de 3 metros a mais próxima à 45 metros a mais distante;

- os sensores de nível de água do reservatório estão à 53 metros do Arduino;

- a parte elétrica toda foi feita em conjunto com eletricista e, segundo os profissionais, os cabos estão dentro dos padrões para essa carga/distância.

- o display funciona normalmente, exibindo todas as informações. quando o programa está executando a irrigação então aparecem caracteres inelegíveis no display e só reiniciando para voltar ao normal;

- o display foi testado em outros projetos e não apresentou falha;

- a interferência que acontece no display, imagino eu, é o sinal de que o problema está em todo sistema. Diferente do que postei ontem, na execução da manhã de hoje, o mesmo travou novamente deixando uma solenoide acionada e esvaziando o reservatório.

 

@.if essa comparação tem alguma limitação? pode ser usada em toda a estrutura do projeto que desenvolvi?

@Thiago Miotto antes de vir ao post eu havia pesquisado e encontrei a Millis(), mas me parece que ela tem uma limitação que , em 49 dias e sei lá quanto (esqueci o resto do tempo - rs) ela reinicia voltando ao zero.

Não sei se isso pode impactar no processamento.

 

E mais uma pergunta: como tenho o rtc executando as horas, não existe uma função que ao iniciar o processamento na hora programada, apenas verifique o tempo decorrido desde a execução, pelo rtc, lendo a hora e os minutos, e após todos executados encerre?

Se existe, quais seriam as implicações para um projeto com muitas variáveis, como este?

Postado
1 hora atrás, Alexandre Mariz Paiva disse:

antes de vir ao post eu havia pesquisado e encontrei a Millis(), mas me parece que ela tem uma limitação que , em 49 dias e sei lá quanto (esqueci o resto do tempo - rs) ela reinicia voltando ao zero.

Isso é verdade

Mas isso você pode resolver com mais um teste. Algo tipo:

if variavel que recebe milis > limite do millis - tempo que você quer contar {

vairavel que recebe millis = 0

}

 

 

  • Membro VIP
Postado
2 horas atrás, Alexandre Mariz Paiva disse:

essa comparação tem alguma limitação?

O limite é a imaginação amigo. Lembrando que o tempo deve ficar rodando em anel. P.ex. em 24H tem 1440 minutos. Se seu tempo se basear em minutos

if(tempo>1439) tempo=0;

 

Se seu sistema tiver um rtc pode fazer a comparação "normal".

faça_isso()
{
rele_irrigacao=1; //começa
//outros controles
}

faça_aquilo()
{
rele_irrigacao=0; //termina
//outros controles
}

faça_qualquer_coisa()
{
rele_alarme=1;
//outros controles
}

//loop principal
if ((hora==hora_programada1) && (minuto==minuto_programado1) faça_isso();
if ((hora==hora_programada2) && (minuto==minuto_programado2) faça_aquilo();
if ((hora==hora_programadax) && (minuto==minuto_programadox) faça_qualquer_coisa();

//...

 

Dicas genéricas pois desconheço seu sistema. Também não têm relação com os travamentos mencionados

Postado

Bom dia pessoal.

 

Só pra justificar porque ainda não enviei as fotos do projeto: 

- mesmo com o que estão me ajudando, o sistema continuou a dar problema e acabou por gerar mais travamentos em menos tempo.

Nesse caso, fiz uma substituição provisória colocando um sistema para acionamento manual (pela internet) e estou refazendo todo o modelo, tanto hardware quanto a programação, com base em todas as dicas que tenho recebido aqui.

Descobri também nesse movimento que a placa Arduino Mega que estava usando (e que comprei a muito, muito tempo atrás..... - rs) me parece não ser apropriada, já que comprei uma não original chinesa. Um exemplo é que se alimento ela com uma fonte com corrente maior que 1a (1,5a que é a estava usando), ela aquece demais, o que imagino poderia ser uma das causas do problema (vocês que entendem mais que eu, confirmam isso?).

Cheguei a essa conclusão porque tentei usar a mesma placa e fonte no sistema provisório e ele só acionava o relé uma vez, dai travava e precisava ser reiniciado.

Troquei por uma placa original e o travamento parou.

Assim que tiver com essa parte pronta vou postar as informações aqui.

Postado
1 hora atrás, Alexandre Mariz Paiva disse:

já que comprei uma não original chinesa

O Arduino é open hardware. Qualquer um pode entrar no site da Arduino e fazer sua própria placa. Por isso existe uma série de placa arduinos paralelos. Isso não quer dizer que as placas sejam de baixa qualidade. Mas com certeza, existe placas c/ controladores melhores e piores.

Uma vez quis testar a durabilidade de um motor. Fiz um programa c/ um arduino e um módulo relé, que ligava 30 segundo, desligava 30 segundo e por aí vai. Após uns 20 acionamentos, o Arduino parava de funcionar. Mas como passei a trabalhar c/ mosfets, não sei lhe dizer como resolver o problema dos relés.

  • Curtir 1
Postado
2 horas atrás, Thiago Miotto disse:

Mas com certeza, existe placas c/ controladores melhores e piores.

 

Faz pouco tempo, Thiago, comprei um Arduino original e vendida como se fosse nova, tanto porque queria conhecer quanto porque estava mais barata que os clones, até. Apresentou alguns problemas de travamento, resolvidos com a ajuda do pessoal daqui. Mas acho que não é nova, veio com algum programa na memória. Além disso, mesmo o vendedor alegando ser nova e de ter serigrafia da Arduino, prestando atenção dá para ver que aquela tira preta de conectores na parte de cima foi ressoldada. Conversando com um amigo, ele me disse conhecer uma pessoa que compra dessas placas usadas de ex-alunos de curso técnico. Não duvido e, para ajudar, a loja é vizinha de uma ETEC...

 

Hoje compraria uma original, nova, da própria Arduino, mesmo. Ou, se for para deixá-la dedicada a uma única aplicação, compraria um Arduino Nano, mas sempre original, nova, na caixa, lacrada, com nota, garantia e tudo.

Postado

O grande problema é que as placas originais arduino não chegam de maneira oficial ao Brasil. Pelo que ouvi em vídeos, parece que um dos fundadores da Fundação Arduino (italiana), registrou a marca no Brasil, porém algum tempo depois ele saiu da sociedade da fundação. Aí no Brasil a marca Arduino está em disputa judicial, prova que você não ve novas placas sendo vendidas por aqui. E comprar da própria loja da arduino seria compra internacional, que ficaria bem $$

Caso queira pagar um pouco a mais por algo confiável, eu indicaria as versões da placa feitas nacionalmente, como a a blackboard uno r3 da robocore - https://www.robocore.net/placa-robocore/arduino-blackboard


 

  • Curtir 1
Postado

@Alexandre Mariz Paiva ,

 

Existem diferenças sim entre vários fabricantes de placas tipo Arduino na China....

Uma coisa que complica é o uso de reguladores de tensão de qualidade inferior, sendo que muitos queimam quando alimentados com mais de 13 V.

 

E a qualidade dos capacitores de filtragem também varia bastante.

 

Mas, de regra, se você isolar a parte de alimentação dos relés da fonte do Arduino, seja com indutores ou até com diodos/capacitores, e claro, cuidando do aterramento, não deveria causar problemas.

 

Paulo

Postado

Boa tarde pessoal.

 

Bom, retornando a saga - rs, do sistema de irrigação, como mencionado anteriormente estou resenhando o sistema de uma maneira a resolver os problemas originais e trazer melhores para o projeto.

Alterei o mesmo para que, além da programação automática ou acionamento por push buttons, eu também possa monitorar e acionar através de app (internet).

Uma das mudanças que precisei fazer foi acrescentar outro Arduino mega, e coloca-los se comunicando via UART, pois selecionei o app Blynk para esta tarefa, já que no meu conhecimento limitado é o que senti maior facilidade em operar.

O auxilio que preciso agora é o seguinte:

- todo o hardware está montado e funcionando; o "Master" fica responsável pela leitura dos sensores e rtc e executar todas as tarefas, além de informar ao "Slave" o que está ocorrendo no momento (qual processo está ligado ou desligado); essas informações são exibidas no app.

- o "Slave" faz também a leitura dos sensores diretamente em suas portas e exibe no app e, caso um botão no app seja apertado este deve comunicar ao "Master" para ligar ou desligar o processo selecionado.

O problema é que o processamento do "Master" está OK e o envio de informações dele ao "Slave" também, porém não consigo enviar o comando dos botões do "Slave" para o "Master".

Alguém familiarizado com o Blynk ou que saiba o que ocorre pode ajudar?

Postado

Boa tarde pessoal.

 

@MOR, @rmlazzari58, @Thiago Miotto, como prometido terminei de "redesenhar" o sistema, acrescentando melhorias para operação.

Deixei-o por uma semana rodando sem carga e o mesmo funcionou perfeitamente, sem falhas.

Acabei de coloca-lo no ar e... os problemas de interferência continuam. 😭

O display parou de exibir caracteres estranhos, mas o sistema está travando a cada execução.

Estou anexando as fotos do sistema, e já pergunto: existe algum tipo de filtro contra essas interferências, que possa ficar entre as válvulas e os relés?

Descrevo abaixo a parte física que estou usando no sistema:

 

- Arduino mega 2560 com Shield ethernet w5100 (trabalhando como Slave) - este módulo é o que conecta o sistema a rede, para monitoramento e acionamento (se comunica com o Master através de UART e com a rede através do aplicativo Blynk);

- Arduino mega 2560 (trabalhando como Master) - possui toda a programação de acionamento, tanto automático (usando RTC DS1307), quanto através da botoeira;

- Botoeira com 6 push buttons - para acionamento manual;

- Sensor de temperatura e umidade DHT22;

- Sensor capacitivo de umidade do solo;

- Sensor Sharp de nível de água (3 unidades);

- Display LCD 20 x 4 i2C;

- Válvulas solenóides 110v para acionamento das linhas de irrigação (14 unidades);

- Contatora Weg para acionamento da bomba de irrigação (o relé do Arduino apenas a aciona a contatora);

 

IMG_4927.thumb.jpeg.9f9b8725768dac39f0c7e3f7624a6c9d.jpeg

 

IMG_4925.thumb.jpeg.bf0336e0624cd29867a1de16e844ddd4.jpeg

 

 

IMG_4930.thumb.jpeg.e9446e0965d6a0a00ce2ac170396fd55.jpeg

 

 

IMG_4926.thumb.jpeg.f35752d026347aaa91c41b565a3165a4.jpeg

 

 

IMG_4928.thumb.png.85d93f3286bbf58325d4dab36fee32ac.png

 

 

 

  • Amei 1
Postado
5 minutos atrás, Alexandre Mariz Paiva disse:

mas o sistema está travando a cada execução.

Sobre o programa... trava total, Alexandre? E trava sempre na mesma rotina? Ou não, trava seja a rotina que for? Tem como monitorar para saber o ponto do programa em que trava? Até que ponto ele executa normal?

 

Agora, sobre interferência, os mestres aqui com certeza podem te ajudar mais que eu. Mas me ocorre aterramento, cabos blindados com a blindagem indo ao terra da terra, mesmo, ao chão, de tantos em tantos metros. Mas isso é chute, sobre isso melhor aguardar os mestres mesmo.

  • Curtir 1
  • Membro VIP
Postado

1ªmente... amei seu projeto. Quando crescer quero faz um igualzinho 😁

2ªmente... não sei se participei do tópico... mas vejamos...

  • distancie os relés
  • não use a mesma fonte do display pra aciona-los
  • não conecte o gnd dos relés no arduino: conecte-o na fonte ou no fio da fonte. O mesmo pro vcc
  • to vendo cabo de rede e de fonte perto da rede ac. Se puder evitar o sistema agradece
  • no sw jamais escreva ou leia do display enquanto aciona os relés. Neste momento escreva 0b0000000 nos pinos do display e se puder transforme todas as entradas em saídas e com 0b00000000.
  • iniba até mesmo as interrupts no momento ligar relé pra evitar surpresas.
  • etc...
  • ...
  • fale + sobre o app do celular
  • 😁
Postado

@Alexandre Mariz Paiva ,

 

Meu amigo… para quem trabalhou anos com controle de processos industriais, essa foto da montagem física é um pesadelo ….

 

As fiações de sinais de entrada e de saídas de potência tem de ser completamente separadas.

 

A fiação das fontes de alimentação devem ser muito bem filtradas e o uso de loops de terra deve ser evitado a todo custo. Idealmente deve haver apenas um barramento de GND . 
 

O retorno do GND da parte de potência não deve passar por nenhum local onde possa ter também alguma conexão com o terra analógico e de sinais das suas placas Arduínos e o Ethernet Shield.

 

Esse contator deve ter a sua fiação totalmente afastada das outras, e a entrada das outras fontes de alimentação devem ter um filtro para tentar atenuar a interferência desse contator.

 

A fonte que alimenta esses relés tem de ter uma excelente filtragem para atenuar o ruído do liga/desliga desses relés, e o GND dela deve se juntar aos Gnds da fonte dos Arduínos em apenas um lugar, com uma fiação mais grossa, e a partir desse local é que deve sair os fios de GND para os seus módulos .

 

E esse protoboard é pedir para se ferrar …. Remova isso, encurte esses fios, e se precisar use cabos blindados.

 

Paulo

  • Curtir 2
Postado
Em 12/12/2021 às 19:00, aphawk disse:

uso de loops de terra deve ser evitado a todo custo

Paulão

Como ainda não tenho certeza desse termo, creio que o autor talvez terá a mesma dúvida.

Tentando explicar de forma mais leiga possível, loop de terra seria misturar terras de potências (como acionamento de motores) com terra de sinais.Confere?

 

@Alexandre Mariz Paiva
Pelo que entendi, estes relés só recebem um comando sequencial e são ligados diretamente numa fonte 12V. Se eu bem entendi o que o Paulo falou, liga os fios da fonte 12V somente nestas placas de relé. eu colocaria ponteiras nela e ligaria direto a fonte nela.

Postado

Boa tarde pessoal.

 

@rmlazzari58, @.if, @vtrx, @Thiago Miotto, @aphawk

Agradeço as informações e vou tentar responder a todos, explicando a montagem do sistema.

 

A utilização de dois arduinos Mega está atrelada a utilização do aplicativo Blynk para monitoramento do sistema.

Ele possui limitações de dados para processamento e não funcionou em nenhum dos testes em conjunto com o programa principal, ainda mais quando tem que ler dados de sensores para exibir na tela. Então o do aplicativo Blynk é o que está conectado a rede, lendo sensores e se comunicando via UART com o Mega Master.

Cada Arduino está sendo alimentado por uma fonte individual de 9v, e o módulo relé tem uma fonte específica de 12v ligada "diretamente"a ele (entre aspas porque estou usando um módulo relé do fabricante Robocore, porém ainda que a fonte esteja ligada diretamente nele, preciso compartilhar o and com o Arduino, não ele não executa a programação.

 

Sobre o erro: o acionamento dos relés é sim sequencial, de acordo com variáveis contidas para a irrigação; ele acontece em 100% das vezes quando o relé que aciona a contadora da bomba entra em funcionamento, travando assim o programa sem desligar o relé/bomba; e nos demais ocorre variado, a cada vez em algum dos outros relés.

 

Sendo assim, vou trocar o módulo relé por um que é alimentado diretamente, porém já fiz esse teste antes e as interferências continuavam.

 

Quanto a protoboard,  os sensores estão sendo divididos entre os dois microcontroladores, e também precisam usar o GND, que para a quantidade de Shields que estou usando, sem a Protoboard seriam insuficientes.

Falo assim dentro do conhecimento limitado que tenho, então, qual seria a alternativa para que pudesse eliminar a proto?

 

Quanto a distanciamento dos relés, seria deixá-los longe dos módulos Arduino?

 

E quais filtros (já que não conheço) seriam os ideais para eu utilizar? Precisaria ser um para cada solenóide?

 

Outra dúvida: as solenóides são todas em corrente alternada (110v). Substitui-las por corrente continua (12v) poderia resolver/filtrar os ruídos?

 

 

Postado

@Thiago Miotto ,

 

Loops de terra são ligações ao terra ( no caso o GND ) feitas em locais diferentes, por exemplo as placas Arduino tem mais de um terminal de terra nelas. Agora imagine que todas as fontes utilizadas também tem um terminal de GND, e a placa de relés também tem um Gnd.

 

Idealmente, escolhe-se como GND o local do terminal de GND da fonte de maior potência, e nesse único ponto deveria ligar TODOS os outros Gnds de todas as fontes e módulos !

 

Imagine que em vez disso existe um fio que sai dessa fonte até a outra fonte de +5V, e que a placa de relés esteja ligada nesse ponto junto com os Arduínos.

 

Quando algum relé armar ou desarmar, vai circular uma corrente de pico por esse GND, e vai acabar criando uma pequena diferença de potencial entre o

GND das duas fontes, que permite que o ruído se propague por causa da resistência do fio que interliga as fontes. Só isso já faz as coisas ficarem erráticas …. Agora para piorar, imagine que um dos Arduínos tem um GND que vai até o protoboard, e o outro Arduino também tem um GND que vai ao protoboard, e desse protoboard também ligaram um fio que vai até o GND da fonte de maior potência.

Reparou que existem vários caminhos para a corrente circular entre todos os pontos de GND ? É isso que se chama Loop de terra.

O certo é evitar ligações redundantes de terra, levar todos os terras a um único local de ligação, assim diminui bastante a interferência.

Outra coisa : quando algum relé liga ou desliga, a corrente nos terminais acaba induzindo picos de tensão, e se forem usadas várias entradas lógicas com alta impedância, elas podem captar esse ruído e o circuito fica errático.

Já se ocorrem travamentos em algum dos módulos principais, tem de filtrar melhor a alimentação desses módulos, para filtrar ao máximo esses ruídos induzidos pelos relés ou pelo contator.

 

Esse é o caminho das pedras …

 

Paulo

@Alexandre Mariz Paiva ,

 

O bom é que a coisa tá funcionando, exceto o acionamento da parte de potência.

Mas usar dois Arduínos Mega realmente é um desperdício de recursos, sendo que um Arduino Uno já daria conta com certeza.

 

Pelo que eu vi você interligou portas seriais dos dois Arduínos, certo ?

 

Lembro aqui que por segurança sempre tem de lugar um resistor de 4K7 entre os pinos de TX e o +5V, porque essas linhas estão em Pull-Up interno que possui uma impedância relativamente alta e portanto susceptível a ruídos.


E outra dica : esses fiozinhos que tem um pino na ponta que encaixam nos terminais são um crime ! Para

testes rápidos em bancada até funcionam, mas para um projeto real, eles simplesmente são fantásticas antenas captadoras de ruídos…

 

Para os fios de GND, não use esses fiozinhos com encaixe ao terminal, é 10x mais seguro você soldar por baixo um fio, tanto para o GND como o positivo da alimentação.

 

Tudo o que for GND, solde direto. 
 

Paulo

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!