Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Rádio FM Retro Look DIY com Módulo TEA5767

Componentes e suprimentos

Arduino Nano R3
× 1
Módulo de rádio FM TEA5767
× 1
Medidores analógicos de rádio antigo
× 2
Adafruit LCD padrão - 16x2 branco em azul
× 1
potenciômetro estéreo log de 10k
× 1
Módulo amplificador de áudio classe D 2x3W
× 1
Alto-falante:3W, 4 ohms
× 2
Alto-falante:0,25 W, 8 ohms
× 2
Codificador rotativo com botão de pressão
× 1
SparkFun Botão de pressão 12 mm
× 4
1 capacitor microF
× 2
LED (genérico)
× 3

Aplicativos e serviços online

Arduino IDE

Sobre este projeto




A base para este projeto é o código de Rodolfo Broco Manin (RodLophus no GitHub) que contém uma bela escala analógica em LCD 16x2. Modifiquei seu código adicionando dois medidores analógicos para ler a força e a frequência do sinal, LED "estéreo" e LED "busca automática / manual". Além disso, como um detalhe retrô, adicionei quatro chaves de memória cujas frequências são predefinidas no código, para que o rádio tenha uma aparência completamente antiga. As saídas de áudio do TEA5767, através de um potenciômetro estéreo, são conectadas ao módulo amplificador de potência classe D com potência de 2x3w, o que é suficiente para este propósito. Ao amplificador estão conectados dois alto-falantes de 2 vias com potência adequada. O alto-falante de tom alto é separado do alto-falante de médio-baixo com capacitor de 1mf. Os medidores analógicos são de um rádio antigo com defeito, mas você pode usar qualquer medidor, e um desvio total da agulha será ajustado com potenciômetros trimmer. O dispositivo é alimentado por duas baterias de lítio em série através de um estabilizador 7805, portanto, temos uma fonte de 5V estabilizada.



Você pode encontrar a biblioteca TEA5767 Arduino aqui. O diagrama e o código do circuito são fornecidos a seguir.

Deixe-me mencionar que a agulha do frequencímetro é atualizada sequencialmente a cada 1Mhz, o que eu acho que é uma consequência da biblioteca, mas se alguém encontrar uma solução para o movimento suave da agulha, eu aceitaria de bom grado. A recepção é excelente, especialmente para estações FM locais fortes, enquanto nas estações mais fracas é necessário um interruptor estéreo / mono devido às interrupções frequentes de estéreo para mono e vice-versa. Na próxima atualização de código, pretendo inserir os interruptores "stereo / mono" e "mute".

Todo o conjunto está embutido na caixa apropriada na qual está montada uma antena telescópica, portanto, temos um receptor FM estéreo completo com um belo visual retro.

Código

  • código
código Arduino
 / * Sintonizador de rádio simples usando Arduino Leonardo e o módulo Philips TEA5767 (versão Arduino Uno) Notas:------ A tensão de alimentação máxima TEA5767 é 5V. Certifique-se de que seu Arduino não esteja fornecendo mais de 5V- O TEA5767 não atualiza o indicador de nível de sinal na leitura. O nível do sinal só será atualizado na mudança de estação- Se você obtiver algumas falhas no codificador ou no botão de pressão, use uma rede snubber, como esta:Arduino pin> ---- + ---- / \ / \ / \ / ---------> Codificador ou pino do interruptor | Resistor de 100 ohms ----- ----- 47nF cap | --- Conexões GND:------------ Codificador (com interruptor de eixo "empurrável"):Botão de pressão ---> Arduino pino 2 Pino do codificador "A" ---> Arduino pino 3 Pino do codificador "B "---> Arduino pin 4- LCD:D7 ---> Arduino pin 8D6 ---> Arduino pin 9D5 ---> Arduino pin 10D4 ---> Arduino pin 11RS ---> Arduino pin 13RW ---> GNDE ----> Arduino pin 12VO ---> 2k2 resistor para GND (contraste) - Módulo TEA5756:Vista superior:+ - 10--9--8--7--6- + | + ------ + ++ || | TEA | || || | 5767 | || || + ------ + ++ | + - 1--2--3--4--5- + 1 ----> Arduino SDA2 ----> Arduino SCL3 ----> GND5 ----> + 5V6 ----> GND7 ----> Saída de áudio (canal direito) 8 ----> Saída de áudio (canal esquerdo) 10 ---> AntenaObrigado por seu interesse.Divirta-se! [email protected]*/#include  #include  // Obtenha a biblioteca TEA5767 em https://github.com/andykarpov/TEA5767#include  // Codificador pins # define ENCODER_SW 2 # define ENCODER_A 3 # define ENCODER_B 4 # define button_freq1 A0 # define button_freq2 A1 # define button_freq3 A2 # define button_freq4 A3 // Caracteres personalizados # define SCALE_CLEAR 5 // Escala de discagem de rádio # define STEREO_CHAR_S 6 // Estilizado " S "#define STEREO_CHAR_T 7 // Estilizado" T "// Sinalizadores de status global # define ST_AUTO 0 // Modo automático (alternado pelo botão de pressão) #define ST_STEREO 1 // Módulo de rádio detectou um piloto estéreo # define ST_GO_UP 2 // Codificador girando no sentido horário # define ST_GO_DOWN 3 // Codificador girando no sentido anti-horário # define ST_SEARCH 4 // Módulo de rádio está realizando uma busca automática int LED =0; int analogsignal =0; int analogscale =0; int estereolizado =0; TEA5767 Rádio; frequência de flutuação =88; status de byte =0; LiquidCrystal lcd (13, 12, 11, 10, 9, 8); / ******************** ************************ \ * updateScale () * * Move a "agulha" sobre a escala de rádio * \ ********* *********************************** / void updateScale () {int lcdBase =(frequência - 88) * 4; // Índice de pixels da coluna LCD (0 <=lcdBase <=(16 * 5)) if (lcdBase> 79) lcdBase =79; int lcdMajor =lcdBase / 5; // Índice de caracteres do LCD (0 <=lcdMajor <=15) int lcdMinor =lcdBase% 5; // Índice da coluna de pixel do LCD dentro do caractere (0 <=lcdMinor <=4) if (lcdMajor> 0) {// O ponteiro do dial do rádio não está na posição mais à esquerda:// limpe o caractere à esquerda (para apagar o anterior posição intermediária) lcd.setCursor (lcdMajor - 1, 0); lcd.write (SCALE_CLEAR); } else lcd.setCursor (lcdMajor, 0); lcd.write (lcdMinor); if (lcdMajor <15) // Não na posição mais à direita:limpar o caractere à direita lcd.write (SCALE_CLEAR);} / *********************** ******** \ * isrEncoder () * * Capturar interrupções do codificador * \ *************************** ** / void isrEncoder () {atraso (50); // Debouncing (para codificadores ruins) if (digitalRead (ENCODER_B) ==HIGH) {bitWrite (status, ST_GO_UP, 1); } else bitWrite (status, ST_GO_DOWN, 1);} / ***************************** \ * isrSwitch () * * Catch interrupções de interruptores * \ ***************************** / void isrSwitch () {delay (50); // Debouncing if (bitRead (status, ST_AUTO)) bitWrite (status, ST_AUTO, 0); else bitWrite (status, ST_AUTO, 1);} / ******************* \ * Arduino Setup () * \ *********** ******** / configuração void () {Serial.end (); pinMode (button_freq1, INPUT); digitalWrite (button_freq1, LOW); pinMode (button_freq2, INPUT); digitalWrite (button_freq2, LOW); pinMode (button_freq3, INPUT); digitalWrite (button_freq3, LOW); pinMode (button_freq4, INPUT); digitalWrite (button_freq4, LOW); pinMode (LED, SAÍDA); pinMode (6, SAÍDA); pinMode (7, SAÍDA); pinMode (5, SAÍDA); int i; byte agulhaChar [8]; // Byte "S" estilizado stereoChar1 [8] ={0b01111, 0b11000, 0b11011, 0b11101, 0b11110, 0b11000, 0b01111, 0b00000}; lcd.createChar (STEREO_CHAR_S, stereoChar1); // Byte "T" estilizado stereoChar2 [8] ={0b11110, 0b00011, 0b10111, 0b10111, 0b10111, 0b10111, 0b11110, 0b00000}; lcd.createChar (STEREO_CHAR_T, stereoChar2); // Dial scale background byte scaleChar [8] ={0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00100, 0b10101, 0b10101}; lcd.createChar (SCALE_CLEAR, scaleChar); // Cria um caractere personalizado para representar todas as (5) posições possíveis da agulha para (int j =0; j <5; j ++) {for (i =0; i <8; i ++) needleChar [i] =scaleChar [i ] | (0b10000>> j); lcd.createChar (j, needleChar); } lcd.begin (16, 2); lcd.clear (); // Desenhe o fundo da escala do dial para (i =0; i <16; i ++) lcd.write (SCALE_CLEAR); pinMode (ENCODER_SW, INPUT); digitalWrite (ENCODER_SW, HIGH); pinMode (ENCODER_A, INPUT); digitalWrite (ENCODER_A, HIGH); pinMode (ENCODER_B, INPUT); digitalWrite (ENCODER_B, HIGH); attachInterrupt (0, isrSwitch, RISING); attachInterrupt (1, isrEncoder, RISING); // Inicializa o módulo de rádio Wire.begin (); Radio.init (); Radio.set_frequency (frequência);} / ****************** \ * Arduino Loop () * \ *************** *** / void loop () {unsigned char buf [5]; int stereo; int signalLevel; int searchDirection; int i; i =0; // Atualiza o indicador Auto / Manual lcd.setCursor (12, 1); lcd.write (bitRead (status, ST_AUTO)? 'A':'M'); if bitRead (status, ST_AUTO) // LED Auto / manual {digitalWrite (LED, LOW); } else {digitalWrite (LED, HIGH); } if (Radio.read_status (buf) ==1) {// Obter frequência de dados de rádio =floor (Radio.frequency_available (buf) / 100000 + .5) / 10; estéreo =Radio.stereo (buf); // 0 <=Radio.signal_level <=15 signalLevel =(Radio.signal_level (buf) * 100) / 15; analogsignal =map (signalLevel, 0,100,0,255); escala analógica =mapa (frequência, 88,114,0,255); estereolizado =mapa (estéreo, 0,7,1,0,255); analogWrite (5, sinal analógico); // Medidor de sinal analogWrite (6, analogscale); // medidor de frequência analogWrite (7, estereolizado); // LED estéreo // Atualiza o dial do rádio updateScale (); // Indicador de nível de sinal lcd.setCursor (0, 1); lcd.write (183); // Caractere japonês que se parece com uma antena :) if (signalLevel <100) lcd.write (''); lcd.print (signalLevel); lcd.write ('%'); // Indicador de frequência lcd.setCursor (6, 1); if (frequência <100) lcd.write (''); lcd.print (frequência, 1); // Indicador mono / estéreo lcd.setCursor (14, 1); if (estéreo) {lcd.write (STEREO_CHAR_S); lcd.write (STEREO_CHAR_T); } else lcd.print (""); } if (bitRead (status, ST_SEARCH)) {// O rádio está realizando uma pesquisa automática? if (Radio.process_search (buf, searchDirection) ==1) {bitWrite (status, ST_SEARCH, 0); }} if (digitalRead (button_freq2) ==HIGH) {// botões de "memória" if (frequência> 94,8) {frequência =94,8; Radio.set_frequency (frequência); bitWrite (status, ST_GO_DOWN, 0); } mais {frequência =94,8; Radio.set_frequency (frequência); bitWrite (status, ST_GO_UP, 0); } precrtajScale (); } if (digitalRead (button_freq1) ==HIGH) {if (frequência> 92) {frequência =92; Radio.set_frequency (frequência); bitWrite (status, ST_GO_DOWN, 0); } mais {frequência =92; Radio.set_frequency (frequência); bitWrite (status, ST_GO_UP, 0); } precrtajScale ();} if (digitalRead (button_freq3) ==HIGH) {if (frequência> 97) {frequência =97; Radio.set_frequency (frequência); bitWrite (status, ST_GO_DOWN, 0); } mais {frequência =97; Radio.set_frequency (frequência); bitWrite (status, ST_GO_UP, 0); } precrtajScale (); } if (digitalRead (button_freq4) ==HIGH) {if (frequência> 101,2) {frequência =101,2; Radio.set_frequency (frequência); bitWrite (status, ST_GO_DOWN, 0); } senão {frequência =101,2; Radio.set_frequency (frequência); bitWrite (status, ST_GO_UP, 0); } precrtajScale ();} // Codificador girando no sentido horário (+) if (bitRead (status, ST_GO_UP)) {if (bitRead (status, ST_AUTO) &&! bitRead (status, ST_SEARCH)) {// Modo de pesquisa automática (apenas processado se o rádio não estiver realizando uma pesquisa) bitWrite (status, ST_SEARCH, 1); searchDirection =TEA5767_SEARCH_DIR_UP; Radio.search_up (buf); atraso (50); } else {// Modo de sintonia manual if (freqüência <108) {freqüência + =0,1; Radio.set_frequency (frequência); }} bitWrite (status, ST_GO_UP, 0); } // Codificador girando no sentido anti-horário (-) if (bitRead (status, ST_GO_DOWN)) {if (bitRead (status, ST_AUTO) &&! BitRead (status, ST_SEARCH)) {// Modo de pesquisa automática (apenas processado se o rádio estiver não está realizando uma pesquisa no momento) bitWrite (status, ST_SEARCH, 1); searchDirection =TEA5767_SEARCH_DIR_DOWN; Radio.search_down (buf); atraso (50); } else {// Modo de sintonia manual if (freqüência> 88) {freqüência - =0,1; Radio.set_frequency (frequência); }} bitWrite (status, ST_GO_DOWN, 0); }} void precrtajScale () {int i; lcd.clear (); para (i =0; i <16; i ++) lcd.write (SCALE_CLEAR);} 

Esquemas


Processo de manufatura

  1. Projetando com Bluetooth Mesh:Chip ou módulo?
  2. Faça você mesmo virtual NEST termostato com Node-RED
  3. API do sensor ambiental com um RPi
  4. Fácil detector de choro de bebê faça você mesmo com Raspberry Pi
  5. DIY mais simples relógio IV9 Numitron com Arduino
  6. Módulo de importação em Python com exemplos
  7. Capturando as gotas de água com Arduino
  8. Faça você mesmo skate de realidade virtual
  9. Rádio FM com cabine de banho baseada em Arduino
  10. Como fazer a interface do Arduino Mega com o Módulo GPS NEO-6M