Интернет-радио на основе Raspberry Pi. Проект длинною в полтора года.

internet-radio, raspberry, bbk, колонки, картина

Общий вид интернет-радио на Rasberry Pi

Некоторое время тому назад я купил одну плату Raspberry Pi 3 Model B. Побаловался с ней немного, но так и не решил, что же с ней такого можно сделать. Полезного и нужного. Для средств домашней автоматизации с головой хватает ESP8266, а для более серьезных задачек есть микросервера. Так и валялась плата у меня в столе, а я мучался в тщетных попытках придумать и сделать с ней хоть что-то.

И валялась она ровно до тех пор, пока я не наткнулся на проект по реализации интернет-радио как раз на платах семейства Raspberry Pi. Проект реализуется компьютерным энтузиастом и профессиональным программистом Бобом Ратбоном и насчитывает далеко не одну реализацию. Идея мне показалась весьма интересной. В моей загородной резиденции уже давно просится на покой старенькая мини-система от BBK, да и с радиоприемом в удалении от города есть некоторые проблемы. Интернет ловится отлично, а радио с ужасными помехами.

Ну, что же – решено, делать радио, так делать.

Боб Ратборн со всей тщательностью написал полноценную инструкцию по сборке интернет-радио на базе Raspberry Pi со всевозможными комбинациями. Радио можно изготовить с обычным ЖК-дисплеем, а можно установить сенсорный экран, для управления можно применить крутики, а можно нажимные кнопки, для вывода звука можно использовать внутренний DAC Raspberry, а можно применить внешнюю карту-преобразователь для улучшения звука. А можно вообще не использовать ничего, а управлять всем через веб-браузер или же с мобильного телефона. В общем-то полет фантазии создателя практически ничего не ограничивает. Если забить в Яндекс, а еще лучше в Гугл «Raspberry Internet Radio», то поисковик найдет тучу возможных реализаций корпусов и вариаций устройств. В общем развернуться есть куда. И еще раз, решено – буду делать свое собственное Internet Radio, выкину на помойку (или подарю кому) ресивер BBK, а его колонки прикручу к создаваемому устройству!

Железо

Моя плата Raspberry уже оснащена Wi-Fi модулем, поэтому у меня не было необходимости в подключении внешних «свистков». А использовать кабельное подключение там, где вполне можно использовать Wi-Fi мне не хотелось. Поэтому, я довольно-таки быстро загрузил все необходимое ПО на Raspberry и провел тестовый прогон системы. Радио работало. Звук шел на наушники прямо с Raspberry, станции можно переключать через браузер. Что еще нужно?

Но качество звука DAC на борту Raspberry меня не устроило. Звучание даже в средненьких наушниках звучит как-то плоско, без выраженных басов и высоких частот. Поэтому я приобрел отдельный ЦАП Aiyima PCM2706 ES9023. Разумеется, от китайских товарищей. Ведь они поставляют платы для самоделок по лучшим ценам, да и выбор у них безграничен. DAC подключается к USB-порту Raspberry и позволяет с заметно лучшим качеством производить перекодирование цифровых последовательностей сигналов в обычный аналоговый звук.

плата, цап, dac, pcm2706_es9023_usb_DAC, usb, pcm2706, большая, es9023, 2016-11-05

ЦАП на PCM2706

Приобретение внешнего ЦАП оправдало себя. В тех же самых средних наушниках звук с Raspberry и через PCM2706 стал куда приятнее. Набравших смелости я даже попробовал послушать его в своих Shure. Преобразователь не подкачал, звучание оказалось значительно лучше, чем использование встроенного ЦАП. Брать лучше и дороже ЦАП я бы не стал, ведь источник, хоть и интернет, но радио. Ни о каком супер качестве речи в трансляции быть не может.

Но выводить звук на колонки с ЦАП или с Raspberry нельзя, нужен усилитель. Путем недолго брожения по «быстрому Алику» я решил, что для разрабатываемого устройства вполне достаточно будет двухканального усилителя на TK2050. Продавец заявляет класс Т, что для интернет-радио, с его скромными битрейтами будет вполне достаточно. По характеристикам небольшая плата должна выдавать 50 Вт музыкальной мощности на два канала. Для скромных колоночек из прессованных опилочек от BBK более чем достаточно.

Усилитель потребляет постоянное напряжение величиной от 12 и до 24 вольт, рекомендуется 19, но я решил взять более стандартное решение на 12 вольт от Meanwell. И чтобы не прогадать, а я так и не понял, как считаются выходные ватты у китайцев, пришлось брать источник на 150 Вт. Блок питания оказался самым большим устройством внутри корпуса интернет-радио. Да и его стоимость оказалась сопоставимой со стоимостью самой Raspberry Pi. Но зато я уверен, что напряжение на особых переборах не просядет, мощности будет достаточно.

плата, радиатор,конденсаторы, винтовые разъемы

Плата усилителя на TK2050

Если уж пошел разговор о блоке питания, то следующими обязательно стоит упомянуть кнопки. Так как я задумывал корпус в футуристическом стиле, что-то а-ла Джетсоны, то хотелось заполучить кнопки с встроенной подсветкой и из полированного металла. С кнопками причудливых форм и назначения на российском рынке настоящая беда. Найти что-то отличное от стратегического рубильника — большая проблема. Но на мое счастье я смог обнаружить целого производителя чудесных кнопок с розничным магазином на «быстром Алике». В номенклатуре Elewind Electric я обнаружил не только кнопки управления (громкость там, переключение станции), но и кнопку включения питания.

Несмотря на солидный вешний вид, маленькие кнопочки в связке с Raspberry показали себя не с лучшей стороны. Нажатия отрабатываются очень плохо. Возможно, здесь виноваты не сами кнопки, а алгоритмы обработки нажатия со стороны Raspberry, а может быть низкое напряжение Raspberry не лучшим образом совместимо с нажимными кнопками Elewind. Тем не менее, устройство было собрано именно с этими кнопками.

отвертка, кримпер, нож обойный, плата, 3м, кусачки, провода, усиитель, USB-DAC

Интернет-радио в процессе сборки на рабочем столе. Уже работает.

Для отображения информации о выбранной станции, громкости и прочих событиях, я решил воспользоваться ЖК-экраном. Мой выбор пал на обычный четырехстрочный дисплей по двадцать символов на строке и с контроллером HD44780 на борту. Подсветка синяя, в тон кнопкам управления. Изначально я планировал подключить его через I2C адаптер, который шел в комплекте, но запустить его мне так и не удалось. Пришлось задействовать SPI с множеством проводков.

Поскольку в конечном устройстве уже были установлены кнопки, задействован дисплей, требовалась подсветка для светодиодов, то количество проводов грозило заполонить все доступное пространство. И остро встал вопрос по их коммутации. Собирать все единым узлом из цветных проводков мне не хотелось, поэтому пришлось потратить усилия на распайку коммутационной платы, где разводятся все напряжения, к ней подключаются кнопки, дисплей и все прочее. Благодаря коммутационной плате и разъемам на ней удалось добиться модульности системы и сократить количество меди внутри корпуса. А если какой-то блок выйдет из строя, я смогу его заменить, не занимаясь выпайкой в труднодоступном месте.

MP1584EN, DC-DC, преобразователь, ss34,4r7, mh

DC-DC преобразователь на микросхеме MP1584EN

Для питания усилителя 12 вольт — это минимум, но для запитывания Raspberry требуется напряжение в 5 вольт. Его я добываю при помощи замечательного DC-DC преобразователя на основе микросхемы MP1584EN. Преобразователь стоит сущие центы, тянет стабильно два ампера, крошечный по размеру и впихнуть его можно куда угодно. Именно его я и внедрил в коммутационную плату для питания Raspberry, экрана и USB ЦАП.

Программное обеспечение

Тут ничего необычного. Все устанавливается в соответствии с инструкцией, описанной у Боба в документе. Обычный Raspberian, MPC, скрипты для радио.

веб, вебсайт, радио, интернет, стена, тумба

Интерфейс веб-сайта интернет-радио

Как я упоминал выше, управлять интернет-радио можно как физически кнопками на корпусе, так и удаленно через web-браузер или же через приложение совместимое с MPC посредством смартфона. По ряду причин, я предпочитаю использовать исключительно web-сайт. Ничего устанавливать не нужно, все необходимые функции присутствуют.

Корпус

Пожалуй, самое сложное, что нужно было реализовать, так это корпус. К корпусу я выдвинул сразу же следующие требования: прозрачный, функциональный, максимально пожаробезопасный. В качестве материала корпуса я выбрал листовой поликарбонат. Материал вмеру прочный, трудногорючий, прозрачный опять же.

Набросав модель в SketchUp я отдал ее резчику по листовому поликарбонату. Человек угробил пару месяцев, но так и не смог сделать нормальные надписи на корпусе, да и вырезать прямоугольные детали прямоугольными ему оказалось не под силу. Тем не менее, пришлось собирать из того, что было.

модель, интернет-радио, raspberry Pi Radio, menu, mute, 3d

Модель корпуса в SketchUp

К особенностям корпуса я бы отнес развитые вентиляционные отверстия по бокам. Большой и мощный блок питания вкупе с усилителем должны выделять внушительные объемы тепла, особенно если включить погромче. Его нужно отводить за пределы корпуса так, чтобы в сам корпус не летела пыль. Именно для этого боковые крышки содержат прорези почти по всей длине. На передней панели разместились кнопки управления, большая кнопка питания и два разъема USB для удобного подключения Flash-дисков. Ведь устройство на Raspberry может не только проигрывать радио из сети, но и музыку с подключенных к нему накопителей. На задней панели сделаны выводы для кабеля питания, задней части Raspberry (для облегченного доступа к Ethernet разъему), и отверстие для установки переменного резистора, приспособленного для регулировки контрастности экрана на передней панели. Все платы у меня прикручены на стойках к днищу корпуса.

Китайские товарищи создают корпуса для сборки небольших электронных устройств из акрила или другого оргстекла, при этом отдельные части совмещают на болтах и гайках. Но доступные отечественные мастера пока не освоили настолько высокую точность резки по пластику, поэтому корпус я склеил. Как оказалось монолитный поликарбонат отлично склеивается суперклеем. Достаточно только намазать одну из частей цианоакрилатом, приложить ее к другой части и немного подержать. Суперклей схватывает поликарбонат очень прочно.

rasp-i-radio, raspberry, display, радио, интернет радио, кнопки светящеся, колонки BBK

Общий вид RaspRadio в прозрачном корпусе и с работающим дисплеем.

Однако, во время склейки прозрачного пластика, иногда в местах контактах двух частей корпуса, на поверхности выступает некоторое «запотевание». Оно трудно оттирается и поверхность выглядит не очень опрятно. Как оказалось это загрязнение легко оттирается обычным этиловым спиртом. Достаточно только провести по нему смоченной тряпочкой.

угол, запотевание, суперклей

"Запотевание" от цианакрилата и тот же угол после протирки спиртом.

Если корпус легко собирается на суперклее, то по задумке крышка должна сниматься, дабы облегчить доступ к элементам внутри корпуса. Чтобы облегчить работы я решил сделать крышку на болтах, которые вкручиваются во втулки, приклеенные в углах корпуса. Суперклей уже не так хорошо держит латунь, как пластик, поэтому я применил другой клей. Втулки удалось надёжно приклеить EVA-клеем из термопистолета. А дальше уже дело техники — просверлить отверстия в крышке в нужных местах, благо крышка прозрачная. На дно корпуса отлично подошли ножки на клеевой основе.

Проблемы

Все устройство собиралось полтора года. С одной стороны на хобби много времени из-за работы не уделить, с другой… А с другой стороны вылезали проблемы в самых неожиданных местах.

Мне пришлось менять усилитель. Многие покупатели данного типа усилителя жаловались, что во время доставки отрывается радиатор. Мне повезло с доставкой, ничего не оторвалось. Но во время монтажа, на усилитель упала тяжелый бур и оторвал усилитель вместе с приклеенной к нему микросхемой. Использовать такую плату уже нельзя, да и возиться с оторванными ножками тоже не хотелось. Пришлось заказать новый усилитель, благо стоимость его не катастрофическая.

Немного крови попортил и экран. Вернее, его примочка для подключения по I2C. Как я не старался, мне так и не удалось заставить его работать по протоколу I2C. Пришлось потратить больше проводов и подключить все через SPI. Экран заработал. Контрастность регулируется переменным резистором. А вот яркость слишком высока, чтобы нормально можно было бы настроить контрастность и получить хорошо читаемые символы и без сильных искажений под большими углами. Неплохо было бы подобрать резистор, дабы снизить яркость дисплея. Но именно неплохо было бы

Если к большой кнопке питания у меня нет никаких нареканий. Было только непонятно от какого напряжения запитывать подсветку. То к маленьким кнопкам остались вопросы. Нажимаются они хорошо, но по какой-то неведомой причине, то ли проблема в обработчике нажатий на Raspberry, то ли в самих кнопках, но реакция на нажатия очень неуверенная. Иногда нажимаешь на кнопку, а реакции никакой. Нажимаешь посильнее и вызывается совершенно другая функция, никак не привязанная к этой кнопке, но зато привязанная к другой. Несмотря на все недостатки — пользоваться ими все же можно. Да и светятся в темноте они не плохо.

Про те несколько месяцев, что выпиливался из поликарбоната корпус я уже упомянул. И про то, что прямоугольным смогли сделать только фронтальные и боковые поверхности. А обе крупные плоскости, дно и крышка, вырезалиcm не совсем прямыми. По какой причине так получилось мне не очень понятно. Обрабатывать же руками листовой поликарбонат — занятие на любителя. Сей пластик категорически крепок и стоек к обработке. Пришлось собирать все так, как есть и по ходу нивелировать ущерб от кривых глаз и рук.

Но самая большая загвоздка случилась уже после того, как все было собрано. При начале тестирования интернет-радио я столкнулся с двумя проблемами. В подключенных динамиках было слышно, как осуществляется доступ к файловой системе MicroSD. Прямо как вернулся в 1993 год, когда так же в звуковом тракте можно было слышать, как материнская плата получает данные от накопителя. А еще, в то время как никакого звука не звучит, например, включена функция Mute, я слышал отчетливый писк или шум. И все это в динамиках. Причем, если подключить наушники к выходу Raspberry или USB-ЦАП ни первый, ни второй эффект не проявлялись.

Ясно, что дело было в слишком высокой чувствительности на входе в усилитель. Я перепробовал несколько вариантов исправления и даже обратился в Бобу, разработчику проекта за помощью. Сперва я перепроверил, что у меня в системе используется единая «земля» для всех без исключения устройств. Земля оказалось единой, как и было задумано. Затем я попробовал подключиться к заземлению здания, в надежде, что проблема уйдет. Тоже не помогло. Попробовал подключить вход усилителя к выходу на наушники Raspberry, а затем и USB-DAC. Понятно, что ни то, ни другое не помогло. Я так оборачивал коротенький межблочный проводок в заземленную фольгу — результат нулевой. И даже заменил DC-DC преобразовать на отдельный AC-DC блок, дабы избежать умножения помех с основного AC-DC. Не помогло.

Ground Loop Isolator, разъемы, штекра, кабеля

Ground Loop Isolator. Две штуки.

Оставалось либо загрубить вход усилителя при помощи резисторов, либо, по совету Боба, применить гальваническую развязку под названием Ground Loop Isolator. Я решил двинуться по пути наименьшего сопротивления и заказал целых два Ground Loop-а с все того же «Быстрого Алика». Первый месяц все шло хорошо, развязки путешествовали с другого конца мира, пока не прибыли в соседнее почтовое отделение, где благополучно и сгинули в серой рутине штемпелей и марок. Пришлось заказать еще один набор. Он то добрался без особых приключений и точно в назначенное отделение.

Ground Loop Isolator HXD_zjm002_v02, плата, дорожки, скотч малярный, пайка, aux-out, aux-in

Задняя часть платы Ground Loop Isolator HXD_zjm002_v02. Часть малярного скотча пришлось оторвать дабы была видна маркировка на плате.

Для установки развязки в устройство мне пришлось разобрать корпус, дабы припаяться к контактам внутри. Тут я обратил внимание, что на платах есть подписи входа и выхода, хотя на корпусах никаких подписей нет и в помине. Судя по всему, схема симметрична и особой разницы по подключению нет. Но я все же подключился так, как обозначено, во избежание дополнительных проблем. На этом борьбу с посторонними шумами я и прекратил, так как после развязки проблема исчезла.

Выводы

Установив радио и подключив его к сети я получил доступ к тысячам радиостанций с хорошим качеством воспроизведения. К мириадам музыкальных потоков на любой вкус, со всего мира и совершенно бесплатно. Конечно, в список прослушиваемого пришлось забить только самое интересное, но даже и этого объема вполне достаточно.

Вещание, как правило, ведется круглосуточно и совершенно бесплатно. А рекламы на некоторых каналах нет и вовсе (скорее наоборот, реклама есть лишь на некоторых каналах). Что очень отрадно, так как эфирное радио слушать просто невозможно. Глупые ведущие, постоянная и агрессивная реклама, никчемные новости. Более того, в сети есть то, чего нет в эфире. Например, в интернет варианте присутствует радио «Ультра», которое в эфире отсутствует как класс.

темно, светодиоды, свет, светящиеся кнопки

Интернет радио в ночной атмосфере

С другой стороны, городить огород с Raspberry, пайкой, корпусом и всем прочим имеет смысл только когда у вас растут руки из нужного места и есть достаточно свободного времени. Для всех же прочих, ввиду отсутствия заводских интернет-радиоприемников, имеет смысл рассмотреть куда более простой и дешевый вариант по строительству своего интернет-радио. На мой взгляд вполне достаточно хорошего блока питания, грамотного усилителя и планшета или смартфона на Android. Все можно взять бывшее в употреблении. На смартфон устанавливается одно из многочисленных приложений и через него можно крутить радиостанции хоть сутки на пролет. Трудозатрат минимум, результат даже лучше, чем на Raspberry.

Проект 2

Попутно с реализацией интернет-радио, я решил сразу же сделать и второй проект. Аппаратура в нем уже попроще. Блоки питания, усилитель с функцией линейного входа и Bluetooth. Линейный вход подключается к компьютеру и устройство можно использовать как усилитель для колонок. А при желании, к нему можно подключиться со смартфона и проигрывать свою музыку. На мой взгляд удобно неимоверно.

усилитель, DIY, самоделка, блютуз, для компа, для телефона, он-офф, вкл-выклю, блок питания, тумблеры, разъем

Еще одно устройство: усилитель с подключением по BT и с линейным входом. Корпус сделан из бука и оргстекла.

Устройство пришлось собрать из массива бука и оргстекла. Бук пропитан в несколько слоев лаком на водной основе, что позволило раскрыть структуру и цвет древесины. На боковых стенках просверлено по несколько крупных отверстий для отведения излишнего тепла, а передняя и задняя крышки сделаны прозрачными, дабы обеспечить доступ к внутренностям устройства.

Полезные ссылки:
Страничка по интернет-радио на сайте Боба
Исчерпывающий документ по созданию своего собственного интернет-радио с ПО Боба
Сайт Боба
Локальная копия документа по созданию радио от Боба (его сайт далеко не всегда доступен)
Ground Loop Isolator
Товары на «Быстром Алике»:
Ground Loop Isolator
Усилитель на TK2050
Усилитель на TPA3116 c BT
ЦАП на PCM2706
Копки от Elewind
LCD экран 20х4
DC-DC на основе MP1584EN



Добавить комментарий