Интернет журныл о промышленности в Украине

Інтернет радіоприймач на Raspberry Pi

Проживаючи у великому місті і маючи навіть простенький радіоприймач, можна слухати кілька десятків радіостанцій в УКХ діапазоні з вельми непоганим якістю

Проживаючи у великому місті і маючи навіть простенький радіоприймач, можна слухати кілька десятків радіостанцій в УКХ діапазоні з вельми непоганим якістю. Здавалося б, цього цілком достатньо ...

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

Не дивно, що зараз багато користувачів вважають за краще слухати радіостанції, що віщають у Всесвітній мережі. В даний час кількість інтернет-радіостанцій уже перевищила 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 індикатора дуже обмежені і читати на ньому, наприклад, новини не дуже комфортно. Використовувати приймач в якості будильника досить ризиковано, якщо з якоїсь причини не буде інтернету - не буде і радіо. Та й електрику можуть вночі відключити ...

Та й електрику можуть вночі відключити

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

По суті, радіоприймач є платою 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 сек і вимкнути живлення. Погодьтеся - це дуже незручно.

В результаті вийшла ось така схема. Це мій перший варіант з керуванням енкодер. Блакитним кольором виділені мої доповнення.

Управління налаштуванням і гучністю здійснюється за допомогою енкодерів з кнопками 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.

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

Єдине ноу-хау схеми - стабілітрон VD3 типу Д815Б з напругою стабілізації 6,8 В. У роботі стабілізатора він не бере, встановлений для захисту навантаження від підвищеної напруги в разі несправності стабілізатора. Погодьтеся - якщо замість 5 В подати на схему 24 В, наслідки будуть дуже сумні.

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

Ну а якщо замість запобіжника встановлений цвях, стабілітрон перегріється, кристал в ньому розплавиться і замкне вихід накоротко. Raspberry Pi буде врятована. Якщо використовувати слабкострумовий стабілітрон в скляному корпусі, при перевантаженні він просто вибухне і не захистить навантаження.

Якщо використовувати слабкострумовий стабілітрон в скляному корпусі, при перевантаженні він просто вибухне і не захистить навантаження

Підсилювач низької частоти особливостей не має, він зібраний за типовою схемою на LM1876. Елементи C9 ... C12 і R12 ... R17 - регулятор тембру на 2 фіксованих положення Classic і Rock. У першому випадку частотна характеристика лінійна, у другому - здійснюється підйом нижніх і верхніх частот. Якщо використовувати тумблер SA1 на три положення, то в середньому положенні, коли всі контакти розімкнуті, буде підйом тільки нижніх частот. Регулятор тембру змонтований навісним монтажем на висновках SA1.

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

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

Підсилювач живиться від окремої обмотки трансформатора. Якщо використовувати загальний джерело живлення для аналогової і цифрової частин приймача, буде складніше позбутися від перешкод, створюваних Raspberry Pi - всіляких «журчалок» і «скріпелок». Аналогова і цифрова «земля» повинні з'єднуватися тільки в одній точці - на вхідному роз'ємі УНЧ. Ще краще використовувати окремий зовнішній підсилювач НЧ або активні колонки.

Схема другого варіанту приймача з керуванням кнопками така.

Схема другого варіанту приймача з керуванням кнопками така

Режим «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р.

Де придбати комплектуючі?