Boas a todos,

tenho o seguinte problema:

ESP32S com aplicação Blynk.

Tudo funciona bem através da aplicação. Tenho uma entrada Push Button que funciona mais ou menos bem. Se tiver um botão fisico com ligação de cabo até +- 10 cm, liga e desliga muito bem. No caso do comprimento dos 2 fios for  superior aos ditos 10 cm, passado uns tempos (20 min +-) a luz acende ou apaga, sem eu ter dado alguma ordem para tal.

Já troquei os pinos de entrada mas acontece o mesmo.

Porque é que o comprimento dos fios interfere com o sistema?

Agradecia ajuda

Obrigado 

Ventura

Exibições: 1290

Responder esta

Respostas a este tópico

olá Mário.

      Vi rapidamente seu código "4_Relay_OTA.ino",  mas já posso afirmar que ele tem problemas sim com a detecção do acionamento do  Push-Button.  Vc não está implementando da forma como sugeri no meu último post,  e isso é um problema, devido à forma como seu código flui (ou seja, devido à forma como ele é executado).

      Mas é de fácil solução.

      Assim que possível irei alterar seu código minimamente (mas funcionalmente comentado e organizado),  dando o tratamento adequado para a detecção confiável do Push-Button.

      Ah, vi que são  4  Push-Button,  e caso necessário, aplicarei o tratamento para todos os quatro.

      abrçs,

      Elcids

Olá Elcids,

muito obrigado.

Eu uso esse sketch tanto para 1 relé como para 4.

Tem estado a funcionar perfeitamente bem. Tanto com o Blynk como com Push Button.

Com a dica do Murta, tem estado estável (desde ontem), coisa que não acontecia.

Agradeço desde já a melhoria que irá fazer no sketch.

Cumprimentos

Mário Ventura

olá Mário.

      Analisei com mais detalhes o seu código original.

      Sobre o que apontei anteriormente a respeito de como seu código detecta os acionamentos dos Push-Buttons, confirmei depois dessa análise.  De fato a forma que vc está detectando os acionamentos, não é a mais adequada.  Porém também encontrei no seu código,  alguns pontos que ajudaram a diminuir o impacto disso (sem esses pontos, seu código não teria funcionado corretamente).  Estes pontos são alguns "delays"  inseridos nas funções "relayOnOff"  e "with_internet".  No entanto, a forma como isso foi feito nestas funções não é das mais adequadas. Então eu acredito que estes "delays"  foram "colocados" ali daquela forma,  justamente na tentativa de "corrigir" um mal comportamento do código (mas por alguém que não tinha a experiência própria para isto).

      Como seu código é bastante simples,  achei que seria adequado apenas inserir os "delays"  na posição "correta". Por isso, não acrescentei um tratamento mais "sofisticado" para a detecção do acionamento dos Push-Buttons.  Este tratamento seria detectar a passagem de "HIGH" para "LOW" e então posteriormente aguardar um tempo de "debouncing"  de forma assíncrona (ou seja, sem usar a função "delay" ).

      Então o que fiz foi:

      1)  documentei o código, acrescentando comentários funcionais. Também organizei o código, respeitando a Hierarquia "Top/Down"  da Linguagem C/C++ (isso quase não foi necessário, pois seu código estava bem nesta questão).

      2)  inseri de forma apropriada os "delays"  para garantir "debouncing"  dos Push-Buttons, e ao mesmo tempo garantir funcionamento adequado ao fluxo da execução.  Não se preocupe com o valor de 1 segundo  para os delays,  pois esse tempo não causa problemas com o Blynk (haveria problema no caso de delays muito altos).

      3)  para evitar "overflow"  no Buffer da Serial  (sim isto pode ocorrer no seu código, embora não se perceba),  acrescentei uma lógica simples para o "print"  que havia no "loop" do Arduino,  e dessa forma este "print"  só  será executado se de fato ocorreu alguma mudança no estado do "Rele 1".   Apenas esclarecendo:  o problema com o "overflow" do Buffer da Serial,  é que quando ele ocorre, ele "trava" a execução do código,  pois a execução fica aguardando que o Buffer tenha espaço para novos dados, e a ocorrência deste "travamento" é de certa forma irregular, temporizando forçadamente a execução de uma forma não muito previsível.

      4)  mínima alteração na ordem de configuração dos Ports  na função "setup", de forma a ter uma sequência com mais sentido.

      5)  também "inverti" a lógica do indicador "wifiFlag".  Vc estava usando "lógica negativa",  a qual é muito comum em Hardware,  mas deve ser evitada em Software.  Assim ajustei o código  para que  o indicador "wifiFlag"  trabalhe em "lógica positiva",  que faz muito mais sentido.  Veja na figura a seguir como estava e como ficou:

(clique na figura para "zoom")

      Devido a essa "inversão",  a  lógica de teste  do indicador "wifiFlag" na função "loop",  também teve que ser invertida.

      Acredito que estas alterações irão te ajudar na manutenção do código. Mas o uso ou não das mesmas, fica a seu critério, pois não são essenciais.  Mas peço que vc analise, e considere usá-las.

      Segue o código "ajustado":   "4_Relay_OTA_02.zip"

      E claro,  caso em alguma versão posterior do seu Sistema vc conecte Push-Buttons  a uma maior distância,  siga as recomendações que fiz anteriormente. Os diagramas estão bem detalhados,  e assim podem ser facilmente usados.

      Encerro aqui minha participação.

      abrçs aos patrícios de além mar,

      Elcids

Viva Elcids,

muito obrigado pela ajuda e explicação do código.

Irei testar e posteriormente darei feedback.

Desde já o meu muito obrigado a todos 

Mário Ventura

Bom dia a todos:

Sugestão para leitura.

O Efeito Bouncing e as técnicas para Debouncing

https://eletronworld.com.br/eletronica/efeito-bounce/

Vivas a Todos,

muito obrigado ao Murta e Elcids,

Deixo aqui o Link do sistema a funcionar.

Desculpem a qualidade do video e da apresentação mas, foi só para vocês verem como o sistema está a funcionar.

Os módulos fui eu que desenvolvi mas, terei que acrescentar o condensador que o Murta falou. Tenho tido em teste e funciona a 100%.

Obrigado Murta, Obrigado Elcids,  Obrigado a todos os que ajudaram.

PS: Aceito criticas :) 

Os módulos são de 220v Directos com Saída 220v, ou apenas Relé (Contacto seco). Mas sempre com entrada de 220v.

Mário Ventura

https://youtu.be/a9ugL9mgW2g

olá Mário.

      Vi seu vídeo, e ficou muito legal sua implementação, muito mais do que poderia parecer a questão de um simples "botão". Parabéns pelo resultado alcançado.

      Aproveito para algumas observações finais.

      Como vc está usando o Pullup interno  do ESP32,  e conforme vc mesmo constatou, de fato apenas o acréscimo do Capacitor  já pode resolver o problema que vc relatou.

      No entanto observe que  se  a distância do "Botão"  até o ESP  for relativamente grande,  é aconselhável seguir as orientações que passei. Estou reforçando isso novamente. Note que além do tratamento em relação à interferência (vc pode conferir em todos os Diagramas  que aqui postei que o Capacitor "C1"  faz exatamente a mesma coisa que aquele que vc acrescentou),  há também cuidados em relação a "spikes" de tensão nos fios do Botão, caso o comprimento desses fios seja longo. Naqueles Diagramas,  o Resistor "R2"  foi incluído para não depender-se do Resistor de Pullup interno do ESP (que é muito mais "frágil" e pode danificar-se com mais facilidade, pois na realidade não é bem um Resistor). Os demais Resistores,  são para proteção dos circuitos, assim como os demais componentes (no caso, Diodos de sinal).

      Uma vez confirmado que vc "ligou" o Pullup interno e que a sua ação de apenas acrescentar o Capacitor  resolveu o problema relatado,  já posso afirmar a origem do problema.  O que causava o problema, era o acionamento de algum outro dispositivo ligado à rede elétrica AC.  Este outro dispositivo certamente vc conseguiria identificar aí, pois pode ser o liga/desliga de uma Lâmpada (principalmente as que tem algum Reator, como as "econômicas" ou as fluorescentes convencionais), ou o acionamento de um eletroímã  de uma Porta elétrica (ou um solenoide associado a esta Porta), ou o liga/desliga automático de um Refrigerador/Freezer  ou Condicionador de Ar, ou até mesmo um pequeno Motor (embora mais improvável).  No exato momento que era ligado ou desligado este outro dispositivo (que seria o "culpado"), ele injetava um "spike" na rede elétrica AC, e via Fonte do Arduino  este "spike" conseguia chegar ao terminal correspondente ao Botão, causando o "falso" acionamento. Na realidade,  estes "spikes" ainda continuam sendo gerados,  afinal o tal dispositivo ainda deve estar aí,  porém agora o Capacitor  acrescentado filtra o sinal no pino onde o Botão está conectado (esta filtragem é em relação à alimentação), e assim impede a ocorrência do problema.

      Sucesso nos seus projetos.

      abrçs,

      Elcids

Boa noite Elcids,

detectei um problema neste sketch.

Funciona tudo muito bem mas SÓ quando o sistema está ligado ao Router. Caso tenha o router da net desligado, o Push Button não funciona. Dá a sensação que ele bloqueia enquanto tenta fazer a conexão.

Consegue dar uma ajuda, sff? 

Obrigado

MJV

olá Mário.

      Este "problema" a que vc se refere,  é uma limitação de uma função interna do Blynk, que bloqueia a execução do código quando é perdida a conexão com o Servidor do Blynk  hospedado na Internet. A função que causa o bloqueio é chamada a partir do "Blynk.run()" que está no "loop" do Arduino.  Logo, este bloqueio ocorre em todos os códigos que usam a Biblioteca do Blynk.

      Recentemente, um amigo daqui do LDG teve o mesmo problema. Por coincidência, ele também usava botões (também era uma automação residencial), e quando perdia a conexão com a Internet, o Blynk bloqueava a execução e com isso ele não conseguia controlar nada via botões. Então eu implementei um gerenciamento (via Máquina de Estados) para evitar este bloqueio na execução do código dele. Funcionou como planejado, e não ocorreu mais o "problema".

      Claro, isto também é perfeitamente realizável no seu código.

      Mas Mário, preciso que vc informe qual código vc está usando atualmente, pois isto não ficou completamente claro.  Seria aquele que vc já usava, ou aquele que eu postei aqui com pequenos ajustes?

      O que eu postei aqui, tem nome "4_Relay_OTA_02.ino".  Se for exatamente este, basta que vc confirme. Mas se for este e vc alterou algo ou se for outro código,  peço que post ele aqui para que eu possa fazer as tais implementações para impedir o bloqueio do Blynk.

      Na realidade, seria facílimo impedir o bloqueio se a tal função na Biblioteca do Blynk  fosse ligeiramente alterada (e sem prejuízo para o funcionamento interno do próprio Blynk). Mas eu particularmente sou contra alterar Bibliotecas dessa forma (somente em último caso, se não tiver uma solução alternativa).

      Aproveito para desejar um grande 2022  para os patrícios de "além mar".

      Fico no aguardo,

      abrçs,

      Elcids

Boa tarde Elcids,

muito obrigado pela resposta.

Sim, o código que estou a usar é o 4_Relay_OTA_02.ino.

Funciona bem para 1 ou mais Relés e tem aprovado muito bem com o acrescento do condensador cerâmico.

O único problema é mesmo este, se o Router tiver desligado, os Push Button não funcionam. 

Fiz um teste com o sistema a funcionar completo. Depois desliguei o router. Funciona bem. Se fizer um reset ao ESP32 já bloqueia. Se por algum motivo o router avariar ou for trocado por outro com outras credenciais de acesso, o sistema fica inutilizado, não sendo possivel usar os Push Button. 

A dúvida é só essa.

Entretanto, irei acrescentar a emissão de IR para controlar aparelhos tais como AC, TV, etc mas, queria resolver este problema primeiro.

Desde já muito obrigado e Feliz Ano Novo para si e para todos do LDG.

Mário Ventura

olá novamente Mário.

      Irei postar duas implementações: uma clássica e uma específica para o ESP32.  Inicialmente irei postar a clássica,  que embora mais complexa, funcionará também para outros Arduinos, e é mais didática e por isso ajuda a se aprender a programar melhor.

      Ambas as soluções permitirão depois que sejam acrescentados os controles IR  de uma forma harmônica, sem conflitos.

      Mas Mário, peço que acrescente aqui seu arquivo "Credenciais.h", onde estão algumas definições e certamente um ou outro "#include",  pois isso me permitirá postar um solução completa e equalizar a formatação da implementação.  Claro,  antes não esqueça  de alterar no arquivo os valores de suas credenciais pessoais,  "WIFI_SSID", "WIFI_PASS",  e  "AUTH" do Blynk,  para que não fiquem públicas aqui.

      Fico no aguardo,

      abrçs,

      Elcids

4_Relay_OTA_02.ino

Credenciais.h

ota.h

Boa tarde Elcids,

Aqui fica o ficheiro completo bem como os respectivos ficheiros de apoio (.h)

Obrigado

Mário Ventura

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço