terça-feira, 3 de dezembro de 2013

Transmitindo RF com o Raspberry Pi

Transmitir RF em um Raspberry Pi pode ser mais fácil do que se imagina, você precisará de um Raspberry Pi e um... Raspberry Pi. Isso mesmo, é possível transmitir em várias frequências(1Mhz até 250Mhz) usando somente um Raspberry Pi, claro que a distância que chegará sua transmissão será minúscula(coisa de centímetros) se não usar uma antena.

Obs: Se deseja transmitir utilizando um módulo de 433Mhz leia Comunicação sem fio entre Raspberry Pi e Arduino utilizando tx/rx de 433Mhz

Toda essa história já tem um bom tempo, em dezembro de 2012 o pessoal do Imperial College Robotics Society publicou uma forma de transmitir em FM no Raspberry Pi. Fizeram uma modificação que vai além do padrão para gerar sinais em diversas frequências, ainda que com ondas quadradas, programaram e alteraram a frequência rapidamente de tal modo que via software modularam algo bem próximo do FM para se transmitir áudio.

Tx em 82.5Mhz
Tx em 82.5Mhz



Em aspectos mais técnicos a frequência inicial vem de um PLL interno de 500mhz e um divisor MASH gera uma frequência final que vai até o GPIO, em geral espera-se que se use no máximo até 25Mhz desse output, que é exatamente que todos pensavam ser o limite, inclusive com avisos no datasheet em relação a exposição de módulos a maiores frequências(página 105), mas o máximo real de output estipulado está na casa dos 125Mhz que o datasheet também cita(página 106), entretanto o hack vai além dos 125Mhz, suportando até uma divisão por 2, na casa dos 250Mhz, coisa que pelo visto o divisor não foi projetado.

Apesar das limitações é possível ouvir bem e claramente o áudio de 22Khz transmitido(em mono)e com ajuda e correções da comunidade foi possível portar o código para usar DMA(que melhorou o desempenho) e também tocar áudio em 16 bits. Algumas modificações encontradas pela web também tentaram trazer melhorias como o stereo, que ainda não é implementado pelo código original.

 Segue um vídeo da transmissão FM em funcionamento:




Um detalhe a quem for testar além do WAV que vem como exemplo: além de converter obviamente, é preciso que o mesmo seja gerado em 22Khz, mono e 16 bits.

Apesar de ter feito alguns testes utilizando 48Khz, obviamente que a qualidade foi pior do que o esperado visto que o programa em questão não foi feito para lidar com isso. Comparem a imagem abaixo com os picos da primeira imagem do post.

WAV em 48Khz
WAV em 48Khz
Perceberam a diferença? Apesar de conseguir ouvir o áudio, ele ficou ruim e abafado.

Caso queira testar é só baixar o pacote Pifm.tar.gz e simplesmente executar como root no seu Raspberry Pi o áudio de exemplo com a frequência desejada:

./pifm sound.wav 82.5

Após a repercussão do pifm, apareceram projetos interessantes baseados nele como o PiHAT( Rasberry Pi Home Automation Transmitter ), que se trata de um projeto para automação residencial usando a frequência de 433.92Mhz. Como a frequência máxima seria de 250Mhz, foi usado a terceira harmônica da frequência de 144.64MHz e um filtro SAW após os testes com filtros LC não trazerem bons resultados.

 

Quanto a você ir além dos testes, colocar uma antena e ou amplificar o sinal, é sempre bom estar a par das frequências e potências máximas permitidas sem licença. E mais, sem nenhum tipo de filtro, haverá harmônicas e interferências em outras frequências.

Referências:
http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter
http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
http://www.skagmo.com/page.php?p=projects/22_pihat
http://www.reddit.com/r/raspberry_pi/comments/14k5o3/raspberry_pi_fm_transmitter_with_no_additional/
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&t=25301

3 comentários:

  1. Olá... É possível transmitir RFid usando o mesmo conceito ou algo parecido???

    ResponderExcluir
    Respostas
    1. Na teoria mas, o problema é que seria preciso potência de rf necessária também no dispositivo para ligar o mesmo, no caso dos rfids ativos(com bateria) seria diferente, mas no final você só poderia transmitir mas não receber, não achei nada por aí de alguém que tenha usado esse esquema no Raspberry Pi, ou seja, mesmo que seja possível e alguém o faça, seria somente por ser posssível e só transmissão, acho eu na minha opinião que não compensa.

      Excluir