Índice:

Reproduzir músicas (MP3) com Arduino usando PWM no alto-falante ou transformador Flyback: 6 etapas (com imagens)
Reproduzir músicas (MP3) com Arduino usando PWM no alto-falante ou transformador Flyback: 6 etapas (com imagens)

Vídeo: Reproduzir músicas (MP3) com Arduino usando PWM no alto-falante ou transformador Flyback: 6 etapas (com imagens)

Vídeo: Reproduzir músicas (MP3) com Arduino usando PWM no alto-falante ou transformador Flyback: 6 etapas (com imagens)
Vídeo: Amplificador com arduino... DEU RUIM... 2024, Novembro
Anonim
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback
Reproduza músicas (MP3) com o Arduino usando PWM no alto-falante ou transformador Flyback

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

Esquemático
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

Converter arquivo MP3 em WAV usando o Audacity
Converter arquivo MP3 em WAV usando o Audacity
Converter arquivo MP3 em WAV usando o Audacity
Converter arquivo MP3 em WAV usando o Audacity
Converter arquivo MP3 em WAV usando o Audacity
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

WAV para C-Code
WAV para C-Code
WAV para C-Code
WAV para C-Code
WAV para C-Code
WAV para C-Code

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

Faça um arquivo final e inicialize seu Linux
Faça um arquivo final e inicialize seu Linux
Faça um arquivo final e inicialize seu Linux
Faça um arquivo final e inicialize seu Linux
Faça um arquivo final e inicialize seu Linux
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: