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.

      Muito provavelmente a parte do seu código que faz a leitura do Botão (ou Push Button),  pode precisar de uma melhoria, especificamente em relação a ser mais eficaz em relação a filtrar eventuais "spikes"  espúrios no pino do Arduino quando os fios que chegam ao Botão são mais longos e estão em um ambiente relativamente ruidoso.

      Mas também pode ser que vc não esteja ativando o "Pullup" ou "Pulldown" no Pino de leitura  do Push Button,  o que normalmente seria feito na função "setup"  do Arduino,  assim que o Pino é configurado como Entrada Digital.  Caso seu Push Buttom esteja conectado entre o Pino de leitura  e o GND do Sistema, então vc deve ativar o "Pullup" naquele Pino.  Mas caso seu Push Buttom esteja conectado entre o Pino de leitura  e o VCC do Sistema (o +3.3V), então vc deve ativar o "Pulldown" naquele Pino.  No entanto, ativar o "Pullup" ou "Pulldown" pode não ser suficiente  caso o comprimento dos fios seja realmente muito longo, e para este caso um cuidado a mais no Hardware (circuitos) irá garantir um funcionamento sem problemas, conforme mostro a seguir.

      Para estes casos onde o comprimento dos fios é muito longo, e ativar o "Pullup" ou "Pulldown" não resolve,  vc pode usar uma das configurações que mostro nas duas figuras a seguir, e que são muito eficientes:

(clique na figura para "zoom")

(clique na figura para "zoom")

      A  primeira figura  se aplica ao caso quando seu Push Buttom  está conectado entre o Pino de leitura  e o GND do Sistema.  Este é o caso mais comumente usado.

      Já a  segunda figura  se aplica ao caso quando seu Push Buttom  está conectado entre o Pino de leitura  e o VCC do Sistema (o +3.3V).

      Para facilitar a visualização dos Diagramas de conexão,  imprimi os mesmos em um documento PDF,  onde vc pode dar "zoom" ao máximo possível no seu leitor de PDF.

      Vc pode ver ou baixar o documento aqui:   "Push_Button_ESP32_01.pdf"

      Observações finais:

      -  vc pode aplicar a mesma técnica para outras placas Arduino  onde o VCC seja de +5V, bastando que nos dois Diagramas onde está marcado +3.3V seja substituído por +5V.

      -  é quase certo que vc não ligou o "Pullup" ou o "Pulldown" (conforme o caso),  pois isto implicaria em não haver um Resistor conectado ao GND ou ao VCC,  o que significaria que a impedância vista pela Capacitância Parasita no pino, fosse de algumas centenas de Giga Ohms.  Nesta situação,  como a Capacitância Parasita é muito baixa (algumas dezenas a centenas de pico Farads),  e a impedância é muito alta,  a famosa constante  "RC"  seria de alguns minutos,  e após esse tempo ou a Capacitância Parasita se carrega ou se descarrega além dos níveis de "threshold" do "1" e do "0" digitais,  resultando justamente em um "falso acionamento" do Botão (comportamento que vc observou e nos descreveu).

      Espero ter ajudado.

      abrçs,

      Elcids

esclarecendo um pouco mais sobre alguns pontos dos Diagramas:

      O  +3.3V  e o GND que estão nos Diagramas,  vc deve "puxar" da própria  Placa do ESP32.

      Para  R2,  vc pode usar entre 1k e 2k.  Para ter Níveis Lógicos robustos na entrada do ESP32,  não use  R2 abaixo de 1k.  Acima de 2k, tende a diminuir a imunidade a ruídos, e portanto deve ser evitado.

      Já  R1 deve ser o valor que está nos Diagramas (ou seja,  100 Ohms).

      Para  C1, vc pode usar de 47nF  a 470nF,  do tipo Cerâmico (e não use  do tipo Poliéster Metalizado  nem qualquer outro tipo!!!).  Valores maiores aumentam a imunidade do Sistema a ruídos.  Mas não ultrapasse o valor de 470nF (o motivo disso é  não descarregar  altas cargas de C1 nos Diodos de Proteção internos existentes dentro do ESP32  quando a Alimentação do Sistema é desligada,  coisa que poucas pessoas atentam e algumas acabam usando Capacitâncias totalmente prejudiciais à "saúde" dos Circuitos Integrados e depois ficam reclamando que o C.I. "queimou" sozinho).

      Como está descrito nos Diagramas, se vc conectar o Push Button com fios muito longos (acima de 5 metros),  se possível use um "par trançado"  (como aqueles "pares" existentes em Cabos de Rede). Isto aumenta muito a imunidade a ruídos de alta-frequência de origem eletromagnética.

     Sobre os Diodos D1 e D2,  tenha muita atenção à polaridade Anodo e Katodo  dos mesmos (pois não podem ser invertidos!!!).  Claro, como descrito nos Diagramas,  estes Diodos são necessários  apenas se  o comprimento dos cabos até o Botão, for maior que 1 metro.

      Sobre o Consumo de Energia:  em repouso  (sem acionar o Botão),  o consumo do circuito é praticamente nulo.  E apenas durante o tempo que o Botão é pressionado,  é consumida uma pequena corrente,  de cerca de 3 mA.

      Fique à vontade para perguntar,  em caso de alguma dúvida.

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

      Elcids

olá novamente Mário.

      Achei relevante acrescentar mais algumas opções,  especificamente em relação a aumentar a imunidade do Sistema a ruídos,  implicando também em permitir aumentar ainda mais o comprimento dos fios até o Push-Button.

      Com isso,  também é possível flexibilizar a faixa de valores de alguns componentes. Mas para isso é necessário o acréscimo de mais dois componentes:  um Resistor  e um Capacitor Eletrolítico comum (ou seja, Eletrolítico de Alumínio).

      Para o caso onde o Push Buttom  está ligado entre o Pino do Arduino  e o GND  do Sistema,  a figura a seguir mostra como ficariam as conexões:

(clique na figura para "zoom")

     E para o caso onde o Push Buttom  está ligado entre o Pino do Arduino  e o VCC do Sistema (o +3.3V),  a figura a seguir mostra como ficariam as conexões:

(clique na figura para "zoom")

      Como é possível ver pelas duas figuras anteriores,  as mudanças são pequenas,  e com aumento de custo irrisório.  Porém o resultado é um grande aumento na imunidade a ruídos.

      Sobre estes dois novos Diagramas,  seguem algumas considerações:

         -  notar que devido à maior imunidade deste Sistema, a distância até o Push Button agora pode chegar a 30 metros (vc pode tentar ir além, mas é por sua conta).

         -  além de terem sido acrescentados  os componentes C2 e R3,  observe que os Resistores R1 e R2  tiveram seus valores alterados (para estarem de acordo com as novas características de funcionamento).

         -  o Capacitor C2 pode ser Eletrolítico comum (ou seja, Eletrolítico de Alumínio),  ou de Tântalo (lembrando que Capacitores de Tântalo são de 5 a 10 vezes mais caros que os Eletrolíticos comuns).  Seu valor pode estar entre 10uF a 100uF.  A  Voltagem de trabalho  pode estar entre 16V e 50V.  Atenção à polaridade [+] e [-] deste Capacitor !!!

         -  o valor de R3  não deve  ser aumentado, pois caso seja ligado o "Pullup" ou "Pulldown" internos (conforme o caso),  isto prejudicaria os Níveis Lógicos  resultantes no Pino de Entrada Digital do Arduino.  Seu valor pode estar entre 510 Ohms e 1k.  Este Resistor R3, protege a Entrada Digital da alta carga armazenada em C2, quando a Alimentação do Sistema é desligada.

         -  o valor de R2, agora pode ir de 15k até 33k.

         -  para R1,  deve ser usado o valor de 1k, conforme está nos Diagramas.

         -  o Capacitor C1  é obrigatório estar no circuito (em paralelo com C2),  e  deve ser  do tipo Cerâmico.  Seu valor pode estar entre  47 nF  e  470 nF.

         -  outras considerações já feitas nos posts anteriores,  também continuam valendo.

      Imprimi um novo Documento PDF,  o qual agora contém os dois Diagramas iniciais e estes dois novos.

      Vc pode ver ou baixar este Documento aqui:   "Push_Button_ESP32_02.pdf"

      Como dito antes,  fique à vontade para perguntar, em caso de alguma dúvida.

      abrçs,

      Elcids

Bom dia Mário, 

Minha sugestão:

- coloque um capacitor de 10 nF entre o pino do ESP32  e o terra. Deve resolver o seu problema. 

olá Murta.

      É preciso um pouco mais de atenção quanto à questão.

      Observe que se  o Mário não ligou o "Pullup" ou "Pulldown" (o que depende de como está ligado o Botão),  apenas acrescentar um Capacitor como vc sugeriu,  irá apenas adiar a ocorrência do problema que o Mário relatou (nas palavras dele: "passado uns tempos (20 min +-) a luz acende ou apaga, sem eu ter dado alguma ordem para tal").

      Minha sugestão:  leia o texto onde descrevo porque isso ocorre,  e ficará claro que apenas acrescentar um Capacitor, apenas aumentará a constante RC, e irá apenas retardar a ocorrência do problema porque em algum momento um dos "thresholds", ou do "0" ou do "1" será alcançado e causará um "falso" acionamento do Botão.

      O restante de toda a descrição que faço,  é um tratamento robusto e clássico (além de alguns esclarecimentos técnicos que ajudarão aqueles que se interessam por tais informações).

      abrçs,

      Elcids

Olá Elcids, 

Recomendo também a configuração Pull-up no pino da chave. (via programação)

https://www.esp32.com/viewtopic.php?f=18&t=11349

é,

      infelizmente o Mário não informou  e assim não sabemos como ele conectou o Push-Button,  se foi entre o Pino  e o GND (caso do "Pullup"),  ou se foi entre o Pino  e o VCC (caso do "Pulldown").

      Mas por outro lado,  isso me fez descrever conexões e técnicas para ambos os casos, o que ajudará quem estiver usando um caso ou o outro para o Push-Button.

      Pois é Mário,  fala logo aí como vc conectou o Botão.

      abrçs,

      Elcids

Boas a todos e, desde já, o meu muito obrigado pelas respostas.

Sim, fiz INPUT_PULLUP entre o pino e o GND.

Vou experimentar a solução do Murta e, caso não funcione, testarei a solução do Chagas.

Depois darei feedback

Obrigado a Todos

Ventura

Boas a todos,

já fiz o esquemático PIN + GND, com função INPUT_PULLUP. No entanto com estes componentes, o relé está sempre a actuar. Dá a sensação do Push Button estar sempre carregado.

Entretanto fiz a opção do Murta, coloquei o condensador entre o GND e o PIN e até agora parece estar a funcionar. Como só fiz há cerca de 20 minutos, vamos aguardar mais um pouco para ver o comportamento do "bicho".

Desde já muito obrigado pela ajuda.

Posteriormente apresentarei o meu projecto (Placa Circuito Impresso + Sketch)

Ventura

olá novamente Mário.

      Alguns comentários sobre o que vc colocou:

      1)  se o Relé está sempre atuando com a "conexão" que vc diz ter feito (ligando o Push-Button entre o Pino e o GND  e  também ativando o Pullup interno do ESP),  então vc pode estar com alguma "confusão" no seu código, especificamente na forma que ele interpreta o acionamento. Normalmente seria assim:  verifique se o estado  do Push-Button passou de "desacionado" para "acionado" (no caso, de HIGH para LOW), e quando detectar isso,  aguarde algum tempo (de 0.5 segundo a 1 ou 2 segundos) antes de que uma "nova" detecção seja feita.

      2)  vc pode estar usando aqueles pinos do ESP que não tem como ativar Pullup nem Pulldown.  Estes pinos são: 34, 35, 36, e 39.  Então se vc estiver usando um desses pinos, terá que  obrigatoriamente  conectar um Resistor  externo.

           Observe que se for esse o caso (pinos 34 a 39),  ao conectar apenas o Capacitor,  irá ocorrer o que salientei anteriormente:  irá funcionar por um tempo,  mas assim que der o período da constante de tempo, o problema irá se manifestar.  Note que neste caso,  este tempo poderá ser bem longo, de várias horas ou mesmo mais de um dia dependendo do valor do Capacitor usado.  Mesmo que isso possa parecer uma solução,  esse método não é considerado confiável, devido ao fato de não haver uma impedância "sólida" no pino.  Então a resolução "sensata" seria acrescentar um Resistor externo ao Pino (ou Pullup ou Pulldown, conforme a conexão do Push-Button).  Aproveitando:  qual pino do ESP vc está usando para o Push-Button ?

      Ficamos no aguardo de suas conclusões.

      abrçs,

      Elcids

Elcids,

estou a usar o PIN 16.

Junto ficheiro INO para vossa apreciação.

No caso de haver alguma forma de melhorar o sketch, agradecia

Ventura

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço