АУДИО Простой 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
 

Вложения

Изменено:

Комментарии

bshtornado

✩✩✩✩✩✩✩
18 Ноя 2024
6
0
@Олег Поляков, похоже примеры из Radio не работают, в монитор порта шлется текст нечитабельной кодировки, на команды типа ? Help, . scan up не реагирует, заменил частоту любимой станции в скетче, но она осталась прежней
 
Изменено:

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
206
161
www.1812.ru
@bshtornado, в режиме поиска следующей/предыдущей станции пошагово изменяется частота приёма и анализируется уровень принимаемого сигнала. На дисплей выводится первой строкой текущая частота, второй - "Поиск радиостанции...". Если радио-модуль неисправен, то, возможно, скетч не доходит до процедуры отрисовки экрана.
1000045792.jpg
 

vilis

✩✩✩✩✩✩✩
4 Май 2025
2
0
Повторил Ваш проект радио, работает прекрасно! Нужен прием с 70-108, как это сделать?
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
206
161
www.1812.ru
@vilis, очень рад, что вы довольны результатом!
А есть ли в природе модуль для Ардуино с такой полосой частот? Мне не попадался.
Может быть кто-нибудь из форумчан знает.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
206
161
www.1812.ru
@vilis, спасибо, посмотрел. Меня устраивал дефолтный диапазон, поэтому не копал глубже. Для изменения диапазона нужно, как я понял, поработать с регистрами модуля. В инете на форумах люди разбирались с этим вопросом. И у них получалось.