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

Вложения

Изменено:

Комментарии

aadulin

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

Eugeniy59

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

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

Eugeniy59

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


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

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

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
181
153
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
181
153
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, Здравствуйте,подскажите, а как подключить питание, а то я не разбираюсь
 

Даниилка

✩✩✩✩✩✩✩
4 Дек 2024
1
0
Доброго вечера,собрал схему,скачал все библиотеки и добавил в папку libraries к другим библиотекам,начал компилировать скетч,он не проходит компиляцию ,выдает ошибку ,версию библиотеки (Radio.h) скачал 2.0, ничего не выходит,подскажите пожалуйста что можно сделать?
 
Изменено:

serg2076

✩✩✩✩✩✩✩
28 Сен 2024
11
4
Привет, спроектировал корпус под этот проект для 3D печати. Хотелось чтоб был как можно меньше,.... пока не понятно как питать и заряжать.......
Вопрос к автору: не планируете дорабатывать проект?
В частности мешает перескок с минимально громкости, на макс(хотя наоборот - не перескакивает); Так же и в меню - в какую то сторону - циклично ходит, в другую - упирается...
У меня используются динамик 3Вт 4Ом, звук даже на 0 - уже не тихий, а на 1 уже начинает захлебываться(то ли усилитель, то ли динамики) - можно как то через прошивку уменьшить уровень?
IMG20241224220056.jpgIMG20241224220130.jpg
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
181
153
www.1812.ru
@serg2076, спасибо за повтор проекта и фотографии получившегося приёмника.
С регулировкой громкости постараюсь разобраться как только появится свободный вечер.
Модулей питания и зарядки для 18650 достаточно много и для приёмника подойдёт практически любой.
 

serg2076

✩✩✩✩✩✩✩
28 Сен 2024
11
4
@Олег Поляков, да не за что, корпус желающим могу выложить, но пока еще сыроват, и в этот корпус энкодер с платой - не влезет; делал на "голом" энкодере с подтяжкой резисторами на 3,3В

По поводу питания: сначала сделал 2 акб 18650 параллельно, но нужна повышайка до 5В для нормальной работы ардуино, использовал MT3608, но от неё идет фон.
Увидел что вход Vin на ардуине может питатся с 6 до 12В - спаял АКБ последовательно, усилитель запитал от 5в с ардуины, - стало без фона, но теперь проблема с зарядкой батареи из 2-ух банок 18650: нужна плата BMS 2S (которая скорее всего будет фонить) и зарядка на 8,4В. А хотелось бы стандартизации к зарядке мобильника. Можно конечно питать сразу от зарядки телефона, но хочется автономности...
 

serg2076

✩✩✩✩✩✩✩
28 Сен 2024
11
4
Убавляется в файле pov-radio
А что конкретно можно поменять для уменьшения уровня громкости динамиков?
этот параметр во вкладке POV-RADIO:
uint8_t volume = 3; // громкость (0 - 15)
- менял на 5 и на 3 - все также,
Во вкладке controls менял этот параметр для левого и правого каналов
incr(&volume, 1, 15);
также - ни каких изменений......
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
181
153
www.1812.ru
@serg2076, внёс необходимые правки. Теперь ниже нуля громкость не перескакивает в максимальное значение. При нулевой громкости сделал принудительное выключение звука через функцию radio.setMute.
Скетч перезалил. В головном сообщении темы ссылка на новую версию.
Пожалуйста, сообщите стало ли лучше.
 
  • Лойс +1
Реакции: serg2076 и Moldik

serg2076

✩✩✩✩✩✩✩
28 Сен 2024
11
4
@Олег Поляков, да, теперь с 0 не перескакивает на 15! и на 0 - звук переходит в MUTE, правда если однократно нажать, то режим MUTE отключается (но это больше фича , чем баг)
Олег, а что можно сделать с общим усилением звука: (еще раз напишу: на нулевой громкости уже достаточно хорошо слышно, а 1 и до 15. - как бы очень много, и вообще используется громкость только 0 или 1 ) у меня динамики 3вт 4Ом, усилитель точно такой-же, как на схеме PAM 8403, запитан от 5В. Можно сделать это, что то исправив в скетче?
 

Eugeniy59

✩✩✩✩✩✩✩
11 Апр 2024
7
0
@Олег Поляков,
перескок громкости нормализовался.
Есть вопросик - при громкости 1,2,3 .... до 6 примерно все нормально. Но если увеличить громкость то ардуинка походу то ли виснет то ли не хватает ей напруги. и перезагружается. получается одного элемента 3,7 вольт недостаточно...
Пробывал примнять китайский модуль DD06CVSA на микросхеме FM3209F, работает хорошо, но у этого модуля есть недостаток - если потребление меньше 50ма, то он отклчает выход стабилизированный 5v. Соответственно нам малеьнкой громкости уже не послушаешь... работает всего 30 сек на маленькой громкости. Может кто знает как обойти этот порог 50ма?