02 novembro 2015

Como ouvir rádio no Arduino com o módulo rádio FM stereo TEA5767

Se você curte rádio FM, vai gostar desse módulo para Arduino, o módulo Rádio FM Stereo TEA5767, que eu usei para montar o circuito do post de hoje:

FM stereo radio module Arduino TEA5767

Esse módulo se caracteriza pelo baixo consumo de energia, e sintoniza a frequência FM de 76 à 108 MHz. Possui dois conectores P2 (3.5mm), um para ligação da antena, e outro para conexão de alto-falantes.

TEA5767 - Detalhes

O módulo rádio FM stereo TEA5767 aceita alimentação de 5V, e é controlado pelo CI TEA5767 (datasheet).

A comunicação com o Arduino é feita pela interface I2C, utilizando apenas dois pinos. No Arduino Uno, os pinos da interface I2C são os pinos analógicos 4 (SDA), e 5 (SCL). No Arduino Mega, são os pinos 20 (SDA) e 21 (SCL).

Circuito Rádio FM Arduino com o TEA5767


Para testar esse módulo, vamos montar um rádio FM com o seguinte material:

  • Arduino Uno
  • Módulo Radio FM TEA5767
  • Display LCD 16x2
  • Módulo I2C para display LCD
  • Potenciômetro 10 K para ajuste da frequência/sintonia

Infelizmente esse módulo não tem controle de volume, mas você pode ligar a saída de áudio à um amplificador ou criar um controle de volume simples usando potenciômetro. Apenas para testes, utilize um fone de ouvido comum ou algum sistema de alto-falantes com conector P2.

Ligue os componentes conforme o esquema abaixo. Para quem não está familiarizado com o uso do módulo I2C com Arduino, recomendo a leitura do tutorial Como utilizar o módulo I2C com display LCD:


Circuito Arduino Uno - I2C - LCD 16x2 - TEA5767


Para o programa, vamos utilizar as bibliotecas LiquidCrystal_I2C (download) e TEA5767Radio (download). Descompacte o arquivo ZIP e  renomeie a pasta LiquidCrystal para LiquidCrystalI2C, copiando-a para a pasta  LIBRARIES da IDE do seu Arduino. Renomear a pasta evita que você tenha conflitos com a biblioteca LiquidCrystal que já vem embutida na IDE.

A pasta da biblioteca TEA5767Radio, após ser descompactada, pode ser copiada diretamente para a pasta LIBRARIES da IDE.

No programa, vamos ler o valor do potenciômetro ligado à porta analógica A0 e converter o valor lido para uma frequência entre 87,5 e 108. Essa frequência é usada para sintonizar o rádio, por meio do comando radio.setFrequency(), na linha 47 do programa;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//Programa: Radio FM com modulo TEA5767
//Autor: Arduino e Cia

#include <Wire.h>
#include <TEA5767Radio.h>
#include <LiquidCrystal_I2C.h>

TEA5767Radio radio = TEA5767Radio();

double frequencia = 87.5;
double frequencia_ant = 87.5;

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  //Informacoes iniciais
  lcd.begin (16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Arduino FM Radio");
  Serial.println("Arduino FM Radio ");
}

void loop()
{
  //Le as informacoes do potenciometro
  int valor_pot = analogRead(A0);

  //Calcula a nova frequencia
  frequencia = ((double)valor_pot * (108.0 - 87.5)) / 1024.0 + 87.5;
  frequencia = ((int)(frequencia * 10)) / 10.0;

  //Caso a frequencia seja alterada, efetua a mudanca e
  //mostra as novas informacoes no display
  if (frequencia_ant != frequencia)
  {
    lcd.setCursor(0, 1);
    lcd.print("Freq: ");
    lcd.setCursor(6, 1);
    lcd.print("     MHz");
    lcd.setCursor(6, 1);
    lcd.print(frequencia, 1);
    Serial.print("Frequencia: ");
    Serial.println(frequencia);
    radio.setFrequency(frequencia);
    frequencia_ant = frequencia;
  }
}

Cada vez que o potenciômetro é acionado, o rádio é sintonizado na nova frequência e os valores são atualizados tanto no display LCD como no serial monitor.

Para o controle da sintonia, você também pode utilizar botões (push-button, por exemplo), ou até mesmo um encoder.


15 comentários:

  1. Olá,Como eu poderia fazer para receber a intensidade do sinal no display. Eu vi algo como signal.level.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Pois é. Eu também vi essa função, mas não consegui fazer funcionar no meu módulo. Não sei se é problema da placa ou alguma limitação da biblioteca.

      De qualquer forma, isso também me interessa e caso eu consiga eu posto aqui o resultado. :)

      Abraço!

      Excluir
  2. Amigão... Onde eu posso comprar esse modulo?

    ResponderExcluir
    Respostas
    1. Oi Gustavo,

      Tente procurar por tea5767 no Mercado Livre. Apesar que lá eu só vi os CIs para vender, você vai precisar de uma placa para solda-lo.

      Abraço!

      Excluir
  3. Respostas
    1. Boa noite,

      Pode me passar a mensagem de erro completa ?

      Abraço!

      Excluir
  4. Bom dia amigo, eu gostaria de inverter o projeto e trasnmitir a curta distancia e como uma FM caseira. Você teria algum exemplo de trasmissor FM usando o arduino e seus modulos?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Essa vou ficar te devendo... :)

      Abraço!

      Excluir
    2. Olá! Por acaso você sabe se isso é possível com esse módulo?
      Falou,
      Abraços!!!

      Excluir
  5. amigo estou tendo problemas com a compilação vc pode me ajudar

    ResponderExcluir
    Respostas
    1. Boa tarde Hugo,

      Vamos lá. O que acontece ?

      Excluir
  6. Sou iniciante... Gostaria de usar o lcd com keypad ao invés do potenciometro.... Tem algum código pra isso?

    ResponderExcluir
    Respostas
    1. Oi Cleyton,

      Não tem, mas é uma boa sugestão de post. Vou pesquisar sobre isso.

      Abraço e obrigado!

      Excluir
  7. Esse módulo só funciona com o arduino? Será que não tem como fazer um circuito só com esse módulo até mesmo para testes como o módulo mp3 WTV020-SD que não necessita do arduino para funcionar?

    ResponderExcluir
    Respostas
    1. Oi Robson,

      Não tentei, mas creio que vc tenha que ter um microcontrolador para enviar os comandos para o módulo.

      Abraço!

      Excluir