Este tutorial mostra como executar um arquivo .wav de um cartão SD com o Garagino e um conversor USB/Serial FTDI, sem a ajuda de nenhum shield! O arquivo .wav é uma extensão de arquivo de som das especificações RIFF (Resource Interchange File Format) da Microsoft. O arquivo .wav é mais simples de ser executado, uma vez que se trata basicamente de amostras de sons digitalizadas, diferentemente de outros formatos compactados, como o .mp3 por exemplo.
Para isto, serão necessários os seguintes componentes:
- 1 resistor de 82 Ohms (pode ser também 100 Ohms)
- 2 capacitores cerâmicos de 100 nF
O cartão SD recebe um valor de tensão máxima igual a 3,3V nos seus terminais, sendo que nas saídas padrão do Arduino, há 5V. Por isso optou-se pelo Garagino Proto, que pode operar de 1,8V a 5,5V, dispensando a necessidade de divisores resistivos ou conversores de nível lógico para conexão ao cartão SD. O arquivo é lido byte a byte do cartão, e os valores obtidos são colocados em uma das portas PWM do Garagino, que conectados a um alto-falante ou amplificador, produzem o som.
A seguir, monte o circuito como mostrado abaixo (clique na imagem para ampliar):
No circuito acima, um dos capacitores tem a função de "Reset", e o outro de desacoplar o nível DC da saída para o alto falante. O resistor de 100 ou 82 Ohms aumenta a impedância da porta do microcontrolador e limita sua corrente para que não seja danificada.
Agora, faça o download de uma de nossas músicas preferidas (".wav") pelo link abaixo:
http://www.4shared.com/music/o6XFq5zY/test.html
Está com o nome de "test.wav". Não modifique este nome por enquanto !!! Salve o arquivo no seu cartão micro SD e depois coloque-o no seu breakout. Abra a IDE do Arduino e digite o seguinte código:
// Firmware para leitura de arquivo .wav do cartão SD e reprodução em alto falante.
#include <SdFat.h> // Inclui a biblioteca "Sdfat.h" para leitura de cartão SD. Se você não tiver a biblioteca, faça o download e extraia na pasta "libraries" do Arduino
#define sound 6 // Pino 6 com PWM, definido como "sound" (para saída analógica).
const int chipSelect = 10; // Pino 10 como "chip select" do cartão SD.
SdFat sd; // Definição para uso da biblioteca.
SdFile myFile; // Definição para uso da biblioteca.
void setup() {
Serial.begin(9600); // Inicia a comunicação Serial.
pinMode(sound, OUTPUT); // Define o pino 6 como saída.
TCCR0B = 0x01; // Configura a frequência do PWM nos pinos 5 e 6 para 64KHz.
if (!sd.init(SPI_FULL_SPEED, chipSelect)) sd.initErrorHalt(); // Inicia SdFat com máxima velocidade ou imprime mensagem de erro no "Serial Monitor".
if (!myFile.open("test.wav", O_READ)) { // Abre o arquivo chamado "test.wav" (o nome pode ser mudado), se não, imprime mensagem de erro no "Serial Monitor".
sd.errorHalt("opening test.wav for read failed");
}
unsigned char data; // Declara uma variável para armazenar os dados do arquivo.
for(int count=0; count<46; count++) { // Pula o cabeçalho do arquivo test.wav para acessar os dados(depois de 129 leituras). Este número pode variar para cada arquivo.
data = myFile.read(); // Lê byte a byte até o final do cabeçalho.
}
while (data >=0) { // Se o dado a ser lido for maior ou igual a zero (não nulo),
data = myFile.read(); // Lê um byte do arquivo e armazena-o em "data".
analogWrite(sound, data); // Envia os dados para o pino 6 (pino ligado ao alto falante).
delayMicroseconds(40); // Espera um certo intervalo (em microssegundos) para a próxima amostragem (de acordo com a do arquivo .wav).
// Este tempo de espera faz com que as amostragens sejam mais próximas à frequência de 8KHz do arquivo.
}
myFile.close(); // Fecha o arquivo.
}
void loop() {
// Nada acontece aqui.
}
Agora faça o upload para o seu Garagino. Se tudo correr bem, suas caixas de som reproduzirão a música ".wav". E o seu tocador de arquivos ".wav" sem shield está pronto !!! Esperamos que tenha gostado. Qualquer dúvida, poste no blog.
Obs: Se quiser executar qualquer outro arquivo ".wav", salve-o no seu cartão SD, vá até a linha marcada em azul no código, e altere o nome "test" pelo nome do seu arquivo. Então, abra ele usando um conversor de arquivos de áudio (este ou outro), converta-o para uma taxa de amostragem de 8KHz e 8 bits por amostra, mono:
O valor de 8 bits por amostra foi adotado porque uma porta de saída PWM deste microcontrolador tem até 10 bits de resolução. Porém, como nos conversores geralmente não se encontra este valor, escolheu-se 8 bits. Os 8KHz de frequência permite o microcontrolador processar com mais facilidade as amostras de som (considerando atrasos por ciclos de máquina, varredura, etc).
Agora, execute o arquivo convertido com um editor hexadecimal. Vá então à parte escrita do arquivo 4 bytes após "data" e observe o número em hexadecimal correspondente. Veja o exemplo abaixo:
Converta este número (no caso 2E) para decimal. No exemplo, será 46 em decimal. Vá então à linha marcada em vermelho no código e modifique o número "46" para o do seu arquivo, esta é a posição onde começam os dados, após o cabeçalho do arquivo. Feche o editor hexa. Faça então o upload para o seu Garagino !!!
Links de Referência:
- PWM
Comentar
se eu quiser colocar um led pra piscar no final da execução da musica, como faço?
ja tentei por digitalWrite porém da erro, alguma ideia?
Marcelo,
Você pode usar o Arduino, sem problemas. Nesse caso precisará apenas do capacitor ligado ao alto falante (o outro não) e de divisores resistivos no cartão, que trabalha em 3.3V.
Abraço!
Se eu utilizar um Arduino no lugar do Garagino, vou precisar dos 2 capacitores cerâmicos?
Vicinius,
O estoque da loja será reposto nesta semana. :)
Abraço!!
Teria o esquema montado com o Arduino? Pq estão sem estoque dos componentes? É fácil encontrar a breakout para o SD em lojas da cidade? Será que não seria mais fácil e rápido comprar o shield? Quando o shield MP3 estará disponível na loja? Abraço!!
Pediu, tá lá... Hehehe...
Muito legal! Vou tentar implementar!
Seria legal se pudesse ser postado um vídeo dele em funcionamento.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)