FM-радиоприёмник на Arduino с модулем RDA5807M: подключение и управление
RDA5807M на Arduino — компактный FM-приёмник с отличным качеством звука. Модуль работает по I2C, поддерживает стерео, RDS, цифровую громкость. Диапазон 50–115 МГц, питание 2.7–3.3В. Управление кнопками: переключение станций, громкость. Вывод на дисплей Nokia 5110: название станции, частота, уровень громкости. Проект для портативного радио, будильника или интеграции в умный дом. Низкое потребление, простая сборка на макетной плате.
Возможности RDA5807M
Стерео выход, RDS (название станции), цифровая громкость 0–15, поиск станций, сохранение пресетов. Антенна — провод наушников. Поддержка наушников или динамика. Низкое потребление для батарейного питания. Интеграция с дисплеем для отображения информации.
Компоненты
- Arduino Uno/Nano
- RDA5807M модуль
- Дисплей Nokia 5110
- 4 кнопки
- Резисторы 10 кОм (pull-up)
- Наушники или динамик
Подключение
- VCC → 3.3V Arduino
- GND → GND
- SDA → A4
- SCL → A5
- L/R → GND (моно) или динамик
- Антенна — провод наушников
- Кнопки → D2–D5 с pull-up
- Nokia 5110: стандартное подключение (CE, DC, DIN, CLK, VCC, BL, RST, GND)
Библиотеки
Radio (для RDA5807), PCD8544 (Nokia 5110), русификатор шрифта.
Скетч Arduino
#include <radio.h>
#include <RDA5807M.h>
#include <PCD8544.h>
RDA5807M radio;
PCD8544 lcd;
const int btnVolUp = 2;
const int btnVolDown = 3;
const int btnNext = 4;
const int btnPrev = 5;
float stations[] = {87.5, 88.0, 90.5 /* ... */};
char* names[] = {"Станция1", "Радио2" /* ... */};
int current = 0;
int volume = 8;
void setup() {
radio.init();
radio.setBand(RADIO_BAND_FM);
radio.setVolume(volume);
radio.setMono(false);
radio.seekUp();
lcd.begin(84, 48);
updateDisplay();
}
void loop() {
if (digitalRead(btnNext) == LOW) { current++; if (current > 11) current = 0; radio.setFrequency(stations[current]); updateDisplay(); delay(300); }
if (digitalRead(btnPrev) == LOW) { current--; if (current < 0) current = 11; radio.setFrequency(stations[current]); updateDisplay(); delay(300); }
if (digitalRead(btnVolUp) == LOW) { volume++; if (volume > 15) volume = 15; radio.setVolume(volume); updateDisplay(); delay(200); }
if (digitalRead(btnVolDown) == LOW) { volume--; if (volume < 0) volume = 0; radio.setVolume(volume); updateDisplay(); delay(200); }
}
void updateDisplay() {
lcd.clear();
lcd.print(names[current]);
lcd.print("\nFreq: "); lcd.print(stations[current]);
lcd.print("\nVol: "); lcd.print(volume);
}
Кнопки btnNext/btnPrev переключают станции по массиву stations.
Кнопки btnVolUp/btnVolDown регулируют громкость (0–15).
После каждого действия обновляется дисплей с именем станции, частотой и уровнем громкости.
Задержки delay(200–300) предотвращают дребезг кнопок.
Настройка и работа
Запишите 12 станций в массив. Кнопки переключают пресеты и громкость. Дисплей показывает название, частоту, уровень. Антенна — провод наушников для лучшего приёма. RDS для названий станций (если поддерживается).
Расширение
Добавьте поиск станций, сохранение в EEPROM, RDS-вывод, меню. Интеграция с часами или будильником.
Заключение
RDA5807M — отличный модуль для FM-радио на Arduino. Качественный звук, простое управление, дисплей. Готово к портативному радио или интеграции в проекты.
FAQ — RDA5807M на Arduino
Почему нет звука?
Проверьте наушники/динамик, антенну (провод), громкость (volume 1–15), питание 3.3В.
RDS не работает?
Не все станции передают RDS. Используйте radio.getRDS() для чтения.
Поиск станций?
radio.seekUp()/seekDown() — автоматический поиск с остановкой на сигнале.
Сколько станций сохранить?
До 20–30 в массиве. Для большего — EEPROM или SD-карта.
Моно/стерео?
radio.setMono(true/false) — принудительно моно для слабого сигнала.
Дисплей Nokia 5110 русский шрифт?
Добавьте русификатор (массив символов) в библиотеку PCD8544.
Питание от 5В?
Модуль 3.3В — используйте регулятор или 3.3V пин Arduino.