Recentemente a MakerHero adicionou no catálogo de produtos o Módulo Rádio FM TEA5767 e o Arduino UNO R3 SMD. O módulo TEA5767 é muito prático e compacto para aplicações com rádio FM, o mesmo possui: entrada P2, entrada de antena e comunicação I2C.
Neste post iremos abordar um exemplo de aplicação de rádio FM com o módulo TEA5767 e Arduino UNO SMD, além de outros componentes.
Módulo Receptor Rádio FM TEA5767
O módulo TEA5767 é um dispositivo pequeno e prático para aplicações que englobam rádio FM. Basicamente ele possui 3 conexões: alimentação e comunicação com a placa de desenvolvimento (arduino, esp32, raspberry, etc), antena e alto falante. Alimentação/comunicação por barra pinos, antena e alto falante por P2 (ou ligação por fios).
Projeto com o módulo TEA5767
Para esse post foi elaborado um projeto prático de rádio, com o módulo TEA5767, amplificador, alto falantes, display e placa de desenvolvimento. Com isso tem-se um Rádio FM funcional que pode ser usado no cotidiano.
Materiais Necessários
Abaixo tem-se a lista de componentes utilizados nesse projeto:
01 – Arduino UNO R3 SMD
01 – Módulo Receptor Rádio FM com Antena TEA5767
01 – Módulo Amplificador de Áudio PAM8403
02 – Mini Alto Falante 3W 4 Ohms
01 – Display OLED 0.91″ 128×32 I2C
05 – Push-button
01 – 40 x Jumpers macho-macho
Esquematico Eletrônico
Observações:
- Todos os periféricos interligados com o arduino são alimentados com 5 V (com exceção dos push-buttons)
- Se achar necessário, utilize protoboard (matriz de contato) para facilitar as ligações, principalmente dos push buttons e da alimentação de 5 V dos periféricos
- Os terminais SLA e SLC do TEA5767 e o display OLED são interligados juntos nos terminais A4 e A5 do Arduino. Ou seja, são ligados juntos na mesma entrada do Arduino
- A utilização de barra-pinos é opcional. As únicas conexões que recomendamos que seja com solda é dos alto falantes a conexão do amplificador PAM8403 com o módulo TEA5767, conforme a imagem abaixo:
O restante das conexões fica a critério do usuário. Mas por se tratar de uma aplicação com rádio/som, o ideal é ter o máximo de conexões com solda, para evitar ruído e mau contato.
Programação do projeto com o módulo TEA5767
Para a programação, iremos utilizar a IDE do Arduino.
Devemos adicionar ao projeto algumas bibliotecas, conforme o passo a passo abaixo:
Biblioteca TEA5767
A biblioteca do módulo TEA5767 precisa ser instalada manualmente, baixando o arquivo do link abaixo:
https://drive.google.com/file/d/18cjVMP05dJUoFtjV30zIBretqc0y6DYs/view?usp=share_link
Para adicionar a biblioteca ao Arduino, vá em: Rascunho > Incluir Biblioteca e depois clique em “Adicionar Biblioteca .ZIP”. E escolha o arquivo baixado.
Bibliotecas Adafruit do display OLED 128×32 + GFX
Já as bibliotecas Adafruit podem ser instaladas através da própria Arduino IDE. Para isso, vá em: Ferramentas > Gerenciador de Bibliotecas e busque por “Adafruit SSD1306“ e “Adafruit GFX Library”:
Código
Importante: No código, você deve modificar 10 linhas, que seriam os 5 nomes das rádios + 5 frequências. Essas rádios serão selecionadas pelos 5 push-buttons.
Sugerimos não utilizar um nome maior que 10 caracteres, para a visualização ficar correta no display.
// Módulo TEA5767 com Arduino, amplificador e alto falante // Autor: Makerhero // OBS: Recomendamos que o nome da rádio não tenha mais que 10 caractéres. // Caso tenha mais que 10 caracteres, o display irá imprimir na próxima linha. const char *nome_radio1 = “Digite aqui o nome da radio 1”; float freq_radio1 = 100.1; // Digite aqui a frequência da rádio, exemplos: 100.9 82.7 107.3 etc… const char *nome_radio2 = “Digite aqui o nome da radio 2”; float freq_radio2 = 100.2; // Digite aqui a frequência da rádio, exemplos: 100.9 82.7 107.3 etc… const char *nome_radio3 = “Digite aqui o nome da radio 3”; float freq_radio3 = 100.3; // Digite aqui a frequência da rádio, exemplos: 100.9 82.7 107.3 etc… const char *nome_radio4 = “Digite aqui o nome da radio 4”; float freq_radio4 = 100.4; // Digite aqui a frequência da rádio, exemplos: 100.9 82.7 107.3 etc… const char *nome_radio5 = “Digite aqui o nome da radio 5”; float freq_radio5 = 100.5; // Digite aqui a frequência da rádio, exemplos: 100.9 82.7 107.3 etc… float frequencia; String nome; #include <TEA5767.h> // Biblioteca do módulo TEA5767 #include <SPI.h> // Biblioteca padrão SPI #include <Wire.h> // Biblioteca padrão I2C #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> TEA5767 radio = TEA5767(); // Inicialização do módulo TEA5767 #define LARGURA_OLED 128 #define ALTURA_OLED 32 #define RESET_OLED 4 Adafruit_SSD1306 display(LARGURA_OLED, ALTURA_OLED, &Wire, RESET_OLED); // Definição do display OLED que será utilizado void setup() { Serial.begin(9600); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Endereço 0x3C para o display OLED Serial.println(F(“Falha no SSD1306”)); // Serial irá imprimir um erro caso não consiga comunicar com o display for (;;); } pinMode(2, INPUT_PULLUP); // Definição do botão da primeira rádio pinMode(4, INPUT_PULLUP); // Definição do botão da segunda rádio pinMode(7, INPUT_PULLUP); // Definição do botão da terceira rádio pinMode(8, INPUT_PULLUP); // Definição do botão da quarta rádio pinMode(12, INPUT_PULLUP); // Definição do botão da quinta rádio // Ao inicializar o sistema, a primeira rádio irá tocar nome = (String) nome_radio1; frequencia = freq_radio1; display.clearDisplay(); // Limpeza do display display.setTextSize(2); // Para uma melhor visualização, será usado tamanho de fonte 2 para o display display.setTextColor(SSD1306_WHITE); // Será mostrado as letras em cor branca display.setCursor(0, 0); // Definição da posição inicial da escrita do nome da rádio display.println(nome); // Escrita do nome da rádio // A rotina abaixo simplesmente imprime a frequência da rádio no final da segunda linha, dependendo do tamanho dela if (frequencia >= 100.0) { display.setCursor(68, 18); } else { display.setCursor(80, 18); } display.println(frequencia, 1); // Escrita da frequência da rádio display.display(); // Mostra no display as informações radio.setFrequency(frequencia); // O módulo irá tocar a rádio selecionada delay(100); } void loop() { // Abaixo tem-se 5 if que irão detectar o aberto dos botões com as rádios pré definidas pelo usuário // A função “troca_radio()” faz a troca da rádio caso algum botão seja pressionado. if (digitalRead(2) == 0) // Botão 1 { nome = (String) nome_radio1; frequencia = freq_radio1; delay(100); troca_radio(); } if (digitalRead(4) == 0) // Botão 2 { nome = (String) nome_radio2; frequencia = freq_radio2; delay(100); troca_radio(); } if (digitalRead(7) == 0) // Botão 3 { nome = (String) nome_radio3; frequencia = freq_radio3; delay(100); troca_radio(); } if (digitalRead(8) == 0) // Botão 4 { nome = (String) nome_radio4; frequencia = freq_radio4; delay(100); troca_radio(); } if (digitalRead(12) == 0) // Botão 5 { nome = (String) nome_radio5; frequencia = freq_radio5; delay(100); troca_radio(); } delay(100); } void troca_radio() { display.clearDisplay(); // Limpeza do display display.setTextSize(2); // Para uma melhor visualização, será usado tamanho de fonte 2 para o display display.setTextColor(SSD1306_WHITE); // Será mostrado as letras em cor branca display.setCursor(0, 0); // Definição da posição inicial da escrita do nome da rádio display.println(nome); // Escrita do nome da rádio // A rotina abaixo simplesmente imprime no display a frequência da rádio no final da segunda linha, dependendo do tamanho if (frequencia >= 100.0) { display.setCursor(68, 18); } else { display.setCursor(80, 18); } display.println(frequencia, 1); // Escrita da frequência da rádio display.display(); // Mostra no display as informações radio.setFrequency(frequencia); // O módulo irá tocar a rádio selecionada delay(100); }
Funcionamento
O funcionamento desse sistema é semelhante a um rádio automotivo: o usuário pressiona o botão correspondente a rádio que deseja ouvir, ajusta o volume e visualiza nome + frequência da rádio pelo display.
Importante: Não esqueça de conectar a antena ao módulo TEA5767.
E aí, gostou desse projeto? Deixe um comentário abaixo contando o que achou. E não esqueça de nos seguir no Instagram para ficar por dentro dos próximos projetos do blog.