Идея дизайна нового корпуса интернет-радиостанции Pi-Sonos родилась еще до завершения работы над предыдущей его версией. Со временем, она впитала в себя накопленный пользовательский опыт и учла допущенные ранее недочеты. На этот раз все «по-взрослому».
Прошу любить и жаловать
Давайте попрощаемся с названием "Pi-Sonos", и сегодня и впредь будем называть колонку "RadioBox". И хотя в этот раз Sonos Play 1 оказал наибольшее влияние на развитие проекта, новое название, во-первых, звучит лучше, а во-вторых, отражает его специфику и самостоятельность.
Мотивация
Вроде бы корпус №2 был более удобным для пользователя по сравнению с первым, но и он тоже был не лишен недостатков.
Основными и принципиальными были два из них:
- Кнопка «play/pause» на переднем торце
Кнопка не самая жесткая, но тем не менее, при нажатии на нее колонка очень часто сдвигалась с места.
- Аналоговый регулятор громкости («крутилка»)
Громкость можно регулировать не только со смартфона, но и на самой колонке. Первый способ — цифровой, второй — аналоговый. Соответственно, периодически между ними возникал рассинхрон. Особенно расстраивали случаи, когда кто-нибудь выкручивал аналоговую громкость на 0, и потом сколько ни тыкай в смартфон — громче не сделаешь, приходилось все равно вставать и идти крутить ручку.
Следовательно, надо было как минимум заменить аналоговую крутилку на две цифровые кнопки громкости, и перенести все три кнопки на верхний торец. Кстати, в Sonos Play 1 сделано именно так.
Сюда же добавились еще две «хотелки». Первая — это плавное мигание светодиода в режиме паузы. Вторая — другой цвет светодиода во время загрузки колонки, чтобы было без смартфона понятно, когда колонка готова к использованию после включения.
Ну и последнее, но не по важности — хотелось красивый корпус с минимальным количеством швов, плавными линиями и стильным дизайном. Хотелось повторить эстетику и лаконичность Sonos.
Процесс
Корпус
Скетч в начале статьи — реальный набросок будущего корпуса. Там не прорисованы фазоинверторы, но объем корпуса уже рассчитан под имеющиеся динамики и выделены места для динамиков и электронной начинки. Сглаженные углы стали для меня настоящим вызовом. Как ни крути, а склеить такое из отдельных стенок нереально из 8мм МДФ (я не рассматриваю другие материалы по двум причинам: 1) удобство обработки этого МДФ; 2) отсутствия других нормальных материалов в магазинах в моем районе). Пришлось полностью менять подход к изготовлению корпуса.
На этот раз пришлось применять технологию склейки слоев. Она проста до неприличия: рассекаем весь корпус горизонтальными плоскостями с интервалом 8мм и вырезаем из МДФ получившиеся проекции. Идейный вдохновитель технологии, как всегда, канал SoundBlab. Главный плюс такого подхода — можно сразу сделать много камер почти любой формы (например, очень удобно делать фазонверторы). Но, как известно, дьявол кроется в деталях.
Высота корпуса со всеми «крышками» — 168мм, МДФ толщиной 8мм, т.е. надо сделать 21 слой. Нет, не так. Надо:
- распилить панели МДФ на 21 заготовку;
- затем сделать 21 деталь определенного размера (т.е. отфрезеровать 63 грани, по 3 грани на каждой детали, одна грань изначально была ровной, следовательно, отправной);
- потом срезать фрезером 84 угла по шаблону;
- далее — выпилить около 50 отверстий разной величины и формы;
- после этого склеить все детали в единый корпус;
- а еще высверлить и зафрезеровать отверстия под динамики и порты Raspberry Pi;
- наконец, зашпаклевать, зашкурить и покрасить корпус и крышки;
- и только тогда можно преспокойно приступать к сборке компонентов внутри корпуса и «финишной» отделке колонки.
Если с распилом не было проблем (на торцовочной пиле п.1. занял минут 10), то дальше начинались некоторые сложности. Для тех, кто не сталкивается с деревообработкой, поясню: сделать больше 2х строго прямоугольных деталей строго одинакового размера и формы с помощью только фрезера и линейки — очень сложно.
Можно было сделать одну деталь, а потом использовать ее как шаблон (примерно вот так), но тогда (как видно на примере) за раз можно обработать всего 2 грани из 3х, а затем надо поворачивать заготовку, что все равно грозило «сбить прицел» и сделать что-нибудь криво.
На практике оказалось проще и лучше собрать свой собственный небольшой фрезерный стол и фрезеровать детали уже на нем.
Немного про стол для тех, кому любопытно
В сборке фрезерного стола нет ничего сложного. Материалом столешницы послужили остатки ламината — он достаточно жесткий и дает идеально ровно гладкую поверхность. Для рамы использован строганный брусок 30х30мм. 2 рамы, 4 с небольшим ребра жесткости — et… voilà:
В качестве направляющей для фрезеровки идеально подходит квадратный алюминиевый профиль 20мм. В самом простом случае, его можно было просто крепить к столешнице струбцинами с двух сторон, но это не comme il faut. Гораздо лучше сделать его перемещаемым по столу по специальным направляющим и фиксируемым винтами с барашками на концах. Для этого ламелях параллельно длинной грани на небольшом расстоянии от края фрезеруются пазы. Поскольку все ламели ровные, пазы получаются абсолютно параллельными, алюминиевый профиль свободно перемещается по ним. Для усиления зажима можно использовать гровер-шайбу под шляпкой винта (снизу).
В качестве направляющей для фрезеровки идеально подходит квадратный алюминиевый профиль 20мм. В самом простом случае, его можно было просто крепить к столешнице струбцинами с двух сторон, но это не comme il faut. Гораздо лучше сделать его перемещаемым по столу по специальным направляющим и фиксируемым винтами с барашками на концах. Для этого ламелях параллельно длинной грани на небольшом расстоянии от края фрезеруются пазы. Поскольку все ламели ровные, пазы получаются абсолютно параллельными, алюминиевый профиль свободно перемещается по ним. Для усиления зажима можно использовать гровер-шайбу под шляпкой винта (снизу).
А вот подъехали фоточки процесса
Распил заготовок:
Фрезерный стол в действии: фрезеровка углов по шаблону:
Все детали после фрезеровки. Будущие крышки лежат отдельно.
Тут должно быть фото выпила отверстий в слоях, но Джонни уже сделал монтаж.
Корпус колонки перед шлифовкой:
В конце корпус был покрашен в черный цвет, чтобы черные динамики не выделялись на нем темными пятнами после покрытия декоративным материалом.
Фрезерный стол в действии: фрезеровка углов по шаблону:
Все детали после фрезеровки. Будущие крышки лежат отдельно.
Тут должно быть фото выпила отверстий в слоях, но Джонни уже сделал монтаж.
Корпус колонки перед шлифовкой:
В конце корпус был покрашен в черный цвет, чтобы черные динамики не выделялись на нем темными пятнами после покрытия декоративным материалом.
И, собственно, вот так все выглядит в собранном состоянии:
И сзади:
Снаружи наклеена акустическая ткань, а белые заглушки, закрывающие ее стык и отсек для электроники — обрезки кабель-канала 40х25. Крышки сверху и снизу покрашены белой эмалью из баллончика в 5 слоев (сильно жалею, что не выбрал акриловую краску — эмаль сильно воняла, долго сохла, а сейчас активно собирает пыль и отпечатки).
Начинка
Динамики переехали в новый корпус из старого. К ним нет нареканий. Это все те же пара мидбасов и пара твитеров, подключенных к усилку через кроссоверы.
Теперь по усилку. Раз уж отказываемся пользоваться аналоговой «крутилкой» платы Suptronics X400, то можно, как вариант, просто спрятать ее в недрах корпуса. Но плата большая, и из-за её размеров появились пара проблем, вынудивших меня поискать ей замену.
Спасибо IgorKKK, что заставил разобраться в продукции Hifiberry. Когда-то давно я считал, что их AMP+ — это только аудиоусилитель, который надо вешать над их же ЦАП-ом DAC+. Но AMP+ — это плата «все-в-одном», и она вполне могла бы заменить X400, только вот характеристики у нее хуже. А вот у её потомка — AMP2 — с характеристиками все ОК. Она компактнее, чем X400, и зажимы у нее выведены в более удобную для монтажа сторону.
Для сравнения размеры X400 и AMP2 в сборе с Raspberry Pi 3
Suptronics X400:
Hifiberry AMP2:
Hifiberry AMP2:
Кстати, AMP2 на Алиэкспрессе не продается, её я заказывал напрямую у производителя (очень рекомендую — заказ из Швейцарии дошел до меня всего за 6 дней). А вот AMP+ вполне себе можно купить и на АЭ.
Расположение компонентов внутри корпуса
Сверху — «малинка», усилок и платы управления:
Снизу — динамики и кроссоверы:
Снизу — динамики и кроссоверы:
Элементы управления
В прошлой версии за управление воспроизведением управляла одна маленькая плата с кнопкой и светодиодом. Теперь платы пришлось разделить. Первая плата — с кнопками «play/pause», «volume -» и «volume +» — разместилась под верхней крышкой, вторая — управляющая миганием светодиодов — в отсеке с «малинкой».
Схема плат для особенно пытливых умов
Физические платы разделены на схеме серой линией.
Немного комментариев по схеме.
Справа все тривиально — три кнопки с тремя парами защитных резисторов, защищающих входные пины от выгорания.
Слева интереснее. Сразу бросается в глаза схема включения синего светодиода LED2. Принцип её работы прост, но неочевиден. Здесь используется тот факт, что все GPIO-пины общего пользования по умолчанию работают как входные (input). При включении питания с пина +3.3V подается напряжение, которое гонит ток через ограничительный резистор R1, синий светодиод LED2 и пин OUT1 (который пока еще не OUT, а IN, поэтому-то через него можно пропускать ток на вход). Когда Raspbian загружен полностью, запускается мой демон, который переводит пин OUT1 в режим output и подает на него напряжение +3.3V (HIGH). Разность потенциалов, падающая на участке «R1-LED2» становится равной 0V, и светодиод гаснет. Т.о. колонка сигнализирует о полной готовности к работе.
Белый светодиод работает в трех режимах:
горит постоянно — колонка воспроизводит музыку;
мигает редко и плавно — колонка в режиме паузы;
мигает часто и резко — нажата какая-либо кнопка.
Включением и отключением белого диода управляет пин OUT2, а плавностью мигания — пин OUT3. Когда нужна плавность мигания, через пин OUT3 на затвор MOSFET-а Q1 подается логическая 1 (HIGH, +3,3V), транзистор открывает участок цепи «R12-C1-Q1». И тогда при установке пина OUT2 в уровень HIGH (+3.3V), ток начинает заряжать конденсатор C1 и по мере его заряда зажигает светодиод LED1. А при установке пина OUT2 в уровень LOW (0V), конденсатор постепенно разряжается через светодиод, плавно уменьшая уровень его яркости до 0. Несложно посчитать, что время полного заряда/разряда конденсатора составляет примерно 3 секунды, оптимальный, на мой взгляд, период мигания.
Немного комментариев по схеме.
Справа все тривиально — три кнопки с тремя парами защитных резисторов, защищающих входные пины от выгорания.
Слева интереснее. Сразу бросается в глаза схема включения синего светодиода LED2. Принцип её работы прост, но неочевиден. Здесь используется тот факт, что все GPIO-пины общего пользования по умолчанию работают как входные (input). При включении питания с пина +3.3V подается напряжение, которое гонит ток через ограничительный резистор R1, синий светодиод LED2 и пин OUT1 (который пока еще не OUT, а IN, поэтому-то через него можно пропускать ток на вход). Когда Raspbian загружен полностью, запускается мой демон, который переводит пин OUT1 в режим output и подает на него напряжение +3.3V (HIGH). Разность потенциалов, падающая на участке «R1-LED2» становится равной 0V, и светодиод гаснет. Т.о. колонка сигнализирует о полной готовности к работе.
Белый светодиод работает в трех режимах:
горит постоянно — колонка воспроизводит музыку;
мигает редко и плавно — колонка в режиме паузы;
мигает часто и резко — нажата какая-либо кнопка.
Включением и отключением белого диода управляет пин OUT2, а плавностью мигания — пин OUT3. Когда нужна плавность мигания, через пин OUT3 на затвор MOSFET-а Q1 подается логическая 1 (HIGH, +3,3V), транзистор открывает участок цепи «R12-C1-Q1». И тогда при установке пина OUT2 в уровень HIGH (+3.3V), ток начинает заряжать конденсатор C1 и по мере его заряда зажигает светодиод LED1. А при установке пина OUT2 в уровень LOW (0V), конденсатор постепенно разряжается через светодиод, плавно уменьшая уровень его яркости до 0. Несложно посчитать, что время полного заряда/разряда конденсатора составляет примерно 3 секунды, оптимальный, на мой взгляд, период мигания.
Наконец, софт и UX
Веб-интерфейс стал функциональнее, приятнее, и научился подгружать обложку альбома для текущей композиции. Весь код по-прежнему доступен всем желающим на Github.
Сравнение с версией 2.0
Было | Стало |
---|---|
В логику работы физических кнопок добавилась обработка долгого нажатия:
play/pause: короткое нажатие — запуск/остановка воспроизведения; длинное нажатие — переключение станции на следующую по списку;
volume: короткое нажатие — однократное изменение громкости; длинное нажатие — непрерывное изменение громкости.
Хорошо, а что дальше?
На фото видно, что корпус собирался летом, и у него было достаточно времени на обкатку и доработку. На текущий момент и внешний вид, и качество звука, и юзабилити устраивают как моих домашних, так и (что главное) меня. И хотя пока я не вижу причин для переделки этого корпуса и/или замены его частей, останавливаться на достигнутом я не намерен. В планах — превращение этой колонки в голосового помощника, а также изготовление мини-колонки для детской на основе Raspberry Pi Zero в корпусе, напечатанном на 3D-принтере. Так что ждите новых статей в недалеком будущем!