Лучшее из возможного!

Размер шрифта:  Aa Aa Aa Aa Aa



Интернет радиоприемник на Raspberry Pi

Часть 1. Hardware.

Pi Radio с энкодерами

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

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

Неудивительно, что сейчас многие пользователи предпочитают слушать радиостанции, вещающие во Всемирной сети. В настоящее время количество интернет-радиостанций уже превысило 10 тысяч. Через Интернет можно слушать программы станций, расположенных практически в любой стране мира и вещающих на самых разных языках. Но включать компьютер для того, чтобы слушать радио, мягко говоря, неудобно. Как-то привычнее и удобнее – покрутил ручку – настроился на станцию...

И так, буду делать интернет-радиоприемник. Такая мысль пришла мне в голову, когда я решал, для какого-бы проекта использовать микрокомпьютер Raspberry Pi model B, который остался не у дел после приобретения гораздо более мощного Raspberry Pi 2.

Существует много проектов интернет радио на Raspberry Pi. Лучшее, что мне удалось найти – это Pi Radio. Автор – Bob Rathbone - работает над этим проектом на протяжении более 2 лет. Особо следует отметить открытость и доступность всей информации, а также очень подробное описание аппаратной части и методики настройки программного обеспечения.

Именно эту разработку я и решил повторить. Разумеется, я не просто слепо скопировал конструкцию, а подошел к процессу творчески, добавил кое-что свое.

И так, что же собой представляет Pi Radio. Это интернет-приемник, который позволяет слушать on-line радиостанции, кроме того, он может проигрывать музыкальные файлы с флэшки или сетевого диска в домашней сети. В программу заложено много всевозможных сервисных функций – таймер, будильник, RSS новости, подкасты...

Подключение к сети Интернет может быть как проводным, так и по WiFi. Основа приемника – популярный микрокомпьютер Raspberry Pi, причем можно использовать любую модель: B, B+, 2 или Zero.

Bob Rathbone разработал несколько вариантов схемы и программного обеспечения. Управление возможно как с помощью энкодера, так и кнопок, отображение информации на 2-х или 4-х строчном символьном LCD дисплее. Управлять приемником можно с пульта ДУ.

Дисплей можно подключить как непосредственно к портам ввода-вывода Raspberry Pi, так и с использованием платы на основе PCF8574 по шине I2C. Автор предусмотрел возможность использования еще двух типов дисплеев – AdaFruit LCD с интерфейсом I2C и PiFace CAD с интерфейсом SPI.

Я повторил вариант с непосредственным подключением двухстрочного дисплея к портам ввода-вывода и управлением энкодерами. Результаты меня вполне удовлетворили, поэтому, когда возникла необходимость еще в одном приемнике, я изготовил второй вариант, все то же самое, но управление кнопками. В дальнейшем я буду описывать именно эти две модификации.

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

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

На мой взгляд, автор уделил слишком много внимания всевозможным вспомогательным функциям в ущерб основным. Ведь возможности LCD индикатора очень ограничены и читать на нем, например, новости не очень комфортно. Использовать приемник в качестве будильника весьма рискованно, если по какой-то причине не будет интернета – не будет и радио. Да и электричество могут ночью отключить...

Pi Radio изнутри

Однако, в общем и целом все получилось, приемником можно пользоваться.

По сути, радиоприемник представляет собой плату Raspberry Pi, к портам ввода-вывода которой подключен дисплей и 2 энкодера. С помощью одного из них осуществляется выбор станции, с помощью второго регулируется громкость. Дисплей использован самый распространенный, на основе контроллера HD44780 на 2 строки по 16 символов. Вместо энкодеров можно использовать для навигации 5 кнопок.

Для любителей качественного звука предусмотрена возможность использования вместо AUDIO выхода Raspberry Pi внешней USB звуковой карты.

Разумеется, для приемника нужен блок питания. Тут много вариантов выбора – подойдет любой стабилизированный блок питания на 5 вольт с током не менее 1,5 А. Имейте в виду, что зарядник от телефона не подойдет, нужен именно стабилизированный блок питания, напряжение под нагрузкой не должно падать ниже 4,8 В, а без нагрузки подниматься выше 5,2 В.

Ну и музыку надо как-то слушать, т.е. необходим стерео усилитель или активные колонки. Тут тоже масса вариантов на любой вкус (слух) и кошелек.

Я решил для этого проекта использовать по максимуму свой радиолюбительский «ящик с хламом». В нем нашелся прекрасный сетевой трансформатор на нужный ток и напряжение, микросхема импульсного стабилизатора LM2576-ADJ и микросхема неплохого и довольно мощного стерео усилителя НЧ LM1876.

Автор предлагает включать и выключать приемник просто сетевым выключателем. Хотя это и не причинит вреда Raspberry Pi, но при неудачном стечении обстоятельств может повредить файловую систему на SD карточке. Поэтому я решил дополнить устройство схемой корректного закрытия системы и выключения питания. Тем более, что такой режим автор предусмотрел – нужно нажать и удерживать кнопку «Меню» в течение 3 сек, после чего подождать еще примерно 30 сек и выключить питание. Согласитесь – это весьма неудобно.

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

Pi Radio схема с энкодерами

Управление настройкой и громкостью осуществляется с помощью энкодеров с кнопками SA1, SB1 и SA2, SB2 соответственно. Кнопка SB1 – вход в «Меню», SB2 – режим «Mute». Энкодеры должны выдавать последовательность сдвинутых на 90 градусов импульсов. Я использовал тип ES110501S-HA2 5 pin. Под такой маркировкой они значились в прайс-листе магазина.

Транзисторы VT3...VT7 и резисторы R11...R23 – это преобразователи логических уровней 3,3 – 5 В для индикатора. Эти элементы устанавливать необязательно. Как показала практика, 5-и вольтовый индикатор нормально работает с логическими уровнями 3,3 В. Однако, если возникнут проблемы, преобразователь уровней можно смонтировать на небольшой плате непосредственно на индикаторе. Еще лучше использовать индикатор с питанием от 3,3 В, но такие индикаторы довольно дефицитны и стОят существенно дороже.

DA1 – приемник от ДУ для телевизоров, на выходе в нем стоит транзистор по схеме с общим эмиттером и нагрузочным резистором около 30 КОм в цепи коллектора, так что проблемы согласования уровней нет. HL2 – индикатор активности ДУ.

Вот собственно и весь приемник, а выделенная слева голубым цветом часть схемы – это цепи питания. Я использовал обычный трансформаторный блок питания. В выключенном состоянии все цепи обесточены, никаких дежурных режимов. При нажатии на кнопку SB4 на трансформатор подается питание. Обращаю внимание – кнопка без фиксации и она должна быть рассчитана на коммутацию 220 В. C4, C5, L1, L2 – сетевой фильтр помех, номиналы L1, L2 некритичны.

С выхода стабилизатора напряжение 5 В подается на разъем microUSB Raspberry Pi и на PIC контроллер DD1. На выводе 7 (GP0) контроллера устанавливается высокий логический уровень, транзистор VT1 открывается, срабатывает реле K1 и своими контактами блокирует кнопку включения питания.

На выводе 3 (GP4) контроллера устанавливается нулевой уровень, он используется для закорачивания входа УНЧ в процессе загрузки и закрытия системы. Дело в том, что процесс активации USB звуковой карты сопровождается неприятными, довольно громкими звуками. Если предполагается использовать встроенный AUDIO выход Raspberry Pi, реле K2 можно не устанавливать, вывод GP4 контроллера в этом случае никуда не подключается.

После подачи питания светодиод HL1 мигает в течение примерно 50 сек, сигнализируя, что система загружается. По истечении этого времени приемник готов к работе, на выводе 3 (GP4) устанавливается высокий логический уровень, вход УНЧ разблокируется, HL1 светится постоянно. В качестве HL1 и HL2 я использовал один двухцветный светодиод с общим катодом.

Для того, чтобы выключить приемник, нужно кратковременно нажать кнопку SB3. При этом на выводе контроллера 5 (GP2) устанавливается низкий логический уровень, имитирующий нажатие кнопки SB1 «Меню». Через 3 сек начинается закрытие системы, вход УНЧ блокируется, HL1 опять мигает, сигнализируя о закрытии. Примерно через 40 сек система закрыта, на выводе 7 (GP0) устанавливается нулевой уровень, реле K1 отключается и система обесточивается.

Контроллер можно использовать типа PIC12F629 или PIC12F675, а с незначительной доработкой программы – любой PIC.

Pi Radio схема блока питания

Напряжения на вторичных обмотках трансформатора несколько великоваты, но я исходил из наличия. Пришлось использовать импульсный стабилизатор напряжения на 5 В. Он собран на LM2576-ADJ, включенной по типовой схеме. Номинал резистора R1 рассчитывается по закону Ома исходя из номинального тока и напряжения срабатывания реле. L2, C3 – дополнительный фильтр импульсных помех. Номинал L1 выбирается исходя из входного напряжения и рабочего тока согласно рекомендациям, приведенным в datasheet на LM2576. Номинал L2 некритичен.

Единственное ноу-хау схемы – стабилитрон VD3 типа Д815Б с напряжением стабилизации 6,8 В. В работе стабилизатора он не участвует, установлен для защиты нагрузки от повышенного напряжения в случае неисправности стабилизатора. Согласитесь – если вместо 5 В подать на схему 24 В, последствия будут весьма печальны.

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

Ну а если вместо предохранителя установлен гвоздь, стабилитрон перегреется, кристалл в нем расплавится и замкнет выход накоротко. Raspberry Pi будет спасена. Если использовать слаботочный стабилитрон в стеклянном корпусе, при перегрузке он просто взорвется и не защитит нагрузку.

Pi radio - УНЧ

Усилитель низкой частоты особенностей не имеет, он собран по типовой схеме на LM1876. Элементы C9...C12 и R12...R17 – регулятор тембра на 2 фиксированных положения Classic и Rock. В первом случае частотная характеристика линейна, во втором – осуществляется подъем нижних и верхних частот. Если использовать тумблер SA1 на три положения, то в среднем положении, когда все контакты разомкнуты, будет подъем только нижних частот. Регулятор тембра смонтирован навесным монтажом на выводах SA1.

Нормально замкнутые контакты реле K2 закорачивают вход усилителя на время загрузки и закрытия системы. На схеме показано подключение реле с обмоткой на 24 В, но можно использовать и на 12 или 5 В, в зависимости от используемого блока питания. Как я уже писал, это реле нужно только для USB звуковой карты и качественной акустики.

С помощью подстроечного резистора R4 выравнивается усиление по каналам (стерео баланс). Выводить этот резистор для оперативной регулировки нет необходимости. Коэффициент усиления УНЧ определяется соотношением номиналов резисторов R8/(R3+R4) и R9/R7.

Усилитель питается от отдельной обмотки трансформатора. Если использовать общий источник питания для аналоговой и цифровой частей приемника, будет сложнее избавиться от помех, создаваемых Raspberry Pi – всевозможных «журчалок» и «скрипелок». Аналоговая и цифровая «земля» должны соединяться только в одной точке – на входном разъеме УНЧ. Еще лучше использовать отдельный внешний усилитель НЧ или активные колонки.

Схема второго варианта приемника с управлением кнопками такая.

Pi Radio схема с кнопками

Режим «Mute» включается при одновременном нажатии кнопок «Volume Up» и «Volume Down». Резисторы R27-R31 нужны только для самых старых моделей Raspberry Pi model B rev.1. Для rev. 2, а также моделей B+, 2 и Zero их устанавливать не нужно.

Блок питания импульсный 5 В, 2 А. Резисторы R26, R27 ограничивают бросок тока при включении сети, а также выполняют роль предохранителей. Диоды VD2 - VD4 служат для согласования уровней 5-3,3 В. Реле K1 с обмоткой на 5 В. Если не удастся приобрести такое реле с двумя парами контактов, можно включить параллельно два реле с одной парой в каждом. Возможно, в этом случае потребуется использовать более мощный транзистор VT1. Вместо УНЧ я использовал активные колонки с питанием от 5 В (USB). Они подключаются к AUDIO выходу Raspberry Pi. Остальные элементы схемы аналогичны варианту с энкодерами.

Чертежи всех плат в Sprint Layout я выкладываю только для того, чтобы их можно было "взять за основу". Ссылка в конце старнички. Повторять 1:1 не рекомендую, размеры и конфигурация плат определяются, в первую очередь, корпусом.

Прошивка PIC для двух вариантов приемника разная, для варианта с энкодерами это файл piсrdo_enc.hex, для варианта с кнопками - piсrdo_but.hex. Прошивки подойдут как для PIC12F629, так и для PIC12F675. В архиве с прошивками есть и файл исходного текста программы. При необходимости в нем можно легко изменить длительность задержки на включение и выключение приемника.

Где приобрести комплектующие? Raspberry Pi пока еще (конец 2015г.) дешевле заказать в Китае, на Aliexpress ее стоимость в зависимости от модели находится в пределах 30...40 USD. Там же при необходимости можно подобрать блок питания и USB звуковую карту по вполне разумной цене.

Использовакть USB звуковую карту имеет смысл только при достаточно хорошей акустике. Если ваши колонки стОят менее 50 USD, вполне можно обойтись встроенным в Raspberry Pi AUDIO выходом. Выбор колонок достаточно большой в любом российском магазине, торгующем электроникой. Разумеется, Hi End звук от интернет радио не ждите, но и "пищалки" размером с теннисный шарик - не лучший выбор.

Индикатор лучше приобретать в России, если необходима поддержка русского языка. Предпочтение следует отдать моделям с темными символами на светлом фоне. Популярные индикаторы с белыми символами и синей подсветкой красиво смотрятся, но они очень "инерционны". Трудно будет следить за бегущей строкой.

Если ваш индикатор вместо русских букв показывает иероглифы, ничего страшного, его можно использовать в этом приемнике. Только русский текст будет отображаться латиницей. Энкодеры тоже лучше приобрести в розничном магазине, по крайней мере, будет известна марка, значит можно уточнить параметры по datasheet.

SD карточку лучше приобрести в розничном магазине своего города. Почему, я расскажу во второй части статьи, посвященной установке программного обеспечения. А о том, как все это настроить читайте в третьей и четвертой частях.

Если появились вопросы, перед тем, как их задавать внимательно прочитайте все части описания, а также ознакомьтесь с документацией от автора Pi Radio

2016г.


PDF Журнал «Радиолюбитель»
PDF Подробное описание Pi Radio by Bob Rathbone. Ver. 4.7 01/01/2016
ZIP Платы в Sprint Layout и схемы в sPlan
ZIP Прошивки PIC12F629, PIC12F675 и исходный текст программы PIC