LusoRobótica - Robótica em Português

Electrónica => Componentes Genéricos => Tópico iniciado por: almamater em 18 de Dezembro de 2015, 10:55

Título: VU Meter Decente
Enviado por: almamater em 18 de Dezembro de 2015, 10:55
 >:( Ando a tentar fazer um Audio VU Meter mas está difícil, o objectivo é usar um destes microfones:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs21.postimg.org%2Fe0qucwvyr%2Fm_ZDWrx3z7m_q_JHTc_Zm9wl_A.jpg&hash=039bc5ad5b505498a91046b2a1cce812f8d46322) (http://postimg.org/image/e0qucwvyr/)

Mas não consigo obter uma sensibilidade de jeito, já testei uns quantos circuitos (com transistor ou com um LM386) mas não sei porquê o resultado não é lá grande coisa, a leitura que faço num Arduino é muito constante, só sons maiores que fazem a diferença.

Queria usar isto para acender uns leds conforme o som ambiente, mesmo até quando as pessoas falam, alguém já fez algo parecido e que esteja a funcionar bem e que possa partilhar o esquema de amplificar o sinal do microfone?

P.S.: Não estou a pedir que façam uma pesquisa no Google por mim (pois já fiz e já testei alguns), só a partilha de um esquema que tenham de facto usado e que possam mostrar.
Título: Re: VU Meter Decente
Enviado por: jm_araujo em 18 de Dezembro de 2015, 11:59
Tens ligado na polaridade correta?
Se estás a usar o ADC do Arduino, qual o intervalo de amostragem?

Sendo o ADC relativamente lento não deve ter sensibilidade às frequencias mais altas, talvez fosse melhor fazer um detetor de pico: metes um diodo e um condensador à saída do circuito de amplificação, com uma resistência de bleed grandota para que se não houver sinal o valor no condensador vá caíndo. Em vez de fazer as contas ia experimentando valores até ficar visualmente agradável.
O circuito seria algo do género: http://circuitswiring.com/single-transistor-half-wave-peak-detector-circuit/ (http://circuitswiring.com/single-transistor-half-wave-peak-detector-circuit/) (procurei no google images, não validei os valores usados).


Título: Re: VU Meter Decente
Enviado por: almamater em 18 de Dezembro de 2015, 12:08
Sim liguei o micro na polaridade correcta, medi com um multimetro e a resistência de um pino é 0.00 e portanto será esse o GND. O intervalo já testei com 200ms, 500ms e mesmo 1000ms e fazer um ciclo de X amostras e depois apresentar a média..

O esquema da imagem parece-me bem, até porque já tinha visto um parecido com uma resistência de 1M, vou testar a ver o que devolve.

Obrigado.
Título: Re: VU Meter Decente
Enviado por: dropes em 18 de Dezembro de 2015, 14:17
Esse tipo de micro (piezoelétrico) tem grande rendimento, basta uma resistência de 10k aproximadamente ao micro + um condensador de desacoplamento DC + divisor de saída; o máximo que pode ser aplicado é um transístor para aumentar o ganho.
Na amostragem após a conversão ADC e processamento, deve levar também um arrasto para o gráfico de saída não ser repentino tornando-se impercetível a sua visão.

Já agora apresento um pequeno circuito que não passou da breadboard sem drivers, esse arrasto foi aplicado para suprimir as psicadélicas :P

http://youtu.be/SbZLP3Mb0go (http://youtu.be/SbZLP3Mb0go)
Título: Re: VU Meter Decente
Enviado por: almamater em 18 de Dezembro de 2015, 15:15
Ena nice project dropes ;)

Em tempos comrpei uma cena no ebay, um kit de VU Meter, e encontrei agora o esquema daquilo, que por acaso funcionava mesmo bem:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs4.postimg.org%2F9ozlfy9qx%2FIMG_20151218_082717.jpg&hash=659957e72e2da2ae67ac6a4c54bdb177ca323d35) (http://postimg.org/image/9ozlfy9qx/)

parece que é mais ou menos como dizem.
Título: Re: VU Meter Decente
Enviado por: dropes em 18 de Dezembro de 2015, 15:29
Obrigado :)
Era para sair um KIT mas não passou disto, 2 semanas só a fazer um AGC por software...

Sim, o circuito é esse mesmo, apenas precisas de colocar um divisor resistivo no "output C3" porque a impedância do ADC  é alta e não irias ter grandes leituras, o calculo para estas resistências deve ser feito para se ter uma tensão média, exe: gama=2.5V valor de entrada=1.25V
Logo na saída de C3 deves ter 1.25V em estado de repouso.

No calculo após a conversão ADC, deve ser subtraída a onda negativa, neste caso: captura - (1024/2) (10bits).
Título: Re: VU Meter Decente
Enviado por: senso em 18 de Dezembro de 2015, 16:15
Para um VU, 8 bits de adc chega e sobra, pode correr o clock do ADC acima do "limite" dos 15.xKhz.
Título: Re: VU Meter Decente
Enviado por: almamater em 19 de Dezembro de 2015, 18:30
Antes de fazer com o transistor usei um LM386:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs2.postimg.org%2Fexwna9lat%2Ffull1.jpg&hash=31896e03fea63736fad0e56c94b33dfcc48911b1) (http://postimg.org/image/exwna9lat/)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs2.postimg.org%2F5h6u3n1g5%2FIMG_9155.jpg&hash=66509b838121c4c14e18e491ea299d1feaca6dff) (http://postimg.org/image/5h6u3n1g5/)

Os resultados obtidos até nem estão mal, mas preciso que me digam se estão bem, não há assim uma grande variação mas penso que já dá para trabalhar com estes valores:

MIN 139
MAX 871
SILÊNCIO 499-506

https://youtu.be/6pnvpmqXzWk (https://youtu.be/6pnvpmqXzWk)
Sorry pela música, foi a 1ª que me apareceu no youtube :)

Como podem reparar, é preciso a música estar muito alta para haver uma variação grande, é normal?

Código usado:
Código: [Seleccione]
int maximum=0; //declare and initialize maximum as zero
int minimum=1023; //declare and initialize minimum as 1023
int track=0; //variable to keep track
void setup()
{
  Serial.begin(9600); //set baud rate
}
void loop()
{
  //record the highest value recieved on A5
  if (analogRead(5)>maximum) maximum=analogRead(A5);
  //record the lowest value recieved on A5
  if (analogRead(5)<minimum) minimum=analogRead(A5);
Serial.println(analogRead(5));
delay(300);
track++;//increase track by 1 after every iteration

  //display both the maximum and minimum value after 5 second
  //track is used to determine the time interval it takes for
  //the program to display the maximum and minimum values
  //e.g. here i use 1000 so as to display the min and max values
  //after every 5 second
  if (track==5000)
  {
    Serial.print("Maximum:\t");
    Serial.println(maximum);
    Serial.print("Minimum:\t");
    Serial.println(minimum);
    track=0; //set back track to zero
  }
}
Usei isto sem alterar quase nada do original, só mesmo para apresentar o valor lido no momento
Título: Re: VU Meter Decente
Enviado por: dropes em 19 de Dezembro de 2015, 19:08
Sempre podes aumentar o ganho colocando um condensador do pino 1 ao 8 do LM386.
Estás a ligar a saída (pino5) directamente ao arduino?!

Altera o R3 (22k) para 4.7k primeiro, esse valor é demasiado alto.
Título: Re: VU Meter Decente
Enviado por: almamater em 19 de Dezembro de 2015, 19:12
Olá,

sim estou a ligar exatamente como o esquema e depois o Output (pino 5) diretamente no A5 do Arduino, não é suposto ser assim?

Vou testar colocar o condensador e mudar a resistência.
Já mudei, os resultados agora parece que são mais sensíveis, as variações são maiores e mais sensível ao som, leituras em silêncio andam a flutuar por estes valores:
Código: [Seleccione]
492
492
499
494
484
549
493
513
512
525
499
518
495
506
Título: Re: VU Meter Decente
Enviado por: almamater em 19 de Dezembro de 2015, 21:39
Acho que assim já me entendo :) os valores parecem porreiros, vou experimentar com os LEDs