Bom dia, 

Desenvolvi um contador de peças para uma maquina dentro da industria onde trabalho, porem comecei a ter problemas com o acionamento do sensor infravermelho que trabalha em 5v e que esta ligado diretamente na entrada digital do arduino.

Ocorre o que sensor aciona do nada, sozinho sem ter peças na frente. Ao analisar percebi que ele aciona quando a maquina liga ou desliga a esteira, logo imagino ser interferência eletromagnética no sensor.

Sera que eu migrando para um sensor reflexivo de 24v com um rele acoplador seria a solução? Tendo em vista que se eu tirar o cabo da entrada digital a interferência não ocorre mais.

Grato pela ajuda!

Exibições: 1672

Responder esta

Respostas a este tópico

Bom dia RM,

em ambiente industrial as interferências costumam ser intensas.

Algumas sugestões  para melhorar as condições:

  1. Toda eletrônica dentro de caixas metálicas aterradas;

  2. Cabos coaxiais  para ligar dispositivos externos sem "ground loop";

  3. "Output" em todos ports do arduino que não são usados;

  4. Snoobers em contatos de reles;

RV

Bom dia RV, obrigado pelas dicas.

Bom dia, 

Motores elétricos e relés geram muita interferência na rede elétrica! 

Use filtros de linha (snoobers). 

E alimente o Arduino com fonte de alimentação de boa qualidade. 

Faça um teste! Alimente o Arduino/sensor com bateria e veja que ele não deverá apresentar problemas. 

se eu alimentar com o USB no notebook realmente não gera problemas, agora ligando na fonte tenho problemas.

Confirmado então! 

Estou alimentando o projeto por fonte chaveada da marca schneider electric que é de boa qualidade.

tente usar um conversor dc dc isolado, vai retirar o ruido eletromagnetico que vem carregado pela fonte.

Ok, então sugiro que use choque de RF na alimentação do Microcontrolador. 

Não sei qual é o ideal. Terá que pesquisar

https://www.rfwireless-world.com/Articles/Power-Supply-noise-reduct...

https://www.rfwireless-world.com/Articles/Basics-and-types-of-noise...

Grato amigo, vou pesquisar.

olá Renan.

      Uma possibilidade é vc usar o circuito que mostro na figura a seguir:

(clique na figura para "zoom")

      Fiz o design do circuito, considerando que vc dispõe das tensões de alimentação de 5V e de 3.3V.  Mas se vc não tiver a alimentação de 5V, vc pode usar 3.3V  no lugar onde está marcado 5V, desde que siga as recomendações que passo mais a frente.

      Sobre o Circuito, é muito importante que vc siga estes pontos:

      1)  o circuito que está dentro da área "verde claro", deve ficar o mais próximo possível do sensor E18-D80NK.  Veja: isto não é na ponta "final" do cabo que vai ao ESP8266. Ou seja: o circuito da área "verde claro" deve ficar na ponta do cabo que fica junto ao Sensor mesmo.

      2)  o circuito que está dentro da área "azul claro", deve ficar o mais próximo possível do ESP8266. Isto é particularmente importante em relação ao Capacitor C4, Resistor R6, e Diodo D1. Mas todo o circuito da área "azul claro" deve estar bem junto ao ESP8266.

      3)  o Diodo D1 não é obrigatório, mas seria desejável sua presença. Se vc não tiver o BAT85, pode usar o 1N4148 (Atenção:  não servem  Diodos da série "1N400x" como 1N4001, 1N4007, etc).

      4) os Capacitores C1, C3, C4, e C6, devem obrigatoriamente  ser do tipo "cerâmico" (não use outros tipos).

      5)  o Capacitor C2 preferencialmente deve ser tipo "tântalo", mas se não for possível, pode ser do tipo eletrolítico de alumínio (ou seja, eletrolítico "comum"). Sua tensão de trabalho deve ser 10V ou mais (mas preferencialmente menor que 50V). Observe a polaridade mostrada no circuito.

      6)  o Capacitor C5, pode ter qualquer valor acima do mostrado no circuito (como por exemplo  1000 uF).  Sua tensão de trabalho deve ser 10V ou mais (mas preferencialmente menor que 50V). Observe que devido ao valor alto da Capacitância, o único tipo viável é o eletrolítico comum (o de alumínio). Observe a polaridade mostrada no circuito.

      7)  caso vc não tenha disponível a alimentação de 5V, use a de 3.3V  onde está marcado 5V, mas neste caso altere os seguintes componentes:  R1 = 63 ohms, e R7 = 15 ohms. Os demais componentes não precisam ser alterados.

      8)  atente ao valor dos componentes. Se tiver alguma dúvida em relação ao valor de algum deles ou em relação a alguma unidade, não deixe de perguntar aqui. Observe que escolhi valores comuns, facilmente encontrados no mercado brasileiro.

      Muito importante:  o circuito inverte a Lógica de detecção do Sensor.  Então se no seu código está usando "LOW" para detectar o Sensor, deve mudar para "HIGH".  Mas se vc estiver usando "HIGH", deve mudar para "LOW". Outra possibilidade é acrescentar o "!" antes da expressão lógica resultante.

      Além da imunidade proporcionada pelo Circuito mostrado na figura anterior, é possível também aumentar ainda mais essa imunidade no próprio código. Se vc postar aqui o trecho do seu código onde está detectando o Sensor, eu posso ajustar o mesmo para se obter essa imunidade adicional. Não é necessário postar todo seu código, apenas a parte que detecta o Sensor, mas fique a vontade se quiser postar o código todo pois posso fazer comentários de melhoria sobre ele (claro, se isso realmente for necessário).

      Se ainda ocasionalmente estiver ocorrendo falha na detecção, aconselho acrescentar um "Schmitt Trigger" ( por exemplo 4093B ou 74HC14)  entre o Resistor R6 e a entrada do ESP8266. Mas isso pode ser evitado, se a imunidade for aumentada no código como mencionei logo acima.

      Ah, eu calculei o circuito para velocidade de detecção das peças, em até cerca de 30 peças por segundo. Acredito que seja o suficiente para o seu caso.

      Esqueci de perguntar:  qual dos diversos módulos com o ESP8266 vc está usando? e qual  pino está usando para ler o Sensor?

      Espero ter ajudado.

      Abrçs,

      Elcids

Nossa, que aula parabens pela explicação.

Estou utilizando o Wemos D1 R1, porta D0 (zero) input_pullup.

O trecho do código segue abaixo...

while (buttonState == 1)//Enquanto a peça estiver passando no sensor, LCD trabalhado....
{
if (contadorState == 1)
{
qtd_pecas++;
qtd_total++;
lcd.setCursor(0,1);
lcd.print(qtd_pecas);
lcd.print(" PECAS POR MIN. ");
lcd.setCursor(0,14);
lcd.print("TOTAL ");
lcd.print(qtd_total);
contadorState = 0;
break;
}
break;
}

olá Renan.

      Há alguns pontos não muito claros no trecho de código que vc postou. Mas não é necessário vc esclarecer os mesmos, pois acredito que a melhor forma de demonstrar como fazer isso, é publicando um exemplo de código com a contagem das "peças", com uma técnica simples que aumenta ainda mais a imunidade proporcionada pelo circuito que postei.

      Vou também postar uma simulação mostrando isso funcionando, mas como não há como usar o ESP8266 na simulação (já que não há modelo disponível), então irei fazer para o Arduino UNO mesmo, de uma forma que o código funcione também para o ESP8266  (sem necessidade de modificar este código).

      Poderia informar qual Interface vc está usando com o Display LCD ?   é a Interface Paralela  ou  a Interface I2C ?

      Ah, e qual o "tamanho" do Display?  é 16x2 ?  ou é 20x4 ?

      Fiquei também em dúvida sobre qual pino vc está usando, pois é um pouco confusa a nomenclatura da pinagem do Wemos mostrada em diversas imagens na Internet. Vc poderia postar uma imagem marcando na placa do Wemos qual pino vc está usado para ler o sensor?   (ou pode ser uma foto da sua montagem que mostre claramente qual o pino usado)

      Muito Importante:  para usar o circuito que postei, no código  não  ligue o  Pullup  nem o Pulldown do pino de Entrada Digital usado para ler o Sensor (isto é absolutamente necessário, do contrário o circuito não funcionará como esperado).

      Abrtçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço