Как сделать виниловый проигрыватель своими руками

Цель данного руководства — продемонстрировать, как использовать MP3-модуль в сочетании с платформой Arduino. Мы будем управлять воспроизведением музыки с помощью кнопок, подключенных к плате Arduino, которая, в свою очередь, будет передавать команды модулю через интерфейс UART.

Проигрыватель

Как сделать

Команда

Проигрыватель в Майнкрафте

В Minecraft существует возможность воспроизведения музыкальных пластинок, которые можно найти по всей карте. В игре доступны 12 различных пластинок с уникальными мелодиями. Их можно найти в сокровищницах, на затонувших кораблях или получить в награду за убийство скелетом крипера. Чтобы послушать музыку, игроку нужно щелкнуть правой кнопкой мыши на проигрывателе, держа пластинку в руке. Если же кликнуть еще раз, пластинка остановится и выпадет из проигрывателя.

Использование проигрывателя в качестве топлива

Существует также возможность использовать проигрыватель как топливо для печи. Однако стоит отметить, что всего один проигрыватель сможет полностью обжарить только один блок. Поэтому, если вы играете в Minecraft, рекомендуется использовать более эффективные источники топлива.

  • Синонимы: Проигрыватель пластинок / Музыкальный проигрыватель / Проигрыватель музыки / Jukebox
  • Версии Minecraft: 11 / 10.5.1 / 1.22 / 1.21 / 1.20 / 1.19.1 / 1.19
  • COMMAND: jukebox

Как сделать проигрыватель

Существует несколько рецептов для создания проигрывателя в Minecraft. Ниже представлен список всех рецептов, включая изображения с ингредиентами и пошаговые инструкции по созданию проигрывателя в игре Minecraft.

Как сделать проигрыватель в Майнкрафт

Дубовые доски
Алмаз
Верстак

Создание проигрывателя в Майнкрафт

Как создать проигрыватель в Minecraft из дубовых досок и алмаза?

Это займет всего одну минуту.

Верстак в Майнкрафта

Дубовые доски в Майнкрафт Алмаз в Майнкрафт

Разместите ингредиенты (дубовые доски и алмаз) в соответствии с рисунком, представленным выше.

Проигрыватель в Майнкрафт

Кликните правой кнопкой мыши по слоту справа, чтобы забрать проигрыватель.

Как сделать проигрыватель в Майнкрафт

Мангровые доски
Алмаз
Верстак

Как сделать проигрыватель в Майнкрафт

Еловые доски
Алмаз
Верстак

Как сделать проигрыватель в Майнкрафт

Берёзовые доски
Алмаз
Верстак

На сайте имеется одно видео, в котором представлен проигрыватель в Minecraft. Ниже можно ознакомиться с этим видео, чтобы лучше понять, как выглядит проигрыватель в игре.

Также на сайте размещено несколько скриншотов, где показан проигрыватель в Minecraft. Ниже можно найти эти скриншоты для более детального ознакомления с проигрывателем в игре.

Как сделать проигрыватель в Майнкрафт | Screenshot 1

Проигрыватель. Как создать проигрыватель в Minecraft | Screenshot 1

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

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

  • мотор с нитью (линейный двигатель с большим количеством магнитных полюсов);
  • фанера (2 листа) различной толщины — 4 и 10 см;
  • тонарм;
  • клапан с направляющей деталью;
  • шарик из стали диаметром 5/16 дюйма;
  • болты;
  • жидкие гвозди;
  • карандаш;
  • циркуль.

Схема изготовления выглядит следующим образом. В первую очередь, необходимо разобраться с фанерой, которая будет служить основой конструкции. Одна часть фанеры предназначена для поддержки мотора, а вторая — для вертушки и тонарма (звукоснимателя). Размеры первой части подставки должны составлять 20х30х10 см, а второй — 30х30х10 см. На днищах подставок необходимо сделать ножки — небольшие цилиндрические элементы, которые можно изготовить из дерева.

В подставке для вертушки следует просверлить отверстие, расположенное на расстоянии 117 мм от одного края и 33 мм от ближайшего края. Это отверстие должно быть сквозным, достаточно глубоким, чтобы в него вошла направляющая деталь клапана. Поверхность отверстия необходимо обработать наждачной бумагой, чтобы избежать острых краев. После обработки отверстия следует приклеить направляющую деталь жидкими гвоздями, после чего аккуратно поместить стальной шарик в отверстие.

Следующим этапом будет создание плинта-вертушки диаметром 30 см. Для этого используем оставшийся лист фанеры толщиной 4 см. Вертушка обязательно должна быть идеально круглой, поэтому необходимо отметить её центр с помощью карандаша. Далее клапан широким концом прикрепляется к вертушке с помощью восьми болтов. После того как подготовительные работы завершены, вертушка может быть прикреплена к основанию устройства.

Теперь остается соединить основание с вертушкой и звукоснимателем, а последнюю — с мотором. Двигатель и вертушка соединяются с помощью нити, которая должна проходить через центр вертушки. Далее следует соединить звукосниматель с усилителем.

Полезные советы

Вне зависимости от того, какой вариант винилового проигрывателя вы решили реализовать, важно знать, как настроить устройство.

Читать еще:  Как выбрать мультиварку. Как выбрать мультиварку?

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

Мат. Изначально мат был разработан для минимизации шумов, вызываемых мотором, при соприкосновении иглы и пластинки. У некоторых моделей проигрывателей наличие мата вовсе отсутствует. Сегодня мат служит для корректировки звукового сопровождения, а также для предотвращения проскальзывания пластинки по диску.

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

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

К сожалению, инструкции не всегда предоставлены на русском языке.

С помощью тестовых пластинок можно определить:

  • правильность поканального подключения;
  • соответствие фаз;
  • настройки резонансной частоты конкретного тракта;
  • настройки антискейтинга.

Компоненты

В качестве основы устройства был выбран недорогой MP3-кодек VS1011E. На самом деле, было бы разумнее выбрать более продвинутые модели VS1053 или VS1063, либо обновленную версию VS1011 — VS1003 (с более высокой тактовой частотой), однако все они имеют схожую стоимость.

Тем не менее, я не углублялся в эти детали и остановился на первом попавшемся чипе. В качестве контроллера использовал STM32F103C8T6, чтобы создать начальный макет, используя готовую плату Blue Pill, а затем собрать всё на более серьезном уровне. Для отображения информации я выбрал TFT-дисплей с разрешением 128 на 160 (ST7735), для которого у меня уже были готовые библиотеки.

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

Макет

Прежде чем переходить к написанию кода, имеет смысл собрать макет устройства (я всегда предпочитаю отлаживать программы на реальном оборудовании). Для этого используем плату Blue Pill и подключаем к ней модуль дисплея с картодержателем. Способ пайки поможет избежать проблем с дребезгом соединений, что может привести к множеству неприятностей на этапе отладки.

Читать еще:  Как выбрать кронштейн для телевизора. Как подобрать кронштейн для телевизора на стену?

Тестовый модуль для VS1011 я собрал на макетной плате, используя переходник с QNF48 на DIP согласно схеме, приведенной в даташите. На самом деле, нет особой необходимости заморачиваться с разработкой своего модуля — можно приобрести уже готовый, но у меня его не оказалось, и я не хотел ждать.

В результате я собрал всё это за несколько часов и был готов приступить к написанию кода.

Схема плеера Макет устройства Макетная плата кодека VS1011 Макетная плата кодека VS1011 Дисплей макета с ранним вариантом интерфейса

Первая доработка

Автор изначального проекта передает 8 бит данных на шину кода via сдвиговый регистр. Однако для корректной передачи данных в регистры потребуется также изменить состояние сигналов BC1, BDIR и инициализировать чип с помощью сигнала Reset перед воспроизведением каждого файла. Автор подключил эти сигналы к отдельным выводам Arduino. Вместо этого, можно подключить второй сдвиговый регистр 74HC595 каскадно, что позволит управлять всем через всего лишь три вывода.

Каскадное подключение регистров осуществляется следующим образом:

Таким образом, при передаче не 8, а 16 бит данных мы можем передавать сигналы на 8 контактов DA0..DA7 шины данных, а также контакты Reset, BC1 и BDIR чипа AY. Контакты первого регистра подключены к пинам Arduino 4, 6, 7 (в последующих упоминается именно эта нумерация). Для передачи данных в сдвиговые регистры добавлены переменные byte outLo и outHi, где хранится текущее состояние данных для передачи в чип AY: переменная outLo соответствует битам шины данных — сигналам DA0..DA7, а три младших бита переменной outHi отвечают сигналам Reset, BC1 и BDIR. При каждом изменении хотя бы одного бита в сдвиговые регистры передаются оба байта с использованием процедуры out_595_word, которую я вынес в отдельную функцию:

Эта функция вызывается каждый раз, когда необходимо изменить состояние AY после изменения значений в переменных outLo или outHi. Например, сброс состояния AY производится следующим образом:

#define BIT_AY_RESET 0 
#define BIT_AY_BC1 1 
#define BIT_AY_BDIR 2 

void resetAY() { 
    volumeA = volumeB = volumeC = 0; 
    globalVolume = 1; 
    bitClear(outHi, BIT_AY_BC1); // сброс BC1 
    bitClear(outHi, BIT_AY_BDIR); // сброс BDIR 
    bitClear(outHi, BIT_AY_RESET); // сброс AY 
    sendAY(); 
    delay(100); 
    bitSet(outHi, BIT_AY_RESET); // сброс состояния AY 
    sendAY(); 
    delay(100); 
    for (int i = 0; i < 10; i++) { 
        // код для дальнейшей обработки
    } 
}

Переменные volumeA, volumeB и volumeC используются для отображения индикаторов громкости, а переменная globalVolume служит для плавного затухания звука в конце трека в режиме демонстрации.

Для записи данных в регистр AY предоставлена процедура writeAY(byte port, byte data), в которой передача информации в AY осуществляется аналогично — выставляются или сбрасываются нужные биты в переменных outLo и outHi, после чего вызывается функция sendAY для передачи данных в чип через сдвиговые регистры.

На этапе инициализации (в функции setup) необходимо подготовить регистр и пины Arduino, к которым он подключен:

static const byte OUT_SHIFT_DATA_PIN = 7; // -> pin 14 of 74HC595 
static const byte OUT_SHIFT_LATCH_PIN = 6; // -> pin 12 of 74HC595 
static const byte OUT_SHIFT_CLOCK_PIN = 4; // -> pin 11 of 74HC595 

void setupShiftOut() {
    // код инициализации
}

Вторая доработка

Чтобы принимать данные с более чем одной кнопки на плате Arduino, можно применить входной сдвиговый регистр 74HC165. В отличие от схемы с резисторами, это решение обеспечит обработку одновременно нажатых кнопок. Пока что такая функциональность не используется, но в будущем это позволит расширить возможности клавиатуры, добавив поддержку многокнопочного ввода. При необходимости можно подключить несколько таких регистров каскадом и обрабатывать нажатия более 8 кнопок, не увеличивая число используемых пинов Arduino.

Читать еще:  Как подключить планшет к телевизору - 9 простых способов

Контакты регистра подключены к пинам Arduino 8, 9, A0. Процедура in_165_byte читает 8 бит из сдвигового регистра, к которому подключены кнопки, в переменную byte inBtn. Сброс бита в 0 в переменной указывает, что соответствующая кнопка была нажата.

Для обнаружения нажатий кнопок был добавлен класс CBtn, в котором также предусмотрена защита от дребезга контактов. В конструктор этого класса передается указатель на переменную inBtn и номер бита, изменение которого отслеживается экземпляром этого класса. После того как вызвана функция чтения данных из входного регистра, метод Pressed для каждого экземпляра класса CBtn возвращает true, если соответствующая кнопка была нажата.

В функции инициализации setup также необходимо подготовить регистр и его подключение к пинам Arduino:

static const byte IN_SHIFT_LATCH_PIN = 8; // -> pin 1 of 74HC165 
static const byte IN_SHIFT_CLOCK_PIN = 9; // -> pin 2 of 74HC165 
static const byte IN_SHIFT_DATA_PIN = A0; // -> pin 9 of 74HC165 

void setupShiftIn() {
    // код инициализации
}

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

Например, чтобы установить высокий уровень на пине 6, нужно задать значение 1 в бите 7 порта D.

Схема подключения DFPlayer Mini к Arduino

Подключите элементы согласно схеме, созданной с помощью программы Fritzing (полный обзор программы можно найти по ссылке).

Соединение между платой Arduino и модулем DFPlayer Mini довольно простое, так как нам нужно соединить не только выводы питания VCC и GND, но и еще кое-что.

MP3 на базе DFPlayer Mini и Arduino

Обратите внимание, что между выводом Rx модуля и выводом платы Arduino добавлен резистор 1 кОм для снижения шумов. Однако в вашем конкретном случае его использование может быть и не необходимо, если не предполагается помех на линии Rx.

Ниже представлена наглядная таблица с порядком соединения выводов:

DFPlayer Mini Arduino
Rx D11
Tx D10
VCC 5 В
Gnd Gnd

Код для управления DFPlayer Mini

Чтобы отправлять команды от платы Arduino к модулю DFPlayer Mini, мы воспользуемся библиотекой платформы Arduino, которая программно реализует последовательный интерфейс. Для отправки команд мы могли бы использовать выводы аппаратного последовательного интерфейса (0 и 1), которые также предназначены для общения с компьютером.

Однако, если эти линии подключены к другому устройству помимо компьютера, это может создать помехи при загрузке кода в плату. Поэтому, чтобы избежать проблем, мы будем использовать библиотеку программного последовательного интерфейса Software Serial с выводами 10 и 11.

Код для этого проекта достаточно прост. Хотя для модуля DFPlayer Mini имеется библиотека, содержащая различные функции для управления воспроизведением MP3, мы напишем собственные функции, чтобы продемонстрировать, как на самом деле функционирует этот модуль.

Как обычно, первым делом мы подключаем библиотеки, которые потребуется использовать, а именно библиотеку программного последовательного интерфейса, создавая её объект и определяя выводы для линий Rx и Tx этого интерфейса (варианты 10 и 11 соответственно).

Оцените статью