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

Вложения

Изменено:

Комментарии

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
108
114
www.1812.ru
@Eugeniy59, увы, у Ардуино нано памяти - особо не разбежишься. Прикрутить к схеме блютуз вряд ли получится. Если у вас стоит задача модернизировать старый приёмник, то у китайцев есть готовое бюджетное решение:
MP3-плеер с поддержкой Bluetooth 5,0, 5-32 В, 6 Вт за 292 ₽
 

Eugeniy59

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

samand587

★✩✩✩✩✩✩
31 Май 2021
93
25
Подключил дисплей 1,3" версии 2.2 и получил вот такое Что это может быть? :unsure:
 

Вложения

samand587

★✩✩✩✩✩✩
31 Май 2021
93
25
Попробовал загружать тесты из примеров Ардуины. С половиной тестов дисплей работает. Почему то после заливки теста исчезает определение СОМ порта в диспетчере устройств? Если дисплей отключить, то плата нано определяется в диспетчере устройств. Почему так происходит? В чем проблема в дисплее?
 

Вложения

AnCore

★✩✩✩✩✩✩
27 Янв 2020
177
36
@samand587, попробуйте добавить резистор сопротивлением 100 Ом между источником питания и модулем
 

samand587

★✩✩✩✩✩✩
31 Май 2021
93
25
Уважаемый автор! Мой дисплей оказался с SSD 1116. Можно ли скорректировать скетч радио под данный дисплей? Спасибо!
 

Android645

✩✩✩✩✩✩✩
18 Мар 2024
2
0
Собрал наконец то схему, компилируется все без ошибок, но как тут писали, просто черный экран, тестовый скетч компилируется и показывает картинку. Все библиотеки загружены, в чем может быть проблема?
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
108
114
www.1812.ru
@Eugeniy59, схема питания приёмника не показана поскольку принципиально не так важна для его функционирования. Для питания нужны 5 вольт, а откуда их добывать - каждый вправе выбрать сам. :)
 

SP634

✩✩✩✩✩✩✩
17 Июл 2021
5
7
Добрый день. А для чего кнопка с левой стороны корпуса? на схеме ее нет
 

SP634

✩✩✩✩✩✩✩
17 Июл 2021
5
7
@samand587, да, увидел, спасибо. Т.е нужен какой-то дополнительный узел включения -выключения приемника? например что- нибудь типа "умной кнопки" с контролем Li-Ion думаю подойдет
 
Изменено:
  • Лойс +1
Реакции: Олег Поляков

SP634

✩✩✩✩✩✩✩
17 Июл 2021
5
7
Уважаемые коллеги, пожалуйста подскажите: установил проект и библиотеки из указанных архивов. При компиляции выдает ошибку: Compilation error: 'oled' was not declared in this scope
 
Изменено:

samand587

★✩✩✩✩✩✩
31 Май 2021
93
25
Уважаемый автор! Получил сегодня дисплей точно такой же как у Вас в проекте. Подключил и имею картинку как с дисплеем SSD 1116. В чем может быть проблема? :oops:
 

Moldik

✩✩✩✩✩✩✩
27 Дек 2023
9
0
@Олег Поляков, Собрал приемник, но есть вопрос, при первом повороте энкодера начинается сканирование станций и из сканирования уже не выходит. Т.е. по кругу гоняет без остановки.
 

Larsa

✩✩✩✩✩✩✩
15 Апр 2023
1
0
Всем доброго времени суток!
Подскажите, как громкость регулировать? Собрал, всё работает, а громкость на максимум и не могу понять как она регулируется...
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
108
114
www.1812.ru
@Larsa, нажимаете сверху-вниз на ручку энкодера и, не отпуская её, поворачивайте против часовой стрелки (для уменьшения громкости) или по часовой стрелке (для увеличения громкости).

Одинарное короткое нажатие на энкодер - включение/выключение звука.

Длинное нажатие - вызов меню настроек приёмника.
 
Изменено:
  • Лойс +1
Реакции: Moldik

Moldik

✩✩✩✩✩✩✩
27 Дек 2023
9
0
@Олег Поляков, Подскажите пожалуйста
Если выставляю автоматическую настройку на станцию:
bool tuning_flag = false; // тип настройки на станции автоматическая
то не реагирует на выставленную чувствительность , что сюда не ставлю всегда чувствительность стоит Низкая, а хотелось бы высоку.
uint8_t level = 2; // чувствительность настройки на станции

@Олег Поляков, И еще два вопроса (где-то что-то я пропустил.((
1. выставляю стерео сразу в скетче, и все равно моно, только через меню все меняется руками
bool mono = false; // моно/стерео

2. Добавляю станцию в избранные через меню, появляется сердечко, но после выключения/включения ее там уже нет, да и вообще все что через меню выставляется после снятия питания возвращается в исходное положение, в принципе это можно считать единственным вопросом, если бы записывалось через меню и запоминалось, остальное можно и забыть.

Заранее спасибо))