- PVSM.RU - https://www.pvsm.ru -

WiFi радио из старой магнитолы

image
Эта статья посвящена практическим аспектам изготовления недорогого WiFi радио [1] на основе OpenWrt [2] роутера под управлением микроконтроллера Stellaris [3].

Цели и обоснование выбора компонентов

Основной целью было изготовить устройство для обеспечения фоновой музыкой кухню, с максимально простым и наглядным интерфейсом пригодным к использованию домашними.
Второстепенные цели:

  • исправить неработающую магнитолу
  • пристроить неисправный роутер и заказанную в припадке шопоголизма отладочную плату Stellaris
  • оценить удобство работы с микроконтроллером Stellaris

Выбор остальных компонент схемы несущесвеннен.

Корпус

Обычно этот раздел ставится в конец. Но на мой взгляд. тема достаточно важная, особенно если предстоит эксплуатация устройства в условиях агрессивных сред (я имею ввиду кухню). Jeff [4] сделал корпус из фанеры. Хорошее решение для тех кто хочет нормального звучания и умеет гнуть фанеру. В моем исполнении такой корпус выглядел бы слишком колхозно, поэтому я выбрал отыгравшую свое старую пузатенькую магнитолу с CD диском. Широкое основание CD проигрывателя позволяет разместить наиболее габаритный элемент конструкции -плату роутера, динамики дают основу аудио тракта, а ручка для переноски необходимую мобильность. Кроме того, есть шанс использовать органы управления магнитолы.

Интерфейс

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

Конструкция

В качестве основы была выбрана инструкция 4х летней давности с сайта MightyOhm [4]. Она достаточно подробно описана и я не вижу смысла воспроизводить ее тут целиком. Остановлюсь только на отличиях.
При построении радио по такой схеме существует дилемма разделения управления между линуксом и микроконтролером. Я остановился на варианте когда большая часть логики управления расположена на МК из за нелюбви и отсутствии большого опыта линукс администрирования а так же желания поиграться с МК. Кроме того, меня смущает проблема необходимости повторения процедуры настройки при перепрошивке роутера.
Поэтому, со стороны опенврт я добавил только

  • скрипт [5] начала проигрывания с обновлением плей листа из интернет
  • скрипт [6] отображения статуса плеера
  • метку [7] окончания загрузки роутера
Программное обеспечение

Stellaris это вам не ардуина, одних только UART портов, свободно работающих на 115200 у него 6 штук, что позволяет при отладке использовать два из них в качестве переходника USB — UART для ПК. Первая задача выполняемая ПО МК это проброс информации между UART1 подключенного к роутеру и UART0, который может быть подключен к ПК. Вторая — анализ проходящей информации и посылка событий в конечный автомат [8] включая информацию об изменении состояния кнопок. Третья — реализация конечного автомата с анализом входящих сообщений и изменении информации на устройствах отображения

После старта, МК ожидает сигнала окончания загрузки роутера, обновляет плей лист из интернет (я использую DropBox [9] для хранения плейлиста), восстанавливает уровень звука и станцию, и посылает команду на начало проигрывания.

Предложенные схема [10] и код [11] рабочие, но создавались по кусочкам в течении полугода, как следствие, получились достаточно сумбурными и ценны только как рабочее демо.

Изготовление

WiFi радио из старой магнитолы
Донор, неведомое чудо китайской промышленности начала века.
Со старой магнитолы снимается все оборудование кроме динамиков и платы с кнопками. Можно попробовать сберечь аудио усилитель и питание если у вас есть время и вдохновение.
WiFi радио из старой магнитолы
Потрошение.
После соответствующей доработки корпуса он фаршируется новым оборудованием:
WiFi радио из старой магнитолы
Фаршировка.
WiFi радио из старой магнитолы
Платой роутера (1)
Мне достался знаменитый Asus WL-500gP V2 [12], достался за пиво в связи с проблемами по WAN порту, которые не влияли на работу в качестве WiFi хоста. Теоретически роутер должен подойти любой с возможностью установки OpenWrt и USB портом.
USB звуковой картой (5)
Я заказал такую, как показана на картинке и она работает, кроме того, была успешно опробована Asus Xonar U3 [13], но она не дала ожидаемого улучшения качества звучания. Я подозреваю в связи с низкими битрейтом и качеством аудио тракта. Еще одна опробованная китайская USB звуковая карта, в прозрачном корпусе без кнопок, работать отказалась, при том что на ПК все было в порядке, причина неизвестна.
Аудио усилителем (4)
Я заказал его на EBay по принципу «шо подешевле». Не могу рекомендовать из за сильных высокочастотных шумов, хотя включенные последовательно с динамиками резисторы помогли их уменьшить до приемлемого уровня с сохранением достаточного уровня громкости.
Устройствами индикации
При построении радио по такой схеме достаточно использовать пару светодиодов для индикации состояния либо ориентироваться по светодиодам роутера, но чтобы ресурсы МК не простаивали я заказал вот такой OLED экранчик (3). Экран замечательный — компактный и контрастный, но слишком мелкий, особенно если предполагается эксплуатация радио людьми со слабым зрением. Поэтому в конструкцию был добавлен семисегментный индикатор с контроллером (6) показывающий наиболее важную на мой взгляд информацию — номер выбранной станции.
Материнской платой
МК (2), память (7) и разъемы на периферийные устройства я скоммутировал на макетке. Основанием для выбора внешней памяти стало сообщение о баге с флеш памятью в ранних версиях стелларис значительно снижающем количество циклов перезаписи. Без микросхемы памяти можно обойтись или же использовать внутренний флеш МК, но это потребует доработки ПО.
Питанием (8)
Роутер требует 5в 2а, усилитель 12в <1а я заказал два отдельных блока питания. подозреваю что есть более аккуратное решение и с удовольствием с ним познакомлюсь в комментариях.
Устройствами управления (кнопками)
Конструкция моей магнитолы позволила использовать после соответствующей модификации родную плату с кнопками. Надеюсь вам повезет также.
WiFi радио из старой магнитолы
Готово

Бухгалтерия

1 ASUS WL-500g Premium V2 $10 (дохлый WAN порт)
2 EK-LM4F120XL Stellaris LM4F120 LaunchPad Evaluation Board $7.99 (сейчас)
3 New 3.3V 0.96" 128X64 OLED LCD LED Display Module Shield white Color SSD1306 $8.74
4 10W Mini HIFI 12V Digital power amplifier Stereo High power amplifier Board $4.99
5 USB2.0 To 3.5mm Audio Microphone Speaker Port Adapter 7.1 Channel 3D Sound Track $2.08
6 0.56" LED 7 Segment 4 Digit Common cathode MAX7219 arduino Blue White Green $3.68
MAX7219 $0.45
7 AT25040A ~$1
8 Switch Power Supply Driver for LED Strip Light AC 110/220V 5V 2A 10W $8.16
12V 1A 12W DC Switch Power Supply Driver $4.99
Stellaris

Стелларис порадовал, широкими возможностями и хорошей документацией, но осталось впечатление что продукт сыроват. Как со стороны железа, что возможно связано с тем что я использовал плату из предзаказа, так и со стороны ПО. При этом комьюнити не слишком большое, по сравнению с той же ардуиной, что приводит к тому, что сделав шаг в сторону от предложенных TI примеров вы оказываетесь на минном поле из загадок и багов вооруженные только документацией и исходниками.
Так например, оказывается, что использование UART выше 2 требует внесения изменений в код библиотеки. На моей плате оказались закорочены PB7 и PD1 пины, хотя возможно это следствие моих не слишком корректных экспериментов. Не удалось заставить нормально работать пользовательские кнопки и другие не критичные но досадные мелочи.

Что осталось нереализованым:

  • Прикрутить управление через ИК пульт, благо пинов и вычислительных мощностей МК хватает.
  • Завести через реле на МК управление питанием роутера что позволит реализовать «спящий» режим и при необходимости резетить роутер.
  • Наладить NTP и отображать точное время.
  • Реализовать таймер автоматического выключения радио после 4-5 часов проигрывания
  • Добавить в конструкцию жесткий диск с коллекцией музыки и возможность использования его при отсутствии интернета.
  • Добавить возможность использования нескольких плейлистов и кнопку переключения между ними.
  • Заменить кнопки громкости и выбора станции поворотными переключателями из старых мышек.
Выводы

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

Автор: dim133

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/42151

Ссылки в тексте:

[1] WiFi радио: http://en.wikipedia.org/wiki/Internet_radio_device

[2] OpenWrt: https://openwrt.org/

[3] Stellaris: http://www.ti.com/tool/EK-LM4F120XL

[4] Jeff: http://mightyohm.com/blog/2008/10/building-a-wifi-radio-part-1-introduction/

[5] скрипт: https://wifiradio.googlecode.com/svn/trunk/openwrt/setup_mpc_update.txt

[6] скрипт: https://wifiradio.googlecode.com/svn/trunk/openwrt/mpc_show.sh.txt

[7] метку: https://wifiradio.googlecode.com/svn/trunk/openwrt/setup_autostart.txt

[8] конечный автомат: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82

[9] DropBox: https://www.dropbox.com/

[10] схема: https://code.google.com/p/wifiradio/

[11] код: https://code.google.com/p/wifiradio/source/browse/#svn%2Ftrunk

[12] Asus WL-500gP V2: http://www.asus.com/Networking/WL500gP_V2/

[13] Asus Xonar U3: http://www.asus.com/Sound_Cards_and_DigitaltoAnalog_Converters/Xonar_U3/

[14] Источник: http://habrahabr.ru/post/190422/