FM-приемник с RDS и цифровой настройкой

processort
Автор темы
Аватара
processort
Автор темы
Сообщения: 4
Зарегистрирован: 23 декабря 2018
С нами: 5 лет 3 месяца

#1 processort » 11 января 2022, 16:22

Использованные компоненты:
1. Arduino Nano.
2. Модуль FM-приемника SI4703.
3. Модуль УНЧ (на базе TDA7297).
4. Динамики - 2 шт.
5. Модуль экрана 1602 с управлением по шине I2C.
6. Набор кнопок (4 шт. ) с декоративными колпачками для управления.
7. Трансформатор питания (на 12 В по вторичной обмотке) и стабилизатор питания 7809.

Принципиальная схема устройства приведена на рисунке.
FM-receiver_scheme.GIF


Использованные библиотеки:
- Wire.h
- LiquidCrystal_I2C.h
- SparkFunSi4703.h
- EEPROM.h

Листинг программы управления Arduino:

Код: Выделить всё

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SparkFunSi4703.h> // sparkfunsi4703arduinolibrarymaster.zip
#include <EEPROM.h>
// http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
  Si4703_Breakout radio(2, A4, A5, 3);// RST,SDIO,SCLK,SEN - подключение
int vol=1;
int channel[18]{875,919,928,964,977,992,1000,1008,1012,1023,1025,1029,1034,1037,1048,1054,1062,1066};
char rdsBuffer[20];
int w,c,i;
 
void setup(){
  lcd.init();lcd.backlight();// Включаем подсветку дисплея
  pinMode(12,INPUT);// Channel -
  pinMode(11,INPUT);// Channel +
  pinMode(10,INPUT);// Volume +
  pinMode(9,INPUT); // Volume -

  c = EEPROM.read(0);
  //vol = EEPROM.read(1);
  vol = 10;
  radio.powerOn();
  radio.setVolume(10);
  c = 8;
  radio.setChannel(channel[c]);
}
 
void loop(){
    radio.readRDS(rdsBuffer);
    if(digitalRead(11)==HIGH) {w=1; delay(200);}
    if(digitalRead(12)==HIGH) {w=2; delay(200);}
    if(digitalRead(10)==HIGH) {w=3; delay(200);}
    if(digitalRead(9)==HIGH) {w=4; delay(200);}
    if(w==1)
      {c++;
      if(c>17) {c=0;}
      radio.setChannel(channel[c]); pausea() ;radio.setChannel(channel[c]);
      EEPROM.update(0,c);
      }
    if(w==2)
      {c--;
      if(c<0) {c=17;}
      radio.setChannel(channel[c]); pausea() ;radio.setChannel(channel[c]);
      EEPROM.update(0,c);
      }
    if(w==3)
      {vol++;
      if(vol>15) {vol=15;}
      radio.setVolume(vol); pauseb() ;EEPROM.update(1,vol);}
    if(w==4)
      {vol--;
      if(vol<0) {vol=0;}
      radio.setVolume(vol); pauseb() ;EEPROM.update(1,vol);}
 
    lcd.setCursor(0, 0);
    lcd.print((float)channel[c]/10,1); lcd.print(" MHz "); lcd.print("VOL "); lcd.print(vol); lcd.print(" ");
    lcd.setCursor(0, 1);
    lcd.print("C"); lcd.print(c+1); lcd.print(" ");
    lcd.setCursor(6, 1);
    lcd.print(rdsBuffer);
}
 
void pausea()
{ delay(100); w=0; lcd.clear();
  for(i=0; i<20; i++) {rdsBuffer[i]=NULL;}
}

void pauseb()
{ delay(100) ; w=0;}


Общие замечания:
1. Изначально проект собирался на модуле RDA5807. Однако позднее было принято решение по переходу на модуль на базе SI4703.
2. Блок питания преднамеренно выполнен по трансформаторной схеме, чтобы не было наводок на модуль приемника.
3. Все модули, динамики и блок питания размещены в едином корпусе, выполненном из кусков органического стекла и ламината.
4. Управление кнопочное:
- левые (зеленые) кнопки – выбор заранее введенных частот радиостанций;
- правые (красные) кнопки – увеличение / уменьшение громкости.
5. Отдельно имеется управление яркостью LCD-экрана.

Ниже приведены фотографии приемника.
FM-receiver-_01.jpg


FM-receiver-_02.jpg


FM-receiver-_03.jpg


Корпус частично выполнен из кусков ламината и матового белого оргстекла.
Внутренний достаточно большой объем корпуса способствует хорошему звучанию устройства в целом.
Посередине лицевой панели установлена пластиковая панель, напечатанная на 3D-принтере, на которую установлены изнутри LCD-экран, ардуино нано и модуль приемника. Материал панели - PLA.
Ниже панели находится плата управления при помощи кнопок.
Блок питания (трансформатор и стабилизатор), УНЧ закреплены на дне корпуса.

Проект потребовал достаточно много усилий именно по механической части. Но оно того стоило. Звучание приятное. Басов правда немного не хватает. Но это и невозможно достичь для выбранных компонентов.


Arduino
Сержант
Сержант
Аватара
Arduino
Сержант
Сержант
Сообщения: 64
Зарегистрирован: 19 апреля 2017
С нами: 6 лет 11 месяцев

#2 Arduino » 14 января 2022, 18:10

Да, видно что старался человек. В былые времена тоже сами акустику из фанеры делали.

samand587 F
Аватара
samand587 F
Сообщения: 3
Зарегистрирован: 23 февраля 2023
С нами: 1 год 1 месяц

#3 samand587 » 23 февраля 2023, 19:11

Автору :smile: Скажите, пожалуйста, как у Вас подключена антенна- телескоп к модулю Si4703?

З.Ы. Вижу как подключена. Но у меня в другом проекте при таком подключении прием отвратительный.  :stena:

samand587 F
Аватара
samand587 F
Сообщения: 3
Зарегистрирован: 23 февраля 2023
С нами: 1 год 1 месяц

#4 samand587 » 23 февраля 2023, 19:30

Решено!

processort
Автор темы
Аватара
processort
Автор темы
Сообщения: 4
Зарегистрирован: 23 декабря 2018
С нами: 5 лет 3 месяца

#5 processort » 1 марта 2023, 11:06

samand587 писал(а):Решено!

И какое это решение ?

samand587 F
Аватара
samand587 F
Сообщения: 3
Зарегистрирован: 23 февраля 2023
С нами: 1 год 1 месяц

#6 samand587 » 2 марта 2023, 17:50

processort писал(а):И какое это решение ?

У меня при компиляции выдавалась ошибка, решил путем замены библиотеки.

З.Ы. Вы не поделились мнением о работе приемника при таом подключении антенны! :smile:

processort
Автор темы
Аватара
processort
Автор темы
Сообщения: 4
Зарегистрирован: 23 декабря 2018
С нами: 5 лет 3 месяца

#7 processort » 23 марта 2023, 8:27

Приемник находится за городом в садовом товариществе.
Приём хороший и зависит от положения антенны в пространстве (горизонтально или наклоненно) либо от положения самого приемника.


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 2 гостя