Радиоконструктор: FM радио на базе Atmega328-P и RDA5807M
Добрый день, уважаемые хабражители!
Меня зовут Михаил Матвеев, и я хотел бы представить Вашему вниманию проект современного «радиоконструктора», основанного на МК Atmega328 и чипе RDA5807M.
Предыстория
Я думаю, многие из вас не только слышали, но и непосредственно сталкивались с такой платформой, как Arduino. И как показывает моя личная статистика, очень немногие заходят дальше, чем поморгать светодиодами. Когда я познакомился с Arduino в первый раз, меня останавливало то, что не было идей, как именно я бы мог использовать все возможности того же UNO на «полную катушку». Хватило только на сборку простенького робота на двух колёсах и сигнализации. Вместе с тем, хотелось сделать что-то более основательное.
Тогда я вспомнил о своем детстве, в котором были так называемые «радиоконструкторы». Суровый советский DIY Kit, который при правильной сборке и грамотной пайке даже начинал работать, и ловил радиостанции в различных диапазонах: Юность, Электрон-М и другие.
Ни один из таких Kit’ов мне не достался, зато достался ЭКОН-1:
Основной «фишкой» этого конструктора было то, что с его помощью можно было быстро и просто собрать большое количество различных устройств, от простых «пищалок» до вполне полноценного радиоприемника.
ЭКОН-1 — одна из многих причин, по которой я вообще оказался в сфере IT. И мне пришло в голову, что было бы неплохо создать современную версию подобного конструктора, чтобы все желающие могли получить удовольствие от только что собранного своими руками девайса.
Прототип на монтажной плате
Мой друг, талантливый инженер Константин Томаревский, поддержал идею, и мы начали думать о том, как сделать первый прототип.
Идея была в том, чтобы создать FM приемник, которым можно было бы управлять через МК.
Первый прототип был собран на монтажке, и стало понятно, что это работает 🙂
Для самой первой версии были выбраны следующие компоненты:
1. МК Atmega328P-PU
2. RDA5807M
3. Дисплей Nokia 5110
Такой микроконтроллер используется в Arduino UNO, соответственно, наше устройство совместимо с UNO на аппаратном уровне.
RDA5807M — «сердце» нашего конструктора. Этот тюнер имеет следующие возможности:
— Технология КМОП
— Монолитный корпус, не требует внешних компонентов (почти)
— Полоса частот: 50-115 МГц
— Шаг между каналами – от 200 до 25 кГц
— RDS/RBDS
— АЦП и встроенный синтезатор частот
— Адаптивное подавление шума
— Цифровой интерфейс (I2C)
— Уровень сигнала (RSSI)
— Усилитель
— Регулировка громкости звука
Дисплей Nokia — черно-белый, 84х48 пикселей. Он очень прост в подключении и управлении.
После пайки на монтажной плате получилось как-то так:
Было решено использовать Bootloader от Arduino, это позволило сохранить совместимость со всеми многочисленными библиотеками и существенно снизить порог вхождения для тех, кто уже имел какой-либо опыт работы с платформой.
Интерфейс взаимодействия с пользователем реализован следующим образом. Три кнопки, подключенные к аналоговому входу МК через резисторы, используются для переключения режимов и управления приемником. Еще одна кнопка служит для перезагрузки МК. Экран, соответственно, отображает информацию о громкости, станции и т.д.
ЛУТ, фоторезист и отладка
После успешных испытаний на монтажной плате мы решили создать ещё несколько прототипов методом ЛУТ (а в дальнейшем — фоторезистом). Также мы решили усовершенствовать приемник, добавив туда ещё один усилитель звука для подключения не только наушников, но и внешнего динамика. Выбор пал на PAM8403, это простой и недорогой усилитель, который требует питания 5В.
Первый прототип, изготовленный методом ЛУТ, выглядел следующим образом:
ЛУТ — хорошая штука для относительно быстрого прототипирования в домашних условиях, но когда дело доходит до двухсторонних плат, начинаются сложности. Количество компонентов на плате увеличивалось — например, мы решили разместить на плате разъем для программатора, чтобы не было необходимости каждый раз извлекать МК для перепрошивки. Так, последующий прототип стал двухсторонним, был изготовлен методом фоторезиста и стал выглядеть намного приятнее:
Следующим шагом был отказ от «навесных» компонентов, которые мы размещали на плате при помощи однорядных PINов. Так, было принято заменить усилитель на LM386N, установить преобразователь уровней CD4050BE. Всё это усложнило конструкцию, но устройство стало выглядеть намного лучше.
Итоговый прототип, изготовленный нами в домашних условиях, выглядел так:
Заказ печатных плат
В Китае можно заказать печатные платы, выполненные промышленным способом. Стоимость выходит относительно небольшой даже при малых тиражах, а время ожидания (включая доставку) как правило не превышает 2-3 недель.
Первую «партию» плат заказали на PCBWay. Так она выглядела:
Одна из проблем, с которой мы по неопытности столкнулись: металлизация «съедает» значительную часть размера самого отверстия, поэтому некоторые компоненты с трудом «влезали» в нужные отверстия. При проектировании схемы необходимо учитывать этот момент.
По результатам тестирования мы ещё немного доработали конструкцию, добавив несколько конденсаторов для более стабильной работы устройства. Собрали ещё один прототип:
Разъём USB используется для питания приёмника. Питание также подаётся при подключении программатора.
Прошивка
Отдельно стоит остановиться на прошивке. Она написана на C++ и мы распространяем её по лицензии GPLv3: https://github.com/xtremespb/fm_receiver.Я практически не разрабатывал на C/C++, поэтому (вероятно) код далёк от идеала и может содержать ошибки, но GPL на то и GPL, чтобы можно было его дорабатывать сообществом 🙂
Текущие возможности прошивки включат в себя:
— Ручную и автоматическую настройку станций
— RDS
— Управление громкостью
— Включение режима усиленных басов
— Включение и отключение подсветки дисплея
— Отображение и динамическая визуализация уровня сигнала
В следующей, четвёртой по счёту ревизии, мы сделаем ещё несколько полезных «фишек»: подключим левый и правый каналы к аналоговым входам на МК, что позволить «визуализировать» поступающий аудиосигнал.
Кстати, возможности устройства не ограничиваются радио! Никто не мешает, например, написать какую-нибудь игру (интереса ради я сделал старый добрый Arkanoid) или другую программу, использующую возможности платы.
Production
Разработка устройства от идеи до реализации заняла около 6 месяцев, что, с практически полным отсутствием опыта в данной области, не так уж и плохо.
На данный момент у нас есть около 10 полностью собранных комплектов, которые включают в себя всё необходимое для сборки своего собственного устройства:
— МК Atmega328P-PU
— Преобразователь уровня CD4050BE
— Дисплей Nokia 5110
— Приемник RDA5807M
— Программатор USBasp
— Операционный усилитель LM386N
— Разъемы под МК и программатор
— USB B, Audio Jack 3.5, три кнопки, провода, однорядные коннекторы
— 11 резисторов и 12 конденсаторов, 4 индуктивности, кварц, стабилитрон и светодиод
— Динамик
— Печатная плата
Для сборки понадобится припой, флюс и паяльник, больше ничего не нужно.
Все комплектующие упакованы в небольшую коробку из «крафтового» картона:
Исходники прошивки уже выложены на Github; Gerber-файл, принципиальная схема и инструкция по сборке будут также опубликованы позднее.
Источник
Все необходимое для самостоятельной сборки Web-радиоприемника
Вы могли слышать про популярные радиоприемники, которые получают сигнал трансляций из интернета. Для работы подобного устройства не нужна радиотрансляционная вышка — только домашний Wi-Fi. Умельцы стилизуют свои самодельные Web-радиоприемники под олд-скульную и винтажную технику. А готовые устройства стоят весьма не скромно. В этой статье расскажу, как самостоятельно собрать интернет-радио с минимальными затратами.
Для сборки вам потребуется:
1. Источник питания (от 5 до 24 В). Пойдут старые блоки питания от гаджетов, ноутбуков и так далее. Возможно потребуется отдельный преобразователь для контроллера (для понижения с 24 до 5 В).
2. Корпус. Можно использовать старые корпуса от гаджетов, старой аудио-видео техники. Хороший вариант — встроить контроллер в активные компьютерные колонки — приличный вид плюс усилитель, динамики и источник питания. Можно сделать корпус с нуля — из пластика, ДСП, картона и т.п. Основная проблема будет — сделать аккуратную переднюю панель.
3. Контроллер для интернет радио. Это модуль с Wi-Fi и открытой прошивкой. Можно использовать роутер с Open-WRT, можно отдельный контроллер на ESP32/8266. Желательно брать сразу с дисплеем, так как будет компактнее и проще готовое изделие.
4. Аудиомодуль и аудиоусилитель. Если контроллер не имеет встроенной микросхемы для вывода звука, то лучше приобрести отдельный ЦАП с интерфейсом I2S. Потребуется также и усилитель звука для вывода на мощные колонки.
5. Динамики или колонки. Самый простой вариант — колонки от портативной акустики, это компактные и широкополосные варианты на 2″ или 3″.
6. Прямые руки для того, чтобы собрать все вместе, спаять, залить прошивку, IP адреса вещания, а также придать приличный внешний вид готовому устройству.
Контроллеров несколько, на выбор. Самый простой вариант (Kit8) стоит около $4.9, вариант с дисплеем побольше (T-Display) около $10, но обратите также внимание на функциональные варианты, например, T-Audio со встроенным ЦАП-ом.
Это, наверное, самый простой вариант (Wi-Fi Web Kit8) — модуль на базе NodeMCU/ESP-8266 со встроенным дисплеем и USB интерфейсом. Подходит не только для проектов интернет-радио, но и для самодельных RC-моделей, для умного дома, IoT и так далее. Модуль предусматривает несколько дискретных входов-выходов, а также аналоговый (А0).
Неплохой вариант — контроллеры от TTGO. Этот вариант чут-чуть подороже, но и экран побольше. Модуль может быть интереснее, как управляющий модуль для интернет радио. На экране можно выбирать нужную «радио-волну», а кнопками подтверждать выбор. Аналогично предыдущей плате, модуль имеет интерфейс USB.
Достаточно дорогой, но популярный модуль TTGO T5s. Версия платы V2.1, остнован на ESP32 и огромном 2,7″ дисплее Е-ink (E-Paper). Модуль имеет встроенный микрофон, ЦАП МAX98357A, ридер SD карты, bluetooth. Это одно из готовых решений для интернет-радио.
Самый фукциональный модуль от TTGO, заточенный под воспроизведение аудио. Это T-Audio (альтернативное название WROVER ESP32). Имеет интересную круглую форму платы под портативные колонки — как раз вариант под самодельный корпус из водопроводной трубы. На плате расположен ридер SD карт, bluetooth, WI-FI, ЦАП WM8978, светодиод WS2812B RGB и акселерометр MPU9250.
Последние два модуля имеют встроенный ЦАП, а для остальных следует приобрести отдельный шилд с микросхемой для вывода звука (I2S DAC). Эти шилды заточен под вывод звука с контролера через интерфейс I2S (стандартный). Из цифрового потока в аудио преобразование выполняет специальный ЦАП PCM5102.
В первом лоте есть в комплекте передняя панель, останется найти только коробку. По качеству неплохие и громкие (широкополосные). Вторые динамики совсем дешевые ($2), но пойдут для пробы.
Недорогой усилитель PAM8610 с двумя выходами по 2х10 Вт — пригодится для усиления звука на динамики. Это самые популярный и недорогой усилитель сигнала класса D. Подключение проблем не вызывает — правый/левый каналы, питание, динамики.
Недорогой усилитель PAM8610 с двумя выходами по 2х10 Вт с регулировкой звука. Такой же, как и предыдущий, недорогой, но с распаянным фильтром и коннекторами для удобства. Я рекомендую именно такой, особенно если есть возможность расположить все в корпусе.
Корпус можно собрать из подручных материалов — взять старую коробку из-под устройств, компьютерные колонки, старые DVD плееры или радиоприемники.
Все указанные модули прошиваются из Arduino. Прошивки открытые.
Если честно, то это одни из лучших проектов для самостоятельно сборки. Очень полезное применение недорогих комплектующих, паяльника и своего времени. Если вы пытаетесь увлечь сына программированию, то это простой и наглядный способ рассказать что и как. Если вы подбираете проект для школы или института, то тоже рекомендую обратить внимание, так как подобные проекты в последнее время наиболее актуальны.
Источник