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

Вложения

Изменено:

Комментарии

serg2076

✩✩✩✩✩✩✩
28 Сен 2024
10
4
@Eugeniy59, я сейчас питаю ардуино 2-я 18650 соединенными последовательно , т.е 8,4 В при максимально заряженных АКБ, через вход Vin - он расчитан от 5 до аж 20В, Есть платы зарядки на али(), которые заряжают 2 или 3 банки Li-on акб от телефонного ЗУ. Вот только со звуком надо разобраться чтоб от 1 до 15 уровня было все более равномерно.
 

PashaBeat

✩✩✩✩✩✩✩
20 Дек 2024
1
0
А только один скетч из файлов заливать? Или их надо как-то соединить?
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
112
116
www.1812.ru
@serg2076, чтобы уменьшить уровни громкости на звуковых входах усилителя я бы порекомендовал подобрать экспериментальным путём резисторы. Подключите сначала переменный резистор на выходе любого звукового канала радиомодуля. При максимальной громкости выставите такое сопротивление, при котором УНЧ не захлёбывется и звучит без искажений. Измерьте тестером получившееся сопротивление на переменном резисторе и подберите резистор близкого номинала на каждый канал.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
112
116
www.1812.ru
@Eugeniy59, запитывать Ардуино Нано лучше от 5 в. Автоматическое отключение модуля DD06CVSA при низком токе - известная проблема. Тут либо использовать другой модуль, либо вешать дополнительную пассивную нагрузку на выход модуля в виде резистора, что не есть хорошо, т.к. ток, проходящий через этот резистор, будет быстрее разряжать аккумулятор.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
112
116
www.1812.ru
@PashaBeat, для Arduino IDE работает такое правило: загружаете ino-файл с таким же названием как и папка проекта. Именно этот файл является главным, остальные ino-файлы автоматически подключатся.