Миди контроллер своими руками

Добавил пользователь Валентин П.
Обновлено: 19.09.2024

General Dead

Well-Known Member

Вообщем как-то спаял я на коленке MIDI контроллер на 8 крутилок, разработка моя собственная, если кого интересует могу поделится.
Схема состоит из микроконтроллера Atmel ATMEGA16 и буферного элемента на нашей 155ла3, девайс можно подключать к Game Port напрямую, есть нормальный MIDI Out. Схема паяется часа 2 на макетной плате, программатор простой -пара резисторов + LPT порт.
Есть также схема простой MIDI клавиатуры: 5 октав, пассивная ( небыло нормальной механики чтоб сделать Velocity), транспозиция на октаву +-. Сейчас работаю на д контроллером с LCD индикатором (16х2), 64 кнопками и 64 или 32 крутилки,фейдеры, 99 пресетов (этот проект заморожен, возможно я к нему и вернусь)
При программировании микроконтроллера в его Fuse сбросить все галочки кроме СКОРТ, это установит его в режим работы от кварцевого генератора.

Вот схема , прошивка и исходники на ассемблере для простого МИДИ контроллера на 8 крутилок.

Большинство статей в интернете по изготовлению MIDI клавиатур, контроллеров, пультов и т.п. основываются на использовании MIDI-разъемов, подключение которых к современному компьютеру может оказаться проблематично. На старых звуковых картах был Game-порт, к которому можно было подключить джойстик или MIDI-устройство:

Шнур MIDI

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

В данной статье я хочу показать, как можно на недорогом контроллере Arduino изготовить простейшую MIDI-клавиатуру с USB-подключением на 8 клавиш и колесом прокрутки.

Итак, я использовал:
контроллер Arduino UNO
8 шт. кнопок
8 резисторов 10 кОм
поворотный энкодер 25LB22-Q
макетная плата и перемычки

Схема подключения следующая:

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

Для подключения я использовал самый простейший вариант: 1 клавиша - 1 вход. Однако при большем числе клавиш, различных контролеров и т.п. входов может не хватить, поэтому придётся задействовать считывание данных либо через аналоговые входы (путем добавления резисторов разного номинала), либо путем мультиплексирования. Однако, если повесить несколько клавиш на аналоговый вход, то могут возникнуть проблемы со считыванием состояния, когда нажаты одновременно несколько клавиш. Поэтому, на мой взгляд мультиплексирование более приемлемый вариант.

Фото подключения

Программное обеспечение Arduino

Структуру MIDI-данных я не буду рассматривать, т.к. это описано в статье: передача MIDI данных от Arduino в компьютер

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

В данном проекте энкодер используется как колесо прокрутки для изменения модуляции (modulation wheel), однако его можно переназначить и для других целей (pitch bend и т.п.).

Два крайних байта хранят 14-битное значение pitch которое может лежать в пределах 0. 16383 (0x3FFF). Середина находится 0x2000, все что выше этого значения - происходить изменение высоты тона вверх, если ниже, то высота тона изменяется вниз.
В коде программы я закомментировал строчки если вы вдруг вместо modulation захотите использовать Pitch Bend (середина значения, разложение на 2 байта и др.)

Код определения нажатия клавиши включает в себя три состояния: клавиша нажата, клавиша удерживается и клавиша отпущена. Сделано это для того, чтобы можно было передавать значение длительности нажатия клавиши. Если это не нужно, то можно оставить только одно состояние (нажатие клавиши), программа в данном случае существенно упростится.
Для обработки состояния каждой из восьми клавиш, используется следующий код:

Обратите внимание, что если будет использоваться pitch bend, то encoder0Pos нужно будет возвращать не в ноль, а в 0x2000 (а лучше задать define в начале программы).

Итак, схема собрана, скетч в контроллер залит, запускаем Serial Monitor, меняем скорость передачи на 115200 и нажимая клавиши или крутя энкодер смотрим значения.
Если все нормально, то переходим к следующей части. Сразу скажу, что для меня она оказалось самой проблемной, и если бы я не нашел виртуального USB -> Midi конвертора, то этой статьи не было бы.

Программное обеспечение ПК (Windows)

Для того, чтобы принимать данные через USB виртуальный COM-порт от Arduino и передавать их в какую-либо программу MIDI-секвенсор, необходима специальная утилита: Serial MIDI Converter V2D (оф. сайт)

Программа мультиплатформенная, у меня заработала под Windows 7 x64, правда с некоторыми тормозами.

Запускаем ее, выбираем порт USB, скорость передачи (115200) и MIDI Input Port и MIDI Output Port.

Serial MIDI Converter

Для визуального отображения поступающих MIDI данных с порта мне очень пригодилась программа MIDI-OX (оф. сайт):

MIDI-OX

Обратите внимание, что в настройках MIDI Devices необходимо выставить порт MIDI Input.

Теперь, нажимая клавиши нот или вращая колесо, в Monitor-Output вы увидите MIDI-данные.

Т.о. при помощи программно-аппаратных средств мы получили возможность сделать на контроллере Arduino простейшую MIDI-клавиатуру с передачей данных в компьютер, для последующей их обработки, например в Cubase, в. т.ч. в реальном времени.
На основе данного проекта можно сделать DJ-пульт, полноценную MIDI-клавиатуру и т.п.

Ниже вы можете скачать скетч INO, Serial MIDI Converter V2D, MIDI-OX и MIDI Yoke

Колтыков А.В. Опубликована: 2012 г. 0 0


Вознаградить Я собрал 0 0


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

Мы решили написать для нашей шарманки два варианта работы:

Подключать её к компьютеру в виде виртуальной клавиатуры и использовать в качестве синтезатора различные приложения.

Что нам понадобится?


Как собрать?


Вставьте MIDI-разъём в Breadboard Mini.

Соедините MIDI-разъём с Troyka Shield. Обратите внимание на распиновку MIDI-разъёма. Питание 5V соедините через резистор 200 Ом к пину 4 MIDI-разъёма, землю GND к пину 2 MIDI-разъёма и цифровой пин 1 к пину 5 MIDI-разъёма.


Возьмите 8 датчиков линии и закрепите их в один ряд на плоской поверхности. Для этого удобно использовать деревянную линейку или картон. Подключите датчики через стандартные 3-проводные шлейфы к Troyka Shield по порядку, с 4 по 11 пин.


Пришло время нарисовать мелодию, которую будет проигрывать наша шарманка. Для удобства мы нарисуем табличку на листе бумаги. В табличке будет 8 столбцов. Каждый столбец соответствует определённой ноте. Количество строк зависит от длительности музыкальной композиции, мы нарисовали 32 строчки. В итоге наша мелодия будет иметь 8 различных нот и длиться 32 музыкальных такта. Нарисуйте мелодию, которую будет играть шарманка, закрашивая чёрным маркером нужные клетки. Когда чёрная клетка будет проходить под датчиком линии, зазвучит соответствующая нота. Вы можете сами нарисовать табличку или же скачать у нас по приведенной ссылке midiroller.pdf


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


После этого поместите всю эту конструкцию в корпус. Важная деталь, что сенсоры датчиков должны быть расположены на расстоянии 5–10 мм от барабана.

Алгоритм

В этом проекте мы используем Arduino Leonardo, потому что она распознается компьютером как HID-устройство и может притворяться компьютерной клавиатурой. Если у вас другая платформа, например Arduino UNO, вы можете использовать второй вариант с подключением к MIDI-синтезатору, поменяв в скетче Serial1 на Serial .

Для виртуальной клавиатуры

Каждые 10 миллисекунд опрашиваем по очереди каждый датчик на предмет изменения, если датчик изменил своё состояние и увидел чёрное, отправляем подсоединенному компьютеру сигнал о нажатии клавиши, которой соответствует данный датчик.

Для MIDI-синтезаторов

В данной статье мы рассмотрим простейший адаптер USB в MIDI на основе платы Arduino Micro или Arduino Leonardo, опционально с возможностью фильтрации данных MIDI.

Внешний адаптера USB в MIDI на основе платы Arduino
Необходимые компоненты

  1. Плата Arduino Micro (купить на AliExpress) или Arduino Leonardo.
  2. Оптопара 6n137 (купить на AliExpress).
  3. Переключатель (коммутационный диод) 1N4148 (купить на AliExpress).
  4. Конденсатор 100 нФ (купить на AliExpress).
  5. Резисторы 220 Ом и 10 кОм (купить на AliExpress).
  6. Резистор для сквозного монтажа (Through Hole Resistor) 470 Ом.
  7. Светодиод (купить на AliExpress).
  8. Держатель для светодиода.
  9. DIN Audio / Video Connector, 5 Contacts (аудио/видео коннектор) – 2 шт.
  10. Пластмассовый корпус.
  11. Печатная плата.

Общие принципы работы проекта

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

Автор этого проекта потратил достаточно много времени на поиск в сети Интернет адаптера USB в MIDI на основе платы Arduino, но проекты, которые он нашел, не удовлетворили его (по качеству), поэтому он решил сделать собственный адаптер подобного типа.

Первоначально проект рассматриваемого в данной статье адаптера был сконструирован на основе платы Arduino Leonardo, а после того, как автор убедился в его работе, была изготовлена его версия на основе платы Arduino Micro. Обе этих платы построены на основе микроконтроллера ATmega32u4, который, по сути, сам является преобразователем интерфейсов USB в MIDI.

Вид внутренностей адаптера USB в MIDI на основе платы Arduino

Внешний вид корпуса адаптера

В проекте используется оптопара и несколько резисторов чтобы создать два полностью изолированных контура тока. В качестве оптопары в проекте использована 6n137 – она достаточно быстрая и широко распространенная. Как показано ниже на приведенной схеме, у коннектор MIDI OUT два контакта замкнуты на землю – это стандартно для MIDI.

Непосредственно для решения задач преобразования интерфейсов автор проекта использовал библиотеку Control Surface – по его мнению это лучшая библиотека для решения подобных задач, которая отрабатывает все (даже самые сложные) аспекты протокола MIDI.

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

Также вы можете попробовать использовать другие библиотеки для работы с MIDI или даже написать свой собственный код для этого – представленная в этом проекте схема устройства должна корректно работать с любыми библиотеками, поддерживающими преобразование USB в MIDI и Serial MIDI.

Схема проекта

Схема адаптера USB в MIDI на основе платы Arduino Micro представлена на следующем рисунке.

Схема адаптера USB в MIDI на основе платы Arduino Micro

После окончательной сборки у автора получилась конструкция следующего вида:

Фото 2/2 MIDI контроллер, Простой LaunchPad на аркадных кнопках и STM32F042

MIDI ( Musical Instrument Digital Interface — цифровой интерфейс музыкальных инструментов) — стандарт цифровой звукозаписи на формат обмена данными между электронными музыкальными инструментами.

В настоящее время популярны несколько видов MIDI контроллеров. Самые популярные это фортепианные MIDI клавиатуры.
За ними следуют MIDI контроллеры для диджеинга. Вы собираете на своем ноутбуки треки в цифровом формате. Устанавливаете специальную программу для микширования. Мы при испытаниях нашего контроллера устанавливали NI Traktor. (Бесплатная версия трактора имеет полный функционал, но ограничена по времени работы. Через 30 минут она схлопнется. Но вы тут же её перезапускайте и она опять в полном функционале.) Подключаете к ноутбуку midi-контроллер, и настраиваете программу для работы с ним. Затем, с помощью кнопок, крутилок и фейдеров на вашем midi-контроллере вы двигаете виртуальные элементы в установленной программе.
Секвенсорные MIDI контроллеры или как их ещё называют DAW-контроллеры. Контроллеры, для работы с секвенсором (Синтезатором. Самый известный программный секвенсор сейчас - Ableton Live) - ускоряют процесс записи треков. К Ableton Live мы тоже подключали наш контроллер и управляли фейдерами, крутилками, клипами и другими параметрами DAW. DAW это программный секвенсор.
Падовые MIDI контроллеры. Эти контроллеры сейчас очень популярны, с их помощью можно создавать ритмы или грувы интуитивно понятным способом.

Мы незнаем, к какому виду вы отнесёте MIDI контроллер, который предлагается собрать, но работает он со всеми программами по стандартному интерфейсу MIDI. При подключении к порту USB вашего компьютера он определится как LaunchPad. MIDI контроллер имеет 12 кнопок, два фейдера, пять крутилок и один переключатель. Построить его можно на микроконтроллерном модуле RDC2-0032 это управляющий элемент для проектов цифровой обработки звука на микроконтроллере STM32F042.

RDC2-0032

Кнопки выбрали Аркадные для игровых автоматов. Только они легко позволяют делать очень быстрые нажатия, для барабанной дроби, например.

Схема MIDI контроллера

Схема

Файл с прошивкой и инструкцией по прошивке найдёте в разделе Документы. Никакие программаторы не нужны STM32F042 прошивается через USB.

В разделе документы две прошивки первая – “GamePad dfu” для MIDI контроллера с переключателем SW1, который устанавливает режим серийного нажатия кнопок. Т.е. при замыкании AIN1 на землю кнопки начинают работать так: нажатая кнопка выдает серию нажатий в MIDI порт. Это сделано для использования контроллера в качестве GamePad для игр. Если же AIN1 не на земле, то кнопки работают как обычные в любом MIDI контроллере – нажимается один сигнал в порт, отжимается второй сигнал в MIDI порт.

Вторая прошивка “LaunchPad_12DIN_8AIN_LED_D” это стандартный MIDI контроллер. Но в этом случае нужно AIN1 подключить к переменному резистору как AIN2…4. В этом случае будет у вас ещё один фейдер.

Также в разделе документы есть 3D модель для корпуса сделанная в SketchUp и файлы midi_stl. Можете распечатать корпус на 3D-принтере. А можно этот же корпус вырезать на фрезерном станке – ищите файлы MIDI_dxf. Или ножом из вспененного ПВХ файлы "midi-Edge.Cuts". Смотрите ролик про корпус.

3D модель

Подключайте MIDI-контроллер к любому DAW и делайте электронную музыку!

Это открытый проект! Лицензия, под которой он распространяется – Creative Commons - Attribution - Share Alike license.

Читайте также: