Edição : Estou investigando esse problema há algum tempo. Acabou sendo um projeto muito mais difícil do que eu pensava e não para iniciantes. Isso requer hardware caro (microfone e amplificador) e algumas análises sofisticadas de áudio no microcontrolador. Mesmo um microfone completo com circuito mais amplo não fornece os resultados desejados (de acordo com os comentários sobre este produto)
Eu sou inteiramente novo no Arduino (mas estou familiarizado com programação). Para construir um medidor VU , quero colocar um microfone no pino 0 analógico do Arduino e exibir o valor através da conexão serial.
Eu pesquisei e encontrei este circuito:
... e tentei construí-lo com este resultado:
(Agora estou usando o circuito sugerido por Oli Glaser em sua resposta)
Os valores no monitor serial não mudam dependendo do volume da música.
Qual é a maneira mais fácil de medir o volume na entrada analógica do Arduino?
Além disso, tenho um TDA2822M , mas não sei se é útil para este projeto. A legenda no microfone diz XF-18D .
Edit: Meu código do arduino:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(0));
delay(300);
}
A saída serial: 1023 1022 1022 1022 1022 1023 1022 e assim por diante
Como posso verificar se o microfone funciona? É direcional?
Edit: Agora estou usando um transistor S9014. O ADC e a conexão serial funcionam (eu os testei com um potenciômetro).
A saída serial é agora em torno de 57.
Além disso, eu não tenho um multímetro ou osciloscópio.
Eu tenho um multímetro agora.
fonte
Respostas:
A maneira "mais fácil" é simplesmente aplicar o sinal e a amostra no ADC. Armazene os resultados em um buffer e exiba conforme desejado (no seu caso, envie para o PC via RS232).
Se você deseja o nível RMS do sinal, precisará calculá-lo em algum momento, antes de enviar para o PC ou depois.
Seu circuito de amplificação, como mostrado, não é o ideal, mas deve funcionar razoavelmente para um medidor VU básico. EDIT - Acabei de notar C2, remova-o, pois ele bloqueará a polarização DC do transistor, e o sinal irá balançar abaixo do solo.
EDIT - aqui está um circuito melhor para o transistor de amplificação:
Isso não deve se importar muito com o transistor usado, o viés de saída deve estar em torno de 2,5V.
Os valores exatos para o divisor de entrada (R3 e R4) não são muito importantes, é a proporção de 1: 4 que é mais. Assim, você pode usar, por exemplo, 400k e 100k, ou 40k e 10k, etc (tente não exceder ou abaixo desses valores respectivos). C2 deve ser> 10uF. C1 deve ser> 1uF (substitui C1 em seu esquema)
R1 e R2 precisam ser esses valores.
Tudo o que você precisa é do eletreto com seu resistor de polarização (R1 no seu esquema)
Um ponto de preocupação é que as linhas do Arduino 3.3V e 5V parecem estar interligadas - presumo que este seja um erro esquemático, mas se esse for o caso no circuito real, ele não funcionará e pode danificar algo.
Para identificar o (s) problema (s), seria útil ver seu código e o que você está vendo no lado do PC. Também qual transistor você está usando?
Se você possui um osciloscópio, pode verificar se o seu mic / transistor está funcionando corretamente. Caso contrário, um multímetro pode ser usado para realizar alguns testes mais básicos (por exemplo, confirmar + 5V presente, confirmar que a base do transistor está em ~ 0,6V, coletor de teste para garantir que não esteja preso a + 5V ou aterrar sem sinal presente)
Além disso, você precisa garantir que o RS232 esteja funcionando corretamente; portanto, escrever um código simples para enviar alguns valores de teste seria uma boa idéia.
Se você puder fornecer as informações solicitadas, informe-nos quais ferramentas você tem disponível, ajuda mais específica.
EDIT - se você estiver amostrando tão lentamente, precisará de um circuito de detecção de pico como este:
Você colocaria esse circuito entre o transistor e o pino do Arduino (menos C2)
O diodo pode ser praticamente qualquer diodo. Os valores de tampa e resistor são apenas uma orientação, eles podem ser alterados um pouco. Seus valores determinam quanto tempo a tensão levará para mudar com o nível do sinal. Você pode calcular isso usando a constante RC (ou seja, R * C - no exemplo acima, a constante RC é 1e-6 * 10e3 = 10ms. A tensão levará cerca de 2,3 vezes a constante do tempo para cair em 90% do valor original, portanto no exemplo acima, se a tensão começar em 1V e você remover o sinal, ela caiu para 0,1V em torno de 23ms depois.
EDIT - ok, acho que encontrei um grande problema. Seu transistor S9012 é um transistor PNP (como o S9015), você precisa de um transistor NPN para este circuito. O S9014 é um transistor NPN, então você terá que usá-lo.
Os capacitores marcados com "104" são quase certamente capacitores de cerâmica de 0,1uF. O valor (em pF) são os 2 primeiros números seguidos por um número de zeros definido pelo último número. Portanto, para 104, o valor é 10 + 4 zeros, ou 100.000pF. 100.000pF é 100nF ou 0,1uF.
EDIT - Não ter um escopo ou multímetro torna a vida muito difícil aqui (você deve se apossar de um ou de ambos o mais rápido possível)
No entanto, existem alguns osciloscópios básicos para placas de som de PC que podem ser usados para testar seu circuito de eletreto / transistor. O Visual Analyzer é um bom exemplo:
Se você substituir C2 (não estritamente necessário, mas é uma boa idéia), poderá alimentar o sinal diretamente no PC e observar no software para ver se o microfone e a amplificação estão funcionando corretamente. Se o seu PC tiver uma linha em uso, mas a entrada do microfone geralmente é boa para até 2V IIRC. Você também pode testar o eletreto diretamente - basta remover o bit do transistor e manter R1 e C1, receber sinal do outro lado de C1.
Observe que esse método não testará os níveis de CC, apenas a CA (devido a um limite de bloqueio de CC na entrada do cartão de memória), mas o sinal CA (áudio) é o que você está interessado aqui.
Se você tentar isso, publique as capturas de tela para que possamos ter uma idéia do que está acontecendo.
fonte
EDIT
blocos e editá-los para que possam ser entendidos sem ler o tópico do comentário? Também sou iniciante e não entendo como o problema foi resolvido e se posso usar o circuito que você postou como está.Supondo que seu circuito funcione, o sinal de áudio está na faixa de kHz enquanto o Arduino possui um ADC adequado para os níveis de corrente contínua. O componente DC no seu sinal é zero, ou seja, flutua sobre uma tensão fixa. É essa tensão fixa que o seu ADC está lendo.
Para corrigir isso, você colocaria um diodo em série com sua saída conectada ao ADC e a um capacitor e resistor.
A tampa cobrará o valor de pico recebido enquanto o resistor descarregará a tampa quando o sinal diminuir.
Edit: A entrada ADC está realmente flutuando, pois não possui viés devido ao capacitor em série. Se você estiver tentando minha solução, exclua C2.
fonte
When using single-ended mode, the ADC bandwidth is limited by the ADC clock speed. Since one conversion takes 13 ADC clock cycles, a maximum ADC clock of 1 MHz means approximately 77k samples per second. This limits the bandwidth in single-ended mode to 38.5 kHz, according to the Nyquist sampling theorem.
Suas leituras de 1022, 1023 são basicamente em escala completa no ADC do Arduino. Supondo que você tenha instalado um capacitor em série não defeituoso, como mostrado no diagrama, esse nível não pode ser proveniente do circuito do microfone que você construiu, pois isso pode apenas acoplar tensões variáveis (ou seja, CA).
Como resultado, suspeito que você esteja lendo a corrente de fuga no próprio ATMEGA - provavelmente obteria o mesmo resultado em qualquer um dos outros pinos analógicos (não conectados).
Tente fazer um divisor de tensão muito "leve" com alguns resistores de alto valor (entre 10K e 100K) e use isso para desviar a entrada analógica para metade da tensão de referência (você também pode usar um potenciômetro, que oferece uma capacidade extra de teste). Em seguida, sua leitura sem entrada deve estar na faixa de 512.
Depois de ter a entrada do ADC adequadamente enviesada, você pode começar a trabalhar tentando ver se obtém variação através dela. Você pode estar subamostrando um pouco a largura de banda, o que significa que você obterá o alias dos componentes de alta frequência, mas se tudo o que você está tentando fazer é estimar o volume geral que não deve ser um problema.
fonte