Съдържание:

Raspitone: лесен за използване Jukebox: 7 стъпки
Raspitone: лесен за използване Jukebox: 7 стъпки

Видео: Raspitone: лесен за използване Jukebox: 7 стъпки

Видео: Raspitone: лесен за използване Jukebox: 7 стъпки
Видео: Part 3 - The Secret Garden Audiobook by Frances Hodgson Burnett (Chs 20-27) 2024, Юли
Anonim
Raspitone: лесен за използване Jukebox
Raspitone: лесен за използване Jukebox

Здравейте, следващият ми проект е, както го правя, не особено полезен проект:

Това е джубокс, базиран на Raspberry 3 B+

Знам, нещо подобно може лесно да се направи със смартфон и Bluetooth високоговорител.

Но за моя проект имах две трудни предпоставки:

Исках да направя нещо „реколта“.

Като цяло, като се има предвид фактът, че моята дама е окончателно безнадеждна за компютър или Bluetooth или нещо друго от 21 -ви век (и дори 20 -ти), трябваше да направя нещо много просто за използване ………

И така, спецификациите бяха следните:

Един единствен бутон за стартиране на машината

Сензорен екран (много прост) за управление на музиката.

С едно докосване на екрана, за да спрете машината.

И за да има добър звук ………

Консумативи

За това използвах:

1 малина 3 B+

1 старо домашно кино, което беше безполезно поради DVD четец OOS (стар Samsung 2.1 с нискочестотен говорител и 2 високоговорителя, които промених, за да се поберат в кутията)

1 HIFIBERRY DIGI+ платка (с оптичен изход за усилвателя на мощността)

1 капацитивен сензорен екран 7 (моят е Makeasy за малина с HDMI вход и захранван чрез USB, но всеки HDMI сензорен екран трябва да е ОК)

1 захранване 5V 5A

1 релеен щит

1 Arduino nano за управление на процеса на включване/изключване на захранването

1 инфрачервен светодиод за управление на домашното кино (задвижван от 2N2222 NPN транзистор)

1 IR приемник (за част от проекта за изучаване на IR кодове, получавам моя от стар мултимедиен твърд диск с дистанционна команда)

3 светодиода

1 превключвател за режим на поддръжка

1 превключвател за работа върху arduino (по време на качването arduino се нулира)

някои конектори JST и Dupont

И за кутията

Дърво и шперплат (но няма да описвам задълбочено изработката на кутията). само да кажа, че по отношение на бумера вътре в кутията, 10 мм шперплат и 18 мм дърво са задължителни, ако не искате да видите джубокса да пресича хола, докато играете !!!!

Стъпка 1: Описание на частта от малина:

Raspi трябва да управлява различни неща:

1) командите към домашното кино (чрез IR дистанционно)

2) музикалните файлове

3) сензорният екран

4) Сърдечния ритъм към Arduino (който управлява Wdt (часовник за куче за гледане))

Започнах от Raspbian strech разпространение на 16 G SD карта (Тъй като ще четем само файлове от SD картата, използването на твърд диск не е необходимо). Няма да прекарвам време в тази част, тъй като мрежата е пълна с обучения за нея.

Нека да видим различните части в следващите стъпки …

Стъпка 2: IR дистанционните кодове

Тъй като не можах да намеря схемата на схемата на домашното кино, реших да я управлявам чрез дистанционни команди

Първата стъпка, която трябваше да завърша, беше да се науча да разписвам кодовете на дистанционната команда за домашно кино. За това използвах много доброто туто в Instructables от IR кодовете на Austin Stanton

Имах някои разлики, вероятно поради новата версия, тъй като инструкциите са доста стари, файлът hardware.conf вече не съществува (поне аз не го намерих)

Изглежда също, че транзисторът, използван в туто, е PNP транзистор, от моя страна използвах 2N2222, който е NPN, но резултатът е същият. (С изключение на кабелите !!!!!!!!)

Присвояването на пина е дадено в /boot/config.txt:

#autorisation de lirc le 2019-07-08dtoverlay = lirc-rpi, gpio_out_pin = 22, gpio_in_pin = 23

IR LED ще бъде свързан така към pin22 на Raspi.

Една важна забележка: при изучаването на кодовете към Raspi е задължително да се използват ключовите думи, изброени в командата

unrecord --list-namespace

Ето файла, който създадох за моя джубокс:

pi@raspitone:/etc/lirc $ cat lircd.conf

# Моля, отделете време, за да завършите този файл, както е описано в # https://sourceforge.net/p/lirc-remotes/wiki/Check… #, и го направете достъпен за другите, като го изпратите на # #

# Този конфигурационен файл е генериран автоматично

# използвайки lirc -0.9.4c (по подразбиране) на четвъртък, 9 май 17:33:37 2019 # Използва се командния ред: -d /dev /lirc0 /root/lircd.conf

# Версия на ядрото (uname -r): 4.14.98 -v7+ # # Отдалечено име (от конфигурационния файл): джубокс

# Марка на отдалечено устройство, това, което държите в ръка: # Модел на отдалечено устройство номер:

# URL адрес на информация за отдалечено устройство:

# Има ли отдалеченото устройство пакетно устройство за заснемане e. г., а

# usb dongle?:

# За вградени USB устройства: идентификатор на доставчик на usb, идентификатор на продукта

# и низ на устройството (използвайте dmesg или lsusb):

# Тип контролирано устройство

# (Телевизор, видеорекордер, аудио, DVD, сателит, кабел, HTPC, …):

# Устройства, управлявани от това дистанционно:

започнете дистанционно

име джубокс

битове 16

флагове SPACE_ENC | CONST_LENGTH

eps 30

аепс 100

заглавка 4470 4496

едно 542 1693

нула 542 581

553 Серия

pre_data_bits 16

pre_data 0xC2CA

празнина 107863

toggle_bit_mask 0x0

честота 38000

кодове за стартиране

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

крайни кодове

край дистанционно

Както можете да видите, имам нужда само от 4 команди, за да управлявам домашното кино

Захранване (ON/OFF)

AUX => за превключване към оптичния входен канал (тъй като HC винаги стартира на DVD четец)

И обем +/-

Свързаните команди се изпълняват чрез командите LIRC:

например: „irsend SEND_ONCE джубокс KEY_VOLUMEUP“

Стъпка 3: Основна програма

Основната програма е написана на Python:

Тъй като съм нов в Python, предполагам, че има много подобрения, които могат да бъдат направени, но той работи….

Спецификации:

1) управление на графичния екран:

За това използвах APPJAR, който е TKINTER, но цивилизован за студент (моят случай), това означава много по -лесно за използване, вероятно с по -малко възможности, но това беше достатъчно за моята цел.

2) възпроизвеждане на mp3 файлове:

Използвах mplayer за python.

3) генериране на случайни числа за игра в режим на разбъркване:

Тъй като не исках да чувам една и съща песен на всяко тримесечие, създадох малка програма, за да проверя дали номерът не присъства в списъка с x предишни номера (x в зависимост от дължината на плейлиста).

Функцията randint в python не е толкова "случайна", доколкото видях.

4) изпратете „сърдечния ритъм“на Arduino

5) управление на файлови плейъри:

Тъй като Mplayer е асинхронен, когато файлът се стартира, няма начин да се знае за Python, когато е завършен (поне не намерих прост начин)

За да разреша това, използвах командите mplayer, даващи дължината на файла и напредъка в текущия файл

И за 4, и за 5 използвах предоставената от Appjar възможност за генериране на периодична задача (тъй като appjar е програма за събития, това е начин за създаване на периодично събитие). функцията е:

#********************************************************** app.registerEvent (taskman)

p.setPollTime (1000)

Taskman за "диспечер на задачи", който е дефиниран в програмата, който управлява всички събития, които не са на екрана (край на възпроизвеждания файл, попълване на лентата за напредъка, изпращане на сърдечен ритъм до Nano, …)

След стартиране екранът изглежда така:

Образ
Образ

Ето програмата: (може да се отвори чрез Notepad ++ или Geany)

Стъпка 4: Малинова част: автоматично стартиране и добавяне на нови файлове

Ако погледнете програмата, можете да видите, че използвам някои bash файлове:

1) Start_jukebox:

Всъщност целта е да включите домашното кино и да преминете към входа D. IN (оптичен вход в домашното ми кино)

pi@raspitone:/bin $ cat start_jukebox#!/bin/bash

irsend SEND_ONCE джубокс KEY_POWER

сън 7

irsend SEND_ONCE джубокс KEY_AUX

сън 2

2) stop_jukebox:

За да изключите домашното кино

pi@raspitone:/bin $ cat stop_jukebox

#!/bin/bash

irsend SEND_ONCE джубокс KEY_POWER

Тези два bash файла се извикват от Python с командата os.system

За да стартирам скрипта на Python направих малък bash

pi@raspitone: ~ $ cat dem_jukebox.bash#!/bin/bash

cd /home /pi

python jukebox_gui.py

За автоматичното стартиране в режим GUI току-що промених файла за автоматично стартиране в/etc/xdg/lxsession/LXDE-pi

pi@raspitone:/etc/xdg/lxsession/LXDE-pi $ cat autostart@lxpanel --профил LXDE-pi

@pcmanfm --desktop --профил LXDE-pi

@xscreensaver -no -splash

@lxterminal --command = "dem_jukebox.bash"

point-rpi

Добавяне на нови mp3 файлове:

За да добавя нови файлове, предпочетох да направя малък специален скрипт на Python:

new_song_file.py

Първо ще обясня организацията на системните файлове:

Всички файлове са в /home /pi

mp3 файловете се записват в/home/pi/Music указател

Всеки изпълнител има своя собствена поддиректория, където се намират свързаните mp3 файлове

pi@raspitone: ~/Music/Mike_oldfield $ ls -общо 760516

-rwxr ----- 1 pi pi 2254923 30 юни 2017 A_New_Beginning.mp3

-rwxr ----- 1 пи пи 2691736 30 юни 2017 Пристигане.mp3

-rwxr ----- 1 pi pi 8383244 30 юни 2017 Възнесение.mp3

-rwxr ----- 1 pi pi 5410816 30 юни 2017 Blue_Night.mp3

-rwxr ----- 1 pi pi 13125199 30 юни 2017 Castaway_ (инструментален).mp3

-rwxr ----- 1 пи пи 12903583 юни 30 2017 Castaway.mp3

-rwxr ----- 1 пи пи 2969869 30 юни 2017 г. Celt.mp3

-rwxr ----- 1 pi pi 9047745 30 юни 2017 Chariots_ (Инструментален).mp3

-rwxr ----- 1 pi pi 9403263 30 юни 2017 Chariots.mp3

В директорията Документи можем да намерим изградения списък с файлове за възпроизвеждане.

pi@raspitone: ~/Documents $ cat list.txtFranz_Ferdinand/Michael_live.mp3

Franz_Ferdinand/evil_and_a_heathen.mp3

Franz_Ferdinand/Walk_Away_live.mp3

Franz_Ferdinand/love_and_destroy.mp3

Franz_Ferdinand/his_fffire.mp3

Franz_Ferdinand/eleanor_put_your_boots_on.mp3

Franz_Ferdinand/missing_you.mp3

Franz_Ferdinand/this_fire_ (playgroup_remix).mp3

Franz_Ferdinand/Jacqueline.mp3

Също така можем да намерим данни за плейлисти (но това е изградено от скрипта на Python)

Малкият скрипт на Python добавя новите песни, записани в Music, в list.txt, след като е форматирал заглавията във формат UNIX

Ето скрипта: (може да се отвори чрез Notepad ++ или Geany)

Стъпка 5: Управление на захранването чрез Arduino Nano

Тъй като исках да имам нещо лесно за стартиране, реших да го направя с малък nano:

Принципът:

Когато натиснете бутона за стартиране, всички устройства се захранват, нано стартира (1 или 2 секунди) и поема управлението на захранването, като задейства реле, което избягва контактите на бутоните.

След това Nano изчаква 35 секунди, за да получи сърдечния ритъм от Raspberry (означава, че процесът на стартиране е завършен и програмата за джубокс работи).

Докато nano получава сърдечния ритъм, той поддържа релето включено (часовник за наблюдение на куче)

Ако няма повече сърдечен ритъм (означава, че програмата за джубокс е спряна) Nano изчаква 20 секунди (за да е сигурен, че raspi е напълно спрян), за да освободи релето за захранване.

След това джубокса се изключва напълно

Добавих превключвател, за да активирам въвеждане на nano, за да посоча режима на поддръжка (използвам джубокса за управление на другите си raspi сървъри чрез ssh et vnc). След това Nano деактивира процеса на куче пазач

Забележка:

входът за сърдечния ритъм от Raspi трябва да бъде изтеглен (но 3.3V от Raspi се счита за високо ниво от Nano)

Може да се направи с NE555, но аз съм мързелив и винаги имам някакви нано в чекмеджето си !!!!

Ето кратката програма на C (може да се отвори с Notepad ++)

Стъпка 6: Окабеляване

Кабелите
Кабелите
Кабелите
Кабелите

За екрана:

HDMI кабел и USB кабел се използват на Raspi за захранване и задвижване на екрана.

За предния панел:

USB кабел също е свързан от Raspi, за да можете да качвате нови файлове или да правите резервни копия.

USB кабел е свързан от Nano за достъп до софтуера (за промени, ако е необходимо)

Включвам и безжичен клавиатурен ключ на малината, за да мога да извършвам поддръжка, без да използвам външния USB щепсел

Тъй като се използват Raspberry и Arduino, окабеляването е доста просто.

Всичко е разположено на лентова матрична платка.

От малинов 2 GPIO се използват:

Pin22 за IR LED

Пин 27 за сърдечен ритъм към Arduino

на Arduino

Пин 2 се използва като прекъсващ щифт за сърдечния ритъм от Raspi.

Щифтове 3 до 5 се използват за задвижване на светодиодите (Start, Wdt, Maintenance).

Пин 6 е за превключвателя за поддръжка.

Пин 7 се извежда към релейния щит.

Ето файла за пресукване:

Стъпка 7: Кутията

Кутията
Кутията

Няма да описвам много какво направих, тъй като зависи от усилвателя на мощността и от използваните високоговорители.

Като информация домашното кино се намира в долната част на кутията.

Точно над високоговорителите:

1 бас

2 средни високоговорителя, които промених, за да ги вмъкна в кутията.

На върха:

Предната панел с екрана, светодиодите, превключвателите и USB щекерите.

Дървото:

За високоговорителите, страничните панели отгоре и отдолу използвах 18 мм дървена дъска.

Предната страна е 10 мм шперплат с 40 мм винтове.

За да улесня окабеляването и поддръжката (ако е необходимо !!!) поставих електрическата верига на чекмедже зад предната панел

За да се избегне прегряване, на дъното на задната панел се прави голям отвор и поставям 5V вентилатор (8 см) на задната панел точно до електрическата верига.

Снимката по -горе е само за да даде представа.

Значи това е !!!!!!!!!

Благодаря, че ме прочетохте

И ще се видим следващия път за нови приключения

Препоръчано: