1. Arduino Nano.
2. Модуль FM-приемника SI4703.
3. Модуль УНЧ (на базе TDA7297).
4. Динамики - 2 шт.
5. Модуль экрана 1602 с управлением по шине I2C.
6. Набор кнопок (4 шт. ) с декоративными колпачками для управления.
7. Трансформатор питания (на 12 В по вторичной обмотке) и стабилизатор питания 7809.
Принципиальная схема устройства приведена на рисунке.
Использованные библиотеки:
- 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-экрана.
Ниже приведены фотографии приемника.
Корпус частично выполнен из кусков ламината и матового белого оргстекла.
Внутренний достаточно большой объем корпуса способствует хорошему звучанию устройства в целом.
Посередине лицевой панели установлена пластиковая панель, напечатанная на 3D-принтере, на которую установлены изнутри LCD-экран, ардуино нано и модуль приемника. Материал панели - PLA.
Ниже панели находится плата управления при помощи кнопок.
Блок питания (трансформатор и стабилизатор), УНЧ закреплены на дне корпуса.
Проект потребовал достаточно много усилий именно по механической части. Но оно того стоило. Звучание приятное. Басов правда немного не хватает. Но это и невозможно достичь для выбранных компонентов.