[RESOLVIDO] Ruído > Múltiplos Potenciômetros e Display Error!

Tenho um projeto de Mixer para PC com conexão serial ( arduino <-> C# ) e estou alimentando o mesmo apenas com o USB 3.1 (5v 900mah). Tenho 6 potenciômetros b1k, 3 pushbuttons e um display 1602A ligados no mesmo.

Problema 01 - valores dos potenciômetros instáveis, usando map() de 0 a 100, fica mudando sempre 1 pra cima e um pra baixo do valor mesmo não mexendo no potenciômetro.

      - Um   filtro passa-baixa (low-pass filter) resolveria o problema? to com tudo montado e soldado já, por isso não o fiz ainda. Mas acredito que pode ser influencia do problema 02 a seguir.

Problema 02 - display ligado, funcionando perfeitamente no Tinkercad, POREM no físico se eu efetuar meu loop com um codigo para "Rotacionar" as letras no display, depois de alguns segundos girando todo o conteúdo é substituído por dígitos ilegíveis (estilo filme do predador), já removi acentos, ou qualquer char especial e continua o problema)

     - Seria o problema 02 algum tipo de falta de voltagem referente a alimentação USB causando a instabilidade também no problema 01?

Vi que o low-pass suaviza a mudança de voltagem, seria minha salvação?
Sem%20t%C3%ADtulo.png

O projeto no TinkerCad ( já modifiquei o codigo no meu pc, mas da pra saber como é o funcionamento).

No "Serial" basta digitar "ARTISTA:MUSICA" para aparecer no display.

Ex.:  EMINEM:LOSE YOURSELF


Link do problema do Display:

https://youtu.be/J0bJIu2BqIE

Link do problema SEM rotação de caracteres:
https://youtu.be/8cHsMaSbU8I

https://www.tinkercad.com/things/jKSZ0xO9bBW-pc-mixer/editel?sharec...




Estou a procura da solução do Display, me aprofundando mais sobre o assunto.
no multímetro a saída do arruíno de 5v marca 4.75v na entrada de todos os componentes (variação de 0.1 as vezes mas no capacitor do display praticamente continuo a voltagem)

Atualizações:
- Efetuado troca de todos os fios por de maior bitola e organização de cabos.

- Criado buffer para reduzir ruído nos potenciômetros.

- Instalado capacitor 1000u no Vcc e Vss do display.
- Troca de resistor 68 para 2.2k no LED+ (diminuir luminosidade e economizar)
- Utilizado outro tipo de library (hd44780) para teste, problema continua.


>>>>> Aguardando a compra de um novo display com I2C para tirar a duvida se é display com problema



PROBLEMA RESOLVIDO.
Display com defeito, efetuei a troca e ficou 100%, ainda instalei o I2C depois pra ficar ainda melhor.
Obrigado a Todos.

Exibições: 267

Anexos

As respostas para este tópico estão encerradas.

Respostas a este tópico

Olá Paulo,

Sobre o Problema 1:

Essa instabilidade é própria das características elétricas da placa. Não existe uma placa do tipo Arduino que não fique variando a leitura analógica de uma porta 1 ou 2 para cima ou para baixo (algumas vezes até mais).
Não resolve nada colocar um filtro físico na entrada, uma vez que o problema está na placa e não no sinal de entrada.

Sugestão: ler várias vezes a porta analógica em um buffer (amostragem) e usar a mediana da amostragem para ser o valor de fato lido. Isso deve estabilizar a leitura da porta, eliminando pequena variações (um tipo de filtro em software).

Sobre o Problema 2:

Como você usa a classe String para manipular o texto que é mostrado no display, é bem possível que algo de errado está ocorrendo com a RAM do Arduino que talvez não seja suficiente ao longo de várias execuções do loop().

Ou seja, algo fica corrompido ou ocorra o chamado Memory Leak de alguma forma, ou vai somando na String tanto que estoura o Stack (pilha da memória). Teria que analisar cuidadosamente o programa...

Sugestão: mudar todo seu programa para usar char[16 * 3] no lugar de String. Assim usando um buffer de memória, você pode copiar a parte que quer mostrar no display para outro char[16 + 1] e terminar com 0 (byte zero terminam strings em char[]).

Boa sorte!

Vou efetuar sua sugestão e calcular a média, pensei que teria como fazer algo físico pra diminuir o consumo de processamento do arduíno. Sobre a string é bem interessante, eu cheguei a debugar colocando um serial.print() na variável e ver se era algo no tratamento de dados mas n dei nada, primeira coisa será mudar para char agora.

Rodrigo, quero agradecer a sugestão de criar um buffer para estabilizar a leitura do potenciômetro, ficou otimo até com um "smooth" dependendo do tamanho do buffer ele suaviza a mudança de valores, achei muito interessante!

Sobre o problema 02, descobri que não é a string, antes de começar a fazer a mudança pra String eu resolvi efetuar alguns testes e pra minha surpresa o problema não está no "carrossel" de letras.
Cheguei a colocar um resistor de 2.2k para diminuir a intensidade do LED para "economizar" energia, como o Tiago Merces deu uma sujestão eu coloquei um capacitor no Vcc e Vss de 1000u, mas infelizmente continua.
Ao menos não vou precisar colocar potenciômetro digital.

Agradeço a ajuda e um ótimo FDS!

Legal Paulo!

De fato o buffer de leitura de pino analógicos resolve muita coisa e permite fazer filtros em software úteis.

Sobre o problema 2,o que exatamente seus teste mostraram?
Uma possível solução é mudar a biblioteca. Talvez uma associada diretamente ao tipo de display que você usa, como por exemplo:

#include <hd44780.h>

O problema continua... estou a acreditar que ou peguei o display com problema, ou causei algum problema na hora da solda aquecendo de mais os contatos ou algo do gênero. Espero não ser minha placa mega haha

Site fonte do exemplo retirado de:
https://platformio.org/lib/show/738/hd44780

Utilizado:
#include <hd44780.h>
#include <hd44780ioClass/hd44780_pinIO.h>

Resultado:
https://youtu.be/TcxzJnhpkBc

Era para aparecer:
Uptime
(tempo rodando)

Vou comprar um display com I2C e testar SEM o I2C pra ver se é o display, e depois instalarei com I2C pra diminuir fiação do projeto.

Agradeço a ajuda Rodrigo!

Boa noite.

Explique mais sobre o seu projeto. Envie um diagrama e fotos do seu projeto. 

Onde vai ligar as entradas de aúdio para o MIXER?

1) Tenho 6 potenciômetros b1k - pot de 1K para mixar áudio ? Valor não recomendado. Eu usaria 4K7 ou 10K 

2)  valores dos potenciômetros instáveis, usando map() de 0 a 100, fica mudando sempre 1 pra cima e um pra baixo do valor mesmo não mexendo no potenciômetro - Aparentemente algo montado errado. Fiação muito longa? 

3) Para usar corretamente um LCD - sugiro leitura do meu tutorial: 

https://blog.eletrogate.com/guia-completo-do-display-lcd-arduino/

É um controlador de Mixer do Windows, neste caso envia os valores dos potenciômetros via SERIAL, no pc, um cliente o recebe, trata dos dados e modifica a faixa de áudio pré selecionada (YouTube, jogos, Spotify, microfones, qualquer programa que tenha uma faixa de áudio ativa).

Infelizmente não tenho diagrama, mas disponibilizei o projeto feito no tinkercad (meu primeiro projeto).
Vou providenciar o mais rápido possível a troca de potenciômetro pra 5~10k, pensando bem ele tem uma faixa maior e pode ter uma melhor performance.
O portal é bem rico em informações, a única diferença na ligação do LCD é que estou usando um resistor de 68 no pino 15, que ainda acho que o led está muito forte.

Sobre os fios, eu fiz vários fios de tamanhos iguais(7cm) para GND e V+ passando de um potenciômetro a outro, e no primeiro eu ligava na placa arduíno, o sinal(input) de cada um eu usei o próprio fio jumper.
Mas removi tudo, tirei as soldas e estou refazendo com novos fios e melhorando a solda.

Vou efetuar as dicas recomendadas e efetuar alguns testes com os potenciômetro mais alto e novos fios. Obrigado :)

Os fios não são finos demais? meça se está havendo queda de tensão na alimentação.

Estou modificando os fios de telefone(bem fino e rígido) pelos cabos de uma fonte de PC.
Irei fazer os testes assim que possivel.

Obrigado!

Boa tarde José!
Parece que o problema dos potenciômetros foi resolvido removendo o ruído criando um buffer e calculando a media.
Estava decidindo comprar uma interface I2C quando debugando percebi... se eu usar a matrix 0,0 ele buga e acontece o erro.

void setDefaultLcd() {
             lcd.clear();
             lcd.setCursor(1, 0);
             lcd.print(songDefault);
             lcd.setCursor(6, 1);
             lcd.print(autorDefault);
      }

isso funciona e fica tudo bem... mas se eu setar o cursor no 0,0 ele da o erro ( vídeo incluso no post inicial)
Teria alguma ideia?
Já descartei falta de alimentação, será defeito no display xing ling(falsificado).

Obrigado pela ajuda e um ótimo FDS.

"... conteúdo é substituído por dígitos ilegíveis (estilo filme do predador) ..."

Será que não tem outro ser por ai?

obs- a sugestão do José e do Rodrigo devem resolver sua questão. Se não der certo, experimenta colocar um capacitor de 1000uf no VCC.

obs2- vale lembrar o limite de corrente dos pinos do arduino, que se não me engano, são de 40ma. 68ohms, num calculo direto e sem considerar a queda de tensão pelo led, daria uma corrente, em 5v, de até 73ma. É bom saber qual a queda de tensão, para não comprometer o arduino.

Assim que terminar os reparos com as sugestões acima irei testar com o capacitor no Vcc e Vss.
Realmente é minha preocupação a queda de corrente, queria utilizar apenas o cabo USB, vou desabilitar tudo e deixar só o display ligado para verificar o problema, caso continue, irei alimentar o Arduino com uma fonte externa e jogarei um regulador de tensão 7805 antes para alimentar todos o projeto. e a conexão serial será feito via WIFI já q a minha placa tem integrado.
Ao menos ainda estou feliz, não queimei minha primeira placa(ainda) hahahaha

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço