Оглавление:

Распитон: простой в использовании музыкальный автомат: 7 шагов
Распитон: простой в использовании музыкальный автомат: 7 шагов

Видео: Распитон: простой в использовании музыкальный автомат: 7 шагов

Видео: Распитон: простой в использовании музыкальный автомат: 7 шагов
Видео: Узнали песню? 😍 #piano 2024, Ноябрь
Anonim
Распитон: простой в использовании музыкальный автомат
Распитон: простой в использовании музыкальный автомат

Здравствуйте, мой следующий проект, как я обычно делал, не очень полезный:

Музыкальный автомат на основе Raspberry 3 B +

Знаю, что-то подобное можно легко сделать с помощью смартфона и динамика Bluetooth.

Но для моего проекта у меня было два обязательных условия:

Я хотел сделать что-то «винтажное».

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

Итак, спецификации были следующие:

Одна кнопка для запуска машины

Сенсорный экран (очень простой) для управления музыкой.

Одно касание экрана, чтобы остановить машину.

И чтобы звук был хороший ………

Запасы

Для этого я использовал:

1 Малина 3 млрд +

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

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

1 емкостный сенсорный экран 7 дюймов (у меня Makeasy для raspberry с входом HDMI и питанием от USB, но подойдет любой сенсорный экран HDMI)

1 блок питания 5V 5A

1 релейный экран

1 Arduino nano для управления процессом включения / выключения питания

1 ИК-светодиод для управления домашним кинотеатром (светодиод, управляемый транзистором 2N2222 NPN)

1 ИК-приемник (для части проекта, посвященной изучению ИК-кодов, я получаю свой со старого мультимедийного жесткого диска с помощью удаленной команды)

3 светодиода

1 переключатель для режима обслуживания

1 переключатель для работы на ардуино (во время загрузки ардуино сбрасывается)

некоторые разъемы JST и Dupont

И для коробки

Дерево и фанера (но я не буду подробно описывать изготовление коробки). просто хочу сказать, что относительно бумер внутри коробки, фанера 10 мм и дерево 18 мм являются обязательными, если вы не хотите, чтобы музыкальный автомат пересекал гостиную во время игры !!!!

Шаг 1: Описание части малины:

Распи должен управлять разными вещами:

1) команды в домашний кинотеатр (через ИК-пульт)

2) музыкальные файлы

3) сенсорный экран

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

Я начал с распространения Raspbian strech на SD-карте 16 Гб (поскольку мы будем читать только файлы с SD-карты, использование жесткого диска не обязательно). Я не буду тратить время на эту часть, так как в сети полно об этом …

Давайте посмотрим на различные части в следующих шагах….

Шаг 2: Коды ИК-пульта ДУ

Так как мне не удалось найти схему домашнего кинотеатра, я решил управлять им с помощью удаленных команд.

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

У меня были некоторые отличия, вероятно, из-за новой версии, поскольку инструкции довольно старые, файл hardware.conf больше не существует (по крайней мере, я его не нашел)

Также кажется, что транзистор, используемый в tuto, является транзистором PNP, со своей стороны я использовал 2N2222, который является NPN, но результат тот же. (За исключением кабеля !!!!!!!!)

Назначение контактов приведено в /boot/config.txt:

#autorisation de lirc le 08.07.2019dtoverlay = lirc-rpi, gpio_out_pin = 22, gpio_in_pin = 23

ИК-светодиод будет подключен к контакту 22 Raspi.

Одно важное замечание: при изучении кодов Raspi обязательно использовать ключевые слова, перечисленные в команде

irrecord --list-пространство имен

Вот файл, который я создал для своего музыкального автомата:

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 + # # Удаленное имя (как в файле конфигурации): jukebox

# Марка удаленного устройства, вещь, которую вы держите в руке: # Модель удаленного устройства:

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

# Есть ли на удаленном устройстве встроенное устройство захвата e. г., а

# USB-ключ?:

# Для USB-устройств в комплекте: usb vendor id, product id

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

# Тип управляемого устройства

# (Телевизор, видеомагнитофон, аудио, DVD, спутниковое, кабельное, HTPC,…):

# Устройства, управляемые этим пультом дистанционного управления:

начать удаленно

имя музыкальный автомат

биты 16

флаги SPACE_ENC | CONST_LENGTH

эп 30

100 человек

заголовок 4470 4496

один 542 1693

ноль 542 581

ptrail 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 команды для управления домашним кинотеатром.

Питание (ВКЛ / ВЫКЛ)

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 (диспетчер задач)

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

Для автоматического запуска в режиме графического интерфейса я просто изменил файл автозапуска в / etc / xdg / lxsession / LXDE-pi

pi @ raspitone: / etc / xdg / lxsession / LXDE-pi $ cat autostart @ lxpanel --profile LXDE-pi

@pcmanfm --desktop --profile LXDE-pi

@xscreensaver -no-splash

@lxterminal --command = "dem_jukebox.bash"

точка-rpi

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

Для добавления новых файлов я предпочел создать небольшой специальный скрипт Python:

new_song_file.py

Сначала я объясню организацию системных файлов:

Все файлы находятся в / home / pi

mp3 файлы хранятся в каталоге / home / pi / Music

У каждого исполнителя есть собственный подкаталог, в котором хранятся соответствующие mp3-файлы.

pi @ raspitone: ~ / Music / Mike_oldfield $ ls -ltotal 760516

-rwxr ----- 1 pi pi 2254923 30 июля 2017 г. A_New_Beginning.mp3

-rwxr ----- 1 pi pi 2691736 июн 30 2017 Arrival.mp3

-rwxr ----- 1 pi pi 8383244 июн 30 2017 Ascension.mp3

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

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

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

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

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

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

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

pi @ raspitone: ~ / Документы $ 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 получает сердцебиение, реле остается включенным (таймер Watch Dog).

Если больше нет сердцебиения (означает, что программа музыкального автомата остановлена) Nano ждет 20 секунд (чтобы убедиться, что raspi полностью остановлен), чтобы освободить реле питания.

Затем музыкальный автомат полностью отключается.

Я добавил переключатель для активации входа nano, чтобы указать режим обслуживания (я использую музыкальный автомат для управления другими моими серверами raspi через ssh et vnc). Затем Nano деактивирует процесс сторожевого пса.

Замечание:

вход для сердцебиения от Raspi должен быть понижен (но 3,3 В от Raspi рассматривается Nano как высокий уровень)

Это можно было бы сделать с NE555, но я ленив и всегда держу несколько нано в моем ящике !!!!

Вот короткая программа на C (может быть открыта с помощью Notepad ++)

Шаг 6: кабельная разводка

Кабельная проводка
Кабельная проводка
Кабельная проводка
Кабельная проводка

Для экрана:

Кабель HDMI и кабель USB используются на Raspi для питания и управления экраном.

Для передней панели:

USB-кабель также подключен к Raspi, чтобы иметь возможность загружать новые файлы или делать резервные копии.

USB-кабель подключен от Nano для доступа к софту (для модификации при необходимости)

Я также подключаю к Raspberry ключ беспроводной клавиатуры, чтобы иметь возможность производить обслуживание без использования внешнего USB-разъема.

Поскольку используются Raspberry и Arduino, разводка кабелей довольно проста.

Все расположено на плате стрип-матрицы.

От малины 2 GPIO используются:

Pin22 для ИК-светодиода

Пин 27 для сердцебиения к Arduino

на Ардуино

Контакт 2 используется как контакт прерывания для тактового сигнала от Распи.

Контакты с 3 по 5 используются для управления светодиодами (Start, Wdt, Maintenance).

Контакт 6 предназначен для переключателя обслуживания.

Вывод 7 выводится на экран реле.

Вот файл фритзинга:

Шаг 7: Коробка

Коробка
Коробка

Я не буду подробно описывать то, что я сделал, так как это зависит от усилителя мощности и используемых динамиков.

В качестве информации внизу коробки находится домашний кинотеатр.

Прямо над динамиками:

1 низкочастотный динамик

2 средних динамика, которые я модифицировал, чтобы вставить их в коробку.

На вершине:

Передняя панель с экраном, светодиодами, переключателями и разъемами USB.

Дерево:

Для динамиков, верхних и нижних боковых панелей я использовал деревянную доску толщиной 18 мм.

Лицевая сторона - фанера толщиной 10 мм с винтами 40 мм.

Чтобы облегчить прокладку кабелей и обслуживание (при необходимости !!!), я положил схему в ящик за передней панелью.

Чтобы избежать перегрева, в нижней части задней панели сделано большое отверстие, и я поместил вентилятор на 5 В (8 см) на заднюю панель рядом со схемой.

Картинка выше предназначена для того, чтобы дать общее представление.

Итак, это все !!!!!!!!!

Спасибо, что прочитали меня

И увидимся в следующий раз за новыми приключениями

Рекомендуемые: