Arduino – Transmissão serial de áudio através de laser

Arduino – Transmissão serial de áudio através de laser

Existem vários meios de comunicação para troca de informações entre dois ou mais Arduinos, sejam meios utilizando fios ou sem fio (wireless). Cada meio de comunicação tem sua particularidade, vantagens e desvantagens. Uma forma de comunicação sem fio que pode ser utilizada com o Arduino é o laser. Esta forma de comunicação pode alcançar longas distâncias e é simples de ser utilizada.

O laser (ampliação de luz por meio da emissão estimulada de radiações) é um tipo de radiação eletromagnética monocromática. O laser é basicamente um feixe de luz que se propaga quase que de forma paralela, ou seja, as ondas se propagam com a mesma intensidade no espaço e no tempo, logo, quase não existe dispersão de luz, diferente das lâmpadas em que os fótons se propagam aleatoriamente.

O laser é aplicado em diversas áreas, desde a medicina e indústrias até equipamentos eletrônicos. Além disso, o laser também é comumente utilizado em projetos com plataformas microcontroladas. Com o Arduino, por exemplo, o laser pode ser utilizado junto a um receptor de laser para construção de um simulador de segurança, onde o laser emissor tem sua luz direcionada para o receptor e quando esse feixe de luz é interrompido o Arduino aciona um buzzer.

Uma outra funcionalidade do laser junto ao Arduino é a transmissão de dados. É comum encontrar em diversos blogs, projetos utilizando o laser emissor e o receptor de laser para envio de mensagens entre dois Arduinos, onde no emissor é digitado uma mensagem e no receptor a mensagem é recebida e exibida.

Para demonstrar o uso do laser no envio de dados entre dois Arduinos, optei por fazer a transmissão de áudio.

Essa transmissão será unidirecional e feita através de comunicação serial, onde o laser emissor vai estar com o pino de sinal conectado ao pino TX do primeiro Arduino (1) e o receptor de laser vai estar com o pino de sinal conectado ao pino RX do segundo Arduino (2). No Arduino (1), além do laser emissor teremos também um Módulo Leitor de Micro SD Card responsável por armazenar o áudio que será transmitido. No Arduino (2), teremos além do receptor de laser, um Módulo Amplificador de Áudio LM386 responsável por amplificar o sinal de áudio que sai do Arduino e vai para o alto falante. A taxa de comunicação serial nos dois Arduinos será configurada em 115200 bits/segundo e a modulação do áudio no Arduino (2) será feita através de PWM.

O arquivo de áudio a ser transmitido possui algumas restrições. Este arquivo deve estar no formato WAV, monofônico (mono), ter 8 bit de resolução, PCM unsigned 8 bit e taxa de amostragem (sample rate) em 11.5KHz. Testei diversas taxas de amostragem até chegar no valor de 11.5KHz, que deixa o áudio o mais perto possível do real considerando a transmissão serial em 115200 bits/segundo. Com a taxa de amostragem em 8KHz o áudio fica extremamente acelerado, com a taxa em 14,4KHz ou 16KHz o áudio fica muito lento.

OBS: o intuito desta postagem é demonstrar uma das funcionalidades do laser e do Arduino (dentro de suas limitações). Portanto, leve em consideração que a qualidade do áudio transmitido não será tão boa.

Para execução desta prática você vai precisar dos seguintes itens:

02 – Arduino Uno R3 com Cabo USB
01 – Módulo Laser LED 6mm 650nm de Alta Potência
01 – Módulo Receptor de Laser
01 – Módulo Leitor de Micro SD Card
01 – Módulo Amplificador de Áudio LM386
01 – Alto falante Stereo 3W 4 Ohms 52mm
01 – Fonte DC 12V 1A Bivolt Chaveada (para o LM386)
01 – Fonte DC 9V 1A Bivolt Chaveada (para um dos Arduinos)
14 – Cabos Jumper macho-fêmea
01 – Cartão de memória (micro SD Card)

OBS: você também pode alimentar os dois Arduinos pelo PC através de dois cabos USB. Caso não tenha uma fonte de 12VDC para o LM386, utilize uma outra fonte externa de pelo menos 5VDC.

Monte o esquema de ligação conforme a imagem abaixo:

img01_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno(Clique na imagem para ampliar)

OBS: no esquema de ligação o laser emissor está sendo alimentado com 5VDC, contudo, você também pode alimentá-lo com 3.3VDC. Lembrando que em 5VDC ele funciona em potência máxima.

Vale ressaltar que o Módulo Receptor de Laser deve ser utilizado em locais que não possua excesso de luz (lâmpadas ou luz solar), pois o módulo pode sofrer interferências e a saída de sinal será afetada. No vídeo ao final desta postagem, você vai ver que fiz uma espécie de proteção para o receptor de laser, pois ao iluminar o ambiente para fazer a gravação a recepção de áudio foi totalmente afetada devido a interferência causada pela luz.

Terminado o esquema de ligação, vamos prosseguir na preparação do áudio para ser adicionado no micro cartão SD. Para fazer a conversão do áudio vamos utilizar o Audacity. Faça o download do programa a partir do link abaixo:

Download Audacity

Após o download do programa faça a instalação do mesmo em seu computador. Terminado a instalação, abra o programa e clique no menu “Ficheiro” e “Abrir…”:

img02_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Na janela que abrir, procure pelo áudio MP3 que vai ser convertido em WAV e clique em “Abrir”:

img03_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Com o áudio aberto no programa, aperte “Ctrl + A” para selecionar toda a faixa de áudio e em seguida clique no menu “Faixas” e “Faixa Estéreo para Mono”:

img04_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Em seguida digite 11500 na opção “Taxa de Projecto (Hz)”, aperte “Ctrl + A” novamente para selecionar toda a faixa de áudio, clique no menu “Faixas” e “Mudar Taxa de Amostragem…”:

img05_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Na janela que abrir, confira se está definido 11500 e clique em OK:

img06_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Novamente clique em “Ficheiro” e “Exportar Áudio…”:

img07_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Na janela que abrir, selecione a opção “Outros ficheiros sem compressão”, clique em “Opções” e uma nova janela será aberta. Em “Cabeçalho” selecione a opção “WAV (Microsoft)”, em “Codificação” selecione a opção “Unsigned 8 bit PCM” e clique em OK para salvar o arquivo de áudio:

img08_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Após salvar, uma janela será aberta, basta clicar em OK e fechar o Audacity. O arquivo de áudio pode ficar com um pouco de ruído, logo, se você quiser pode limpar o ruído no próprio Audacity ou em algum outro programa (lembre-se de manter as configurações exigidas para o arquivo de áudio).

O arquivo de áudio WAV já está preparado.

Utilize um leitor de micro cartão SD, insira o micro cartão nele e insira na USB do PC. Formate o cartão em FAT32 e em seguida copie para ele o arquivo de áudio WAV que foi exportado do Audacity. Coloque o nome do arquivo de “audio” (sem aspas).

OBS: utilizei um micro cartão de 8GB classe 4.

Remova o leitor de micro cartão SD do computador, remova o micro cartão do leitor e o insira no Módulo Leitor de Micro SD Card.

Conecte o cabo USB no Arduino (1) e no computador para fazer o envio do código responsável pela leitura do arquivo de áudio que está no cartão de memória e envio dos dados para a serial.

O código para fazer a leitura do cartão de memória está disponível nos exemplos da biblioteca SD que é nativa da IDE do Arduino, contudo, o código é pré configurado para ler um arquivo TXT. O exemplo em questão está com o nome de “DumpFile” dentre os exemplos da biblioteca.

Abaixo você pode copiar e colar na IDE do Arduino o código já modificado para execução do arquivo de áudio:

No menu “Ferramentas” selecione a opção “Placa” e selecione o “Arduino/Genuino Uno”:

img09_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Ainda no menu “Ferramentas”, selecione a opção “Porta” e marque a porta COM em que sua placa foi alocada:

img10_arduino_transmissao_serial_de_audio_atraves_de_laser_musica_cartao_memoria_wav_mp3_audacity_uart_uno

Veja que no meu caso a placa foi alocada na COM5, porém, o seu Arduino pode ter sido alocado em uma COM de outro valor. Caso não saiba em qual porta COM sua placa foi alocada, basta retornar no menu Iniciar do Windows, acessar a opção Dispositivos e Impressoras e verificar a porta em que seu Arduino está conectado, retornar na IDE e selecionar a porta COM.

Feito as configurações, clique no botão para enviar o código ao Arduino e aguarde o carregamento.

Desconecte o cabo USB do Arduino (1) e conecte o cabo no Arduino (2) para fazer o envio do código responsável por interpretar os dados (áudio) recebidos na serial e reproduzir no alto falante.

Durante as pesquisas e estudos que fiz para execução desta prática, me deparei com diversos códigos e bibliotecas. Nos testes que fiz, a solução mais simples que encontrei para interpretar os dados recebidos na serial e reproduzir estes dados no alto falante, foi um pacote de códigos chamado audioStreamArduino.

Dentre os códigos fornecidos pelo pacote audioStreamArduino, vamos precisar apenas de um e que pode ser acessado no link abaixo:

Código audioStreamArduino audioSerial.ino

Abaixo você pode copiar o mesmo código que está disponível no link acima e em seguida colar na IDE do Arduino:

No menu “Ferramentas” selecione a opção “Placa” e selecione o “Arduino/Genuino Uno” caso não esteja configurado. Ainda no menu “Ferramentas”, selecione a opção “Porta” e marque a porta COM em que seu segundo Arduino foi alocado.

OBS: antes de clicar no botão para enviar o código ao Arduino (2), desconecte o cabo jumper do pino RX, caso contrário o código vai apresentar erro no carregamento.

Clique no botão para enviar o código ao Arduino e aguarde o carregamento. Terminado, conecte ao pino RX o jumper que você havia desconectado.

Agora você pode manter o cabo USB conectado ao Arduino (2) e no Arduino (1) pode conectar outro cabo USB e conectar ao computador ou pode usar uma fonte externa de até 12VDC para alimentar a placa. Com ambas as placas alimentadas, conecte na tomada a fonte externa que está alimentando o LM386.

Se tudo estiver certo, imediatamente você vai escutar o áudio sendo reproduzido no alto falante. Inserindo um obstáculo entre o laser emissor e o receptor de laser você estará interrompendo a transmissão. Removendo o obstáculo, a transmissão é reestabelecida e o áudio volta a ser reproduzido no alto falante. No LM386 há um trimpot para ajuste do volume do som reproduzido no alto falante.

Veja no vídeo abaixo o resultado final desta prática:

No player abaixo você pode escutar o áudio original em formato MP3 que utilizei e fazer uma comparação com o áudio do vídeo:

Dentre as opções de comunicação sem fio entre dois ou mais Arduino, há algumas bem mais eficientes e seguras que o laser e que proporcionariam uma qualidade bem superior ao final desta prática. Para transmitir dados importantes entre dois Arduino utilizando laser, esta forma apresentada na postagem não seria a ideal, pois poderia haver perda / violação de dados. Na transmissão de áudio conforme foi feito nesta prática, mesmo que haja perdas de dados, ainda assim vamos conseguir escutar a música sem perceber estas perdas.

Mediante a proposta desta postagem e mesmo que uma série de fatores possam afetar este tipo de comunicação, o objetivo foi alcançado com satisfação.

Abaixo vou deixar os links do material que pesquisei e que foi a base para criação desta postagem:

http://highlowtech.org/?p=1963

https://www.youtube.com/watch?v=MCTqC2-AN7o

http://playground.arduino.cc/Code/PCMAudio

http://www.maxpierson.me/2009/05/29/generate-real-time-audio-on-the-arduino-using-pulse-code-modulation/

https://github.com/idanre1/audioStreamArduino

http://tmrh20.blogspot.com/2012/06/arduino-wav-playback-from-sd-card-new.html

https://www.instructables.com/id/Arduino-Encoded-and-Modulated-Laser-and-Infrared-S/

Gostou deste tutorial? Então deixa seu comentário, dúvida ou sugestão aí embaixo!

Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop

Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.

Obrigado e até a próxima!

Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.



Postagem anterior:
Próxima postagem:
Postagem feita por

Formado em Engenharia da Computação, Técnico em Eletroeletrônica, Fundador e Diretor da MasterWalker Electronic Shop. Se preocupa com o aprendizado dos seus clientes e daqueles interessados em aprender sobre Arduino e plataformas embarcadas em geral.

Existe 1 comentário para esta postagem
  1. Bianca às 15:09

    Fiquei bobo com esse projeto! Muito interessante!

    Quero fazer um parecido, mas enviar sem fio pela comunicação serial, seria praticamente a mesma coisa, mas ligar um módulo sem fio na serial? É que no meu caso, quero fazer tipo uma conferência de voz, seriam vários dispositivos conectados e conversando ao mesmo tempo.