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

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

Вложения

Изменено:

Комментарии

aadulin

✩✩✩✩✩✩✩
8 Янв 2024
1
0
@Олег Поляков,
Спасибо огромное за схему усилителя, а Вы не подскажете, какие именно Вы номиналы использовали конденсаторов и резистора?
 

Eugeniy59

✩✩✩✩✩✩✩
11 Апр 2024
6
0
Спасибо автору огромное, всетаки размер используемого дисплея как раз подошел в корпус, пока еще корпус допиливаю напильником.
Собрал схему, все работает))
Есть вопросы...
1. Почему то информация RDS отображается кракозябрами..... Или на радиостанции косяк? так же показывается некое время, я так понял что тоже с RDS... а можно ли добавить допустим модуль часов, и сделать чтобы просто часы шли без использования радио, когда радио не нужно или не слушаешь?
_D-t6taXqLk.jpgigbQZ5Qk2j8.jpg

Есть еще вопрос.... на громкости 0 радио поет всеравно, тихонько, ладно было бы достаточно, но в полной тишине это громковато. Какое значение нужно поменять чтобы на 0 громкости была тишина? Просто использую 3 ватнные динамики и на максимальной громкости они уже хрипят даже с выключенными басами... В идеале бы конечно шаг громкости как то поменять, а то иногда энкодер когда крутишь, (при том, что надо еще удерживать в нажатом положении энкодер) при достижении громкости 0, если крутануть еще то соскакивает на значение 15 громкости, и радио начинает орать. Приходится крутить снова в минимум и ловить 0.
 
Изменено:

Eugeniy59

✩✩✩✩✩✩✩
11 Апр 2024
6
0
Уважаемый Олег Поляков, для уточнения, все ли верно я понял, (указал на фото черным текстом ) по емкостям?


так же выделил зеленым кругом то что я не понял - как я предпологаю - это на минус, (вроде так обозначают в советских книгах что все соединяется на корпус GND) не очень сильно радиолюбитель, больше китайские схемы понятнее, не пинайте).
т.е. это минус зеленым кругом, а питание указано куда - 3-9в, а антенну от радио модуля цепляем к - Безымянный.png, то что буквой А это и есть конечная антенна, куда я могу еще подцепить телескопическую антенну комплектную моего корпуса...
amp1.jpg
Если нет, то объясните для "особо одаренных" что куда цеплять от этого усилителя радиочастоты…. у меня просто еще и телескопическая антенна выдвижная в корпусе имеется, хотелось бы ее тоже оставить действующую. такая - DOC005278730.jpg

т.е. хочу подцепить усилитель антенны, и оставить выдвижную антенну, деуствующую, как цеплять этот усилитель правильно?
Подскажите
 
Изменено:

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
103
109
www.1812.ru
И @Eugeniy59, спасибо за отзыв и вопросы!
1. Иногда действительно кракозябры лезут по RDS. Это от радиостанции и качества приёма зависит, как я понимаю. Время, Вы правы, тоже берётся из RDS. На разных станциях оно разное, зачастую бредовое. И это косяки транслирующей станции. По идее смысла от часов через RDS нет никакого.
Чтобы убрать визуализацию часов на дисплее радио можно в 77- строке pov-radio.ino изменить c true на false:
C++:
bool time_flag = false;
Не уверен, что хватит памяти у Arduino Nano для поддержки ещё и модуля часов. Проверять надо.

2. То, что при громкости 0 радио тихо играет - особенность библиотеки radio, точнее функции setVolume этой библиотеки.
Для полного приглушения громкости достаточно однократного быстрого нажатия на кнопу экодера. Повторное нажатие на кнопку включает громкость на ранее выставленное значение.
(А то, что при уменьшении громкости при 0, она перескакивает на максимальную - это у меня недоработка в скетче. Признаю.)
 
  • Лойс +1
Реакции: Moldik

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
103
109
www.1812.ru
@Eugeniy59,
ёмкости верные, кроме 500 пФ. Должно быть 0.5 мкФ.

Да, "земля" = минусу.

Телескопическую антенну подключаете к С3, а "-<" подключаете к антенному входу радио-модуля.
 

Evgeniy37

✩✩✩✩✩✩✩
4 Июл 2024
1
1
Здавствуйте Олег! Собрал Ваш приемгик, заработал, но есть одно Но. У Вас на картинке, где схема, указан энкодер GSMIN AK291, у меня тоже по названию такой же, разница лишь в том что на картинке у Вас на квадратной плате а у меня на круглой, и обозначение выводов у меня другое +5,s1,s2,dat,gnd.Не смогли бы Вы подсказать куда какой вывод подпаивать на Arduino? Искал даташит, но безуспешно! За ранее спасибо!
 
  • Лойс +1
Реакции: Олег Поляков

Valeryan

✩✩✩✩✩✩✩
18 Сен 2024
1
0
@samand587, Здравствуйте,подскажите, а как подключить питание, а то я не разбираюсь