Índice:
- Etapa 1: coisas que precisamos para este projeto (requisitos)
- Etapa 2: Compreendendo o princípio de funcionamento
- Etapa 3: esquemático
- Etapa 4: Converter arquivo MP3 em WAV usando o Audacity
- Etapa 5: WAV para código C
- Etapa 6: faça um arquivo final e inicialize seu Linux
Vídeo: Reproduzir músicas (MP3) com Arduino usando PWM no alto-falante ou transformador Flyback: 6 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Ola pessoal, Este é o meu primeiro instrutível, espero que gostem !!
Basicamente, neste projeto eu usei a comunicação serial entre meu Arduino e meu laptop, para transmitir dados musicais do meu laptop para o Arduino. E usando o Arduino TIMERS para reproduzir os dados como um sinal PWM.
Queria dizer que, este projeto não é para iniciantes !!!.
Na verdade, esse projeto foi um dos mais longos, porque temos que fazer muitas coisas para que funcione.
ATENÇÃO
Eu fiz a segunda parte deste instrutível, que é muito mais fácil e precisa de problemas mínimos para funcionar
Link para a segunda parte (a mais fácil).
Etapa 1: coisas que precisamos para este projeto (requisitos)
1. Placa Arduino (podemos usar qualquer placa (328, 2560), ou seja, Mega, Uno, Mini, etc, mas com pinos diferentes específicos)
2. PC ou laptop com Linux (usei o Fedora 29) ou Live USB com Linux
3. Breadboard ou Perfboard
4. Fios de conexão
5. TC4420 (driver Mosfet ou algo parecido)
6. Power Mosfet (canal N ou P, conecte-os adequadamente) (usei o canal N)
7. Alto-falante ou transformador Flyback (sim, você leu certo !!)
8. Fonte de alimentação adequada (0-12V) (usei minha própria fonte de alimentação ATX)
9. Dissipador de calor (eu salvei do meu antigo PC)
10. PC com Windows e pen drive.
Para saber o funcionamento detalhado de cada componente e deste projeto, leia a próxima etapa.
Tornei a segunda parte instrutível, que é muito mais fácil e precisa do mínimo de problemas para funcionar. Link para a segunda parte (a mais fácil).
Etapa 2: Compreendendo o princípio de funcionamento
Ahhh!! a parte mais longa de um instrutível, ler e escrever esta seção é entediante.
Em primeiro lugar, precisamos obter uma visão geral de como isso realmente funciona.
o que estamos fazendo aqui é primeiro converter nossa música MP3 em um arquivo WAV e este arquivo em um arquivo de cabeçalho C usando o software, que está no link. Na verdade, esse código C contém amostras de dados de 8 bits (por que 8 bits? Leia mais) que precisamos reproduzir usando nosso Arduino a uma taxa ou velocidade fixa, que é especificada de acordo com nossa Taxa de amostragem.
Teoria de um sinal de áudio.
Para quem não sabe o que é a taxa de amostragem ou taxa de bits: -
A taxa de amostragem é definida como o número de amostras que estamos tocando em um segundo (geralmente medido em Hz ou KHz).
Para saber mais em detalhes: -Clique aqui
As taxas de amostragem padrão são 44.100 Hz (melhor qualidade), 32.000 Hz, 22050 Hz, etc.
o que significa que 44100 amostras são usadas em um segundo para gerar uma onda de acordo.
ou seja, cada amostra deve ser reproduzida em um intervalo fixo de 1/44100 = 22,67 uS.
Em seguida, vem a profundidade de bits de um sinal de áudio, que geralmente é uma medida de quão precisamente um som é representado em áudio digital. Quanto maior a profundidade de bits, mais preciso será o som digital.
Mas com Arduino ou qualquer outro microcontrolador com clock de 16Mhz nos permite usar até 8 bits apenas. Vou explicar por quê.
Existe uma fórmula na página nº 102 na folha de dados 328p: - Folha de dados
Não vou entrar em detalhes por que estou usando essa fórmula.
frequência do sinal = sinal do relógio / N x (1 + TOP)
Sinal de relógio = 16 MHz (placa Arduino)
N = prescaler (1 é o valor para o nosso projeto)
TOP = valor 0 a 2 ^ 16 (para contador de temporizador de 16 bits) (255 = 2 ^ 8 (8 bits) para nosso projeto)
obtemos o valor da frequência do sinal = 62,5 kHz
Isso significa que a frequência da onda portadora depende da profundidade de bits.
Suponha que se usarmos o valor TOP = 2 ^ 16 = 65536 (ou seja, profundidade de 16 bits)
então obtemos o valor da frequência do sinal = 244 Hz (que não podemos usar)
OKK … Então, essa teoria de como funcionam os sinais de áudio é o suficiente, então, de volta ao projeto.
O código C gerado para uma música pode ser copiado para o Arduino e pode ser reproduzido, mas estamos limitados a uma reprodução de áudio de 3 segundos com uma taxa de amostragem de 8.000 Hz. Porque este código C é um arquivo de texto e, portanto, não compactado, em vez de descompactado. E ocupa muito espaço. (por exemplo, o arquivo de código C com áudio de 43 segundos com amostras de 44, 1 KHz ocupa espaço de até 23 MB). E nosso Arduino Mega nos dá um espaço de cerca de 256 Kb.
Então, vamos tocar músicas usando o Arduino. Não é possível. Este Instructable é falso. Não se preocupem leitores, É por isso que precisamos usar algum tipo de comunicação entre o Arduino em velocidades tão altas (até 1 Mb / s) para enviar dados de áudio para o Arduino.
Mas de quanta velocidade exatamente precisamos para fazer isso ??
A resposta é 44.000 bytes por segundo, o que significa velocidades superiores a 44.000 * 8 = 325.000 Bits / s.
Precisamos de outro periférico com grande armazenamento para enviar esses dados para nosso Arduino. E esse será o nosso PC com Linux (por que PC com Linux ??? leia mais para saber mais sobre ele).
Ahaa… Isso significa que podemos usar a comunicação serial… Mas espere… serial é possível apenas em velocidades de até 115200 Bits / s, o que significa (325000/115200 = 3) que, é três vezes mais lento do que o necessário.
Não, meus amigos, não é. Usaremos uma velocidade ou taxa de transmissão de 500.000 bits / s com um cabo de até 20-30 cm no máximo, que é 1,5 vezes mais rápido do que o necessário.
Por que Linux, não Windows ???
Portanto, precisamos enviar amostras em um intervalo (também especificado acima) de 1/44100 = 22,67 uS com nosso PC.
Então, como podemos programá-lo para fazer isso ??
Podemos usar C ++ para enviar um byte de dados por meio de Serial em um intervalo usando algum tipo de função de sono
como nanosleep, Chrono, etc, etc….
para (int x = 0; x
sendData (x);
nanossono (22000); // 22uS
}
MAS NÃO FUNCIONA NO WINDOWS também não funcionou desta forma no Linux (mas encontrei outra forma que você pode ver no meu código anexo.)
Porque não podemos atingir essa granularidade usando janelas. Você precisa do Linux para atingir essa granularidade.
Problemas que encontrei até mesmo com o Linux …
podemos alcançar tal granularidade usando Linux, mas não encontrei tal função para suspender meu programa por 22uS.
Funções como nanosleep, Chrono nanosleep, etc, etc. também não funcionam, pois proporcionam um sono apenas superior a 100 uS. Mas eu precisava exatamente, precisamente 22 uS. Eu pesquisei cada página do google e experimentei todas as funções possíveis que estão disponíveis em C / C ++, mas nada funcionou para mim. Então eu vim com minha própria função, que funcionou para mim como um verdadeiro amuleto.
E meu código agora fornece um sono exato e preciso de 1uS ou superior !!!
Então, cobrimos a parte difícil e o resto é fácil …
E queremos gerar um sinal PWM usando Arduino com uma frequência específica e também frequência de onda portadora (62,5 KHz (conforme calculado acima) para uma boa imunidade de sinal).
Portanto, precisamos usar os chamados TIMERS do Arduino para criar o PWM. Aliás, não vou entrar em muitos detalhes sobre isso, pois você encontrará muitos tutoriais sobre o tema TIMERS, mas se não encontrar algum, comente abaixo que farei um.
Eu usei um driver TC4420 Mosfet, para salvar nossos Arduino Pins, porque eles não podem fornecer tanta corrente para conduzir um MOSFET às vezes.
Então, essa era quase a teoria desse projeto, podemos ver agora o diagrama do circuito.
ATENÇÃO ATENÇÃO ATENÇÃO
Na verdade, este projeto foi dificultado muito intencionalmente (vou dizer o porquê), há outro método que requer noPC apenas Arduino e alto-falante em meu próximo instrutível. O link está aqui.
* O objetivo principal deste projeto é usar a comunicação serial e saber seu poder e aprender como podemos programar nosso PC para fazer tarefas precisamente em intervalos tão finos. *
Etapa 3: esquemático
Conecte todos os componentes conforme mostrado no esquema. Então você tem aqui duas opções: -
1. Conecte um alto-falante (conectado com 5V)
2. Conecte um transformador Flyback (conectado com 12V)
Eu tentei ambos. E ambos funcionam muito bem.
Isenção de responsabilidade:-
* Recomendo usar o transformador Flyback com cuidado, pois pode ser perigoso porque produz altas tensões. E não serei responsável por nenhum dano. *
Etapa 4: Converter arquivo MP3 em WAV usando o Audacity
Então, primeiro de tudo, baixe o software
1. Audacity, pesquise e baixe do Google
2. Para converter o arquivo WAV em C-Code, baixe um aplicativo de janela, denominado WAVToCode
Você pode aprender a usar o software WAVToCode neste link e fazer o download neste link.
Também darei etapas detalhadas sobre como usar os dois softwares.
Por favor, veja as fotos vinculadas a este instrutível.
Nesta etapa, converteremos MP3 em Wav. (Siga as fotos, a taxa do projeto deve ser 44100 Hz)
Na próxima etapa, converteremos um arquivo wav em código C.
Etapa 5: WAV para código C
Acompanhe as fotos.
Veja as duas últimas imagens, as alterações devem ser precisamente as mesmas, as letras maiúsculas devem ser maiúsculas e as minúsculas devem ser menores, ou você obterá um erro de sintaxe durante a compilação.
(Você pode ver que a música de 1 minuto 41 ocupou 23 MB de espaço.)
Altere o nome e a duração da música com o nome e a duração da sua música, respectivamente.
E salve o arquivo C Code.
Faça isso com todas as músicas que deseja tocar com o Arduino
Etapa 6: faça um arquivo final e inicialize seu Linux
Adicione todas as suas músicas convertidas ao arquivo fornecido neste link.
E acompanhe as fotos.
Faça upload do código no Arduino, que anexei.
Lembre-se dos nomes dos arquivos com o código C. (por exemplo, estilo de vida, dólar, peso), porque temos que mencionar exatamente os mesmos nomes em nosso código com distinção entre maiúsculas e minúsculas.
No final, acione seu Fedora Live USB ou outro e instale o compilador gcc e, em seguida, usando as instruções de compilação da pasta, compile o programa e execute-o.
No final, você poderá ouvir músicas do Speaker ou Flyback.
Obrigado por ler este instrutível e por favor, comente se você gostou.
ATENÇÃO Tornei a segunda parte deste instrutível, que é muito mais fácil e precisa do mínimo de problemas para funcionar. Link para a segunda parte (a mais fácil)
Recomendado:
Reproduzir vídeo com ESP32: 10 etapas (com imagens)
Reproduzir vídeo com ESP32: Este Instructables mostra algo sobre como reproduzir vídeo e áudio com ESP32
Como fazer um rádio estéreo Audiófilo Ford reproduzir arquivos MP3: 7 etapas
Como fazer um rádio estéreo Audiófilo da Ford reproduzir arquivos MP3: Este manual fornecerá alguns detalhes importantes sobre como atender aos requisitos de compatibilidade do CD-R de MP3 de um Audiófilo Ford (e provavelmente um Mach 300, Shaker 500 e Shaker 1000 ) estéreo de fábrica para que você possa gravar e desfrutar de arquivos MP3 em um CD
Usando um estéreo automotivo para reproduzir MP3s em um estéreo doméstico mais antigo: 7 etapas
Usando um estéreo automotivo para reproduzir MP3 em um estéreo doméstico mais antigo: Reproduzindo arquivos mp3 em um estéreo doméstico Baixei ou copiei cerca de 5.000 músicas de rock clássico nas últimas duas décadas e precisava de uma maneira simples de reproduzir arquivos de música digital em um estéreo doméstico mais antigo. Tenho um computador de home theater (HTC) conectado
Álbuns com tags NFC para reproduzir músicas do Spotify automaticamente no Chromecast: 5 etapas
Álbuns com tags NFC para reproduzir músicas do Spotify automaticamente no Chromecast: Este projeto começou com a ideia de fazer uma colagem de álbum dos meus artistas mais tocados no Spotify. Depois de brincar com a API do Spotify em Python, achei que seria bom vincular as capas dos álbuns aos URIs do Spotify e começar a tocar
Reproduza músicas usando o motor de passo !!: 11 etapas (com imagens)
Reproduzir músicas usando motor de passo !!: Este projeto é sobre projetar uma interface dinâmica simples, que permitirá interagir com um motor de passo de duas maneiras diferentes. A primeira interface controlará a direção e a velocidade do motor de passo através do uso de um GUI simples, que h