Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Uma das minhas memórias mais antigas de usar um smartphone foi jogar o jogo 'Talking Tom'. O jogo era bem simples. Há um gato, chamado Tom, que pode falar, mais ou menos. No jogo, Tom ouvia qualquer entrada pelo microfone do telefone e então repetia tudo o que ouvia. Então, o que quer que diga a Tom, ele apenas repetirá a mesma coisa com sua própria voz estridente.
Embora pareça simples, todo esse procedimento requer muitas etapas complexas, como amostrar a entrada analógica do microfone em formato digital, manipular o áudio para dar a Tom sua voz única e, em seguida, reconstruir o sinal de todos aqueles valores digitais para reproduzi-lo pelo alto-falante. Todas essas etapas complexas, mas o smartphone lidou com isso como um encanto, mesmo 9 a 10 anos atrás!
O interessante seria ver se o mesmo pode ser feito com uma placa Arduino baseada em microcontrolador barato. Portanto, neste instrutível irei mostrar como você pode fazer um projeto simples do Talking Tom a partir de um Arduino e alguns outros aparelhos eletrônicos baratos.
Este instrutível foi escrito em colaboração com a Hatchnhack Makerspace em Delhi
NOTA: Este instrutível é a primeira versão do projeto que completa o recurso 'Talking' do Talking Tom, onde o arduino poderá repetir tudo o que você disser. A parte da mudança de voz será abordada na versão futura, embora, devido à menor resolução do Arduino no ADC integrado, o áudio gravado já soa um pouco diferente: P (isso pode ser notado claramente no vídeo do projeto).
Então vamos começar!
Etapa 1: Materiais Usados
Hardware:
- Um Arduino UNO
- Módulo de microfone MAX4466 com ganho ajustável
- Módulo leitor de cartão SD baseado em SPI
- cartão SD
- Amplificador de áudio como alto-falante do PC, módulo amplificador PAM8403, etc.
- Alto-falantes para conectar ao amplificador
- Jack de áudio feminino
- 1 x resistor de 1k ohm
- 2 x resistor de 10k ohm
- 1 x 10uF Capacitor
- 2 x botão de pressão
- Jumper Wires
Programas:
- IDE Arduino
- Audacity (opcional)
- TMRpcm e biblioteca SD para Arduino
Etapa 2: Uma Visão Geral Básica do Projeto
O projeto tem principalmente 2 recursos:
- Ele pode reproduzir um áudio escolhido aleatoriamente de um conjunto de arquivos de áudio pré-instalados no cartão SD para efeitos sonoros, etc.
- Ele pode gravar a entrada de som do microfone e reproduzi-lo assim que a gravação for interrompida. Isso permite que o arduino repita tudo o que ouviu através do microfone.
A interface do usuário do projeto consiste principalmente em 2 botões, cada um correspondendo a um dos recursos acima.
O principal trabalho de gravação e reprodução dos arquivos de áudio do cartão SD é feito pela biblioteca TMRpcm
A gravação de áudio usa o módulo de microfone MAX4466, o ADC interno do arduino e a biblioteca TMRpcm para amostrar o áudio e, em seguida, armazená-lo temporariamente no cartão SD como um arquivo '.wav' para reprodução. Os arquivos de áudio '.wav' usam PCM (Pulse Code Modulation) para armazenar os dados de áudio no formato digital para que possam ser reproduzidos novamente com facilidade. Geralmente, é melhor usar um ADC externo para projetos baseados em áudio, pois a resolução do ADC do Arduino não é tão alta, mas funciona para este projeto.
A reprodução dos arquivos de áudio (pré-instalados e gravados) também é feita com a ajuda da biblioteca TMRpcm, que emite o áudio como um sinal PWM de um pino habilitado para PWM do arduino. Este sinal é então alimentado em um filtro RC para obter o sinal analógico que é então alimentado em um amplificador para reproduzir o áudio através de um alto-falante. Para esta parte, você também pode usar um DAC externo, pois o arduino não tem um internamente. Usar um DAC pode ser uma opção melhor, pois melhoraria significativamente a qualidade do áudio.
A comunicação entre o módulo do cartão SD e o arduino é feita através de SPI (Interface Serial Periférica). O código faz uso da biblioteca SD e SPI para acessar facilmente o conteúdo do cartão SD.
Etapa 3: preparar o cartão SD e conectar o módulo do cartão SD
- Primeiro, você deve formatar o cartão SD com um sistema de arquivos FAT16 ou FAT32 (você pode usar seu smartphone para formatar o cartão SD).
- Agora pré-instale alguns arquivos de áudio.wav no cartão SD. Você pode gerar arquivos.wav com o Audacity (veja as instruções abaixo). Lembre-se de nomear os arquivos como audio_1.wav, audio_2.wav, audio_3.wav e assim por diante.
O módulo de cartão SD usa SPI para comunicar os dados com o arduino. Portanto, ele se conecta apenas aos pinos que têm SPI habilitado. Essas conexões são as seguintes:
- Vcc - 5v
- GND - GND
- MOSI (Master Out Slave In) - pino 11
- MISO (Master In Slave Out) - pino 12
- CLK (relógio) - pino 13
- SS / CS (Slave Select / Chip Select) - pino 10
Gerando arquivo '.wav' com o software Audacity:
- Abra o arquivo de áudio que deseja converter para.wav no Audacity.
- Clique no nome do arquivo e selecione 'Split Stereo to Mono'. Esta opção divide o áudio estéreo em dois canais mono. Agora você pode fechar um dos canais.
- Altere o valor da 'Taxa de projeto' na parte inferior para 16000 Hz. Este valor corresponde à frequência de amostragem máxima do ADC interno do arduino.
- Agora vá para Arquivo-> Exportar / Exportar como WAV.
- Escolha o local apropriado e o nome do arquivo. No menu de codificação, selecione 'PCM de 8 bits sem sinal', pois estamos usando o formato PCM para armazenar o áudio em formato digital.
Etapa 4: conectar a saída de áudio e o microfone
Conectando o microfone:
- Vcc - 3.3v
- GND - GND
- OUT - pino A0
NOTA:
- Tente conectar o microfone diretamente ao arduino em vez de usar uma placa de ensaio, pois isso pode induzir ruído desnecessário no sinal de entrada.
- Certifique-se de soldar de forma limpa os conectores no módulo do microfone, pois as juntas de solda ruins também produzem ruído.
- Este módulo de microfone possui ganho ajustável que pode ser controlado com a ajuda de um potenciômetro na parte de trás da placa. Eu sugiro que você mantenha o ganho um pouco baixo, pois isso não amplificará muito o ruído enquanto você pode falar mantendo-o próximo à sua boca, resultando em uma saída mais limpa.
Conectando a saída de áudio:
- Coloque o capacitor de 10 uF e o resistor de 1k ohm em série na placa de ensaio com o positivo do capacitor conectado ao resistor. Juntos, eles formam um filtro RC que converte a saída PWM em sinal analógico que pode ser alimentado no amplificador.
- Conecte o pino 9 do Arduino à outra extremidade do resistor.
- O terminal negativo do capacitor é conectado aos canais esquerdo e direito do conector de áudio fêmea.
- O GND do conector de áudio é conectado ao GND.
- A tomada de áudio está conectada ao amplificador com um cabo auxiliar. No meu caso, usei o sistema de alto-falantes do meu PC.
NOTA:
Usar o PWM como saída de áudio pode não ser a melhor opção, pois um DAC externo forneceria resolução e qualidade muito melhores. Além disso, o capacitor e o resistor no filtro RC podem induzir ruído indesejado. Mas ainda assim a saída foi bastante decente para este projeto
Etapa 5: conecte os botões
O projeto usa botões como interface de usuário. Ambos desempenham funções diferentes e são usados de forma diferente, mas têm a mesma fiação. Sua conexão é a seguinte:
- Coloque os botões na placa de ensaio.
- Conecte um terminal de um dos botões ao pino 2 do arduino com um resistor pull down de 10k ohm. O outro terminal do botão é conectado a 5v. Então, quando o botão é pressionado, o pino 2 fica ALTO e podemos detectar isso no código.
- O outro botão é conectado da mesma forma com o pino 3 do arduino em vez de 2.
O botão conectado ao pino 2 reproduz um arquivo de áudio aleatório do conjunto de arquivos de áudio pré-instalados no cartão SD quando é pressionado uma vez.
O botão conectado ao pino 3 é para a gravação. Você deve pressionar e segurar este botão para a gravação. O arduino começa a gravar assim que esse botão é pressionado e interrompe a gravação quando esse botão é liberado. Depois de parar a gravação, ele a reproduz imediatamente.
Etapa 6: faça upload do código
Antes de enviar o código, certifique-se de ter instalado todas as bibliotecas necessárias, como TMRpcm, SD etc.
Você também pode abrir o Serial Monitor após carregar o código para obter um feedback do que o arduino está fazendo.
Atualmente, o código não está manipulando o áudio gravado para fazê-lo soar diferente, mas pretendo incluir esse recurso na próxima versão, onde você poderá definir a frequência de saída do sinal de áudio com a ajuda de pot e obter diferentes tipos de sons.
E você está feito !!