АУДИО Простой FM-радиоприёмник на модуле RDA5807m и Arduino Nanо

Простой FM-радиоприёмник на модуле RDA5807m и Arduino Nanо
Простой FM-приёмник на Ардуино Нано


Давным давно, будучи школьником, собрал под чутким руководством бати свой первый приёмник - детекторный гетеродин. Как сейчас помню свой восторг, когда из наушника послышалось шипение, а после подстройки большого воздушного конденсатора, - звуки радиостанции. Минули годы, десятилетия, а магия радио осталась на всю жизнь...

Предлагаю вниманию новичков в радио-деле (мастеров такими поделками не удивить) реализацию FM-радиоприёмника, собранном на Arduino Nano и замечательном крохотном модуле RDA5807m, в котором уместились приёмная высокочастотная часть приёмника (всемирной полосы частот 50 -115 MHz), rds-декодер и предварительный усилитель низкой частоты. Кроме того, модуль имеет интерфейс управления I2C.

Для отображения информации о частоте, названии радиостанций, текстовых RDS-оповещений радиостанций, качества приёма, уровня громкости и т.п., я решил использовать недорогой и популярный у самодельщиков OLED-дисплей SSD1306.
(Важное примечание: рекомендую использовать OLED-дисплей 0,96" 128x64)

От кнопочного управления решил отказаться полностью, заменив его на один энкодер GSMIN AK291.

Для усиления звука в приёмнике использован модуль УНЧ PAM8403, который выводит звук на два компактных 1/4 вт. динамика.

Автономное питание приёмника (на принципиальной схеме не прорисовано) было построено на зарядном модуле для li-ion аккумуляторов. В качестве элемента питания использовал плоский аккумулятор ёмкостью в 1000 мАч.

Приёмник с вышеперечисленной начинкой получился весьма компактных размеров - точно с пачку сигарет - 80x50x25.
Этот "малыш" многое умеет:
  1. Воспроизводит трансляцию станций мирового fm-диапазона.
  2. Всё управление осуществляется одним энкодером.
  3. Автоматически производит настройку на следующую/предыдущую станцию.
  4. Имеет ручную настройку частоты.
  5. Отображает на экране (128 x 64): качество приёма текущей радиостанции; название радиостанции (RDS); уровень установленной громкости; моно или стерео-трансляция; частоту радиостанции; динамику изменения громкости трансляции в изменяющихся по длине горизонтальных разнонаправленных от центра лучей (во, загнул! :) ); текстовые субтитры-сообщения от радиостанции (RDS); время в радио-студии (RDS, как правило, там выставлено бредовое время и за ним никто не следит).
  6. Перестраиваемый экран. Если RDS выключен в настройках приёмника или радиостанция не использует RDS, то экран перестраивается, шрифты увеличиваются, пустоты и пустые поля убираются, чтобы с максимальной наглядностью использовать маленький дисплей.
  7. Увеличение, уменьшение громкости.
  8. Отключение звука (Mute).
  9. Автоматическое отключение экрана и звука через установленный промежуток времени (1, 2, 3, 4, 5 часов).
  10. Принудительное включение/отключение RDS.
  11. Установка чувствительности (низкая, средняя, высокая) для поиска радиостанций.
  12. Сохранение текущей радиостанции в любимые. При следующем включении приёмник сразу же настроится на волну этой радиостанции.
  13. Включение/выключение стерео.
  14. Включение/выключение усиленных басов
  15. Включение/выключение динамической визуализации изменения громкости звуковой трансляции.
  16. Настройка яркости экрана (слабая, средняя, максимальная).
  17. Сохранение всех настроек в энергонезависимую память для восстановления состояния приёмника при следующем включении.
Принципиальная схема приёмника
schemas.jpg

Фотография готового приёмника

fm-radio.jpg screens.jpg

Скетч

В скетче используется ряд библиотек, которые легко устанавливаются через Arduino IDE.
Единственная библиотека требует установки более ранней её версии из-за несовместимости версий. Это библиотека Radio от Matthias Hertel. Следует устанавливать версию 2.0.0.

Актуальная версия: 1.2.

02.01.2025. Исправлена ошибка с регулировкой громкости.

Скачать схему и скетч можно отсюда: https://cloud.mail.ru/public/WKus/P119rnscM
Необходимые библиотеки: https://cloud.mail.ru/public/9Fuo/V8qkTeGpM
 

Вложения

Изменено:

Комментарии

Antokol

✩✩✩✩✩✩✩
20 Июн 2025
5
1
Уважаемый Олег, здравствуйте! Скетч и библиотеки из ссылок. Библиотека "радио" v2.0. При компиляции выдается ошибка, отчет прилагаю. Рад любым идеям. Спасибо!
 

Вложения

Antokol

✩✩✩✩✩✩✩
20 Июн 2025
5
1
@Олег Поляков, Большое спасибо, что так быстро ответили! Пробовал IDE Arduino 1.8.15 и 2.3.6. Во втором случае выдает ошибку "
D:\RDA5807m + Popov\POPradio\pov-radio\pov-radio.ino:285:3: error: 'controlTick' was not declared in this scope
controlTick();
^~~~~~~~~~~
exit status 1

Compilation error: 'load_param' was not declared in this scope"
 

Antokol

✩✩✩✩✩✩✩
20 Июн 2025
5
1
Благодарю Вас за терпение!
Переустановил два варианта IDE: 1.8.15 и 2.3.6, установил драйвера из форума.
Удалил в путях пробелы и знаки.
При компиляции скетча в обеих программах выдается одна и та же ошибка (прилагаю в прикрепленных файлах).
Спасибо. Эдуард.
 

Вложения

wadim_ast

✩✩✩✩✩✩✩
1 Июл 2025
2
0
Добрый день, Олег. У меня при компиляции те же проблемы, что и у пользователя Antokol. Версии IDE 1.8.13 и 2.3.4. Помогите, пожалуйста! Спасибо!
 

Вложения

Олег Поляков

★★★★✩✩✩
18 Янв 2022
276
201
www.1812.ru

@wadim_ast, добрый день!
Посмотрите в Adruino IDE при открытии файла pov-radio.ino подгрузились ли в виде закладок другие файлы проекта: controls.ino, functions.ino.
Если нет, то добавьте их вручную.
Почему иногда не подгружаются эти файлы я ума не приложу. Глюки...
 

Antokol

✩✩✩✩✩✩✩
20 Июн 2025
5
1
Радио заработало, валкодер работает, перестраивает по диапазону. На экране все мельтишит, только в части первой строки отображается часть правильно .
Что делал: поскольку я до сих пор не использовал скетчи, состоящие из нескольких файлов, то меня не смутило отсутствие закладок с остальными файлами. В старой версии IDE загрузил остальные 2 файла - появились они в закладках, причем при последующих включениях обеих версий IDE при загрузке файла radio остальные два открывались автоматически. Скетч прошел компиляцию и прописался в Ардуинке. Завтра продолжу.
Олег, спасибо за помощь и терпение.
 
  • Лойс +1
Реакции: Олег Поляков

wadim_ast

✩✩✩✩✩✩✩
1 Июл 2025
2
0
@Олег Поляков,
Ура!!! Все загрузилось и работает!!! Все показывает!!! Есть вопрос по чувствительности. Я раньше делал несколько приемников на ТЕА5767. Сейчас их сравниваю и чувствительность приемника на RDA5807m получается существенно ниже, хотя по-моему должно быть наоборот. Подскажите, пожалуйста, как должно быть. Еще раз огромное спасибо за интересный приемник и за оказанную помощь!!!
 

Олег Поляков

★★★★✩✩✩
18 Янв 2022
276
201
www.1812.ru
@wadim_ast, очень рад, что разобрались, и у вас приёмник заработал.
Реальную чувствительность RDA можно оценить только в ручном режиме настройки частоты. Для этого долгим нажатием на кнопку энкодера перейдите в меню настроек приёмника, выберите пункт меню "Радиостанции" и там переключите в пункте "Настр." с "авт." на "руч.".
 

Antokol

✩✩✩✩✩✩✩
20 Июн 2025
5
1
samand587, как решили проблему с дисплеем? (В личку написать не удалось - не пропускает).

@wadim_ast, Вадим, какой дисплей используете?