Diy

Как сделать MIDI-контроллер с Arduino

Как сделать MIDI-контроллер с Arduino

Как музыкант, который собрал коллекцию музыкальных инструментов и шумовых коробок, скромный Arduino является идеальным инструментом для создания собственного MIDI-контроллера. В то время как Raspberry Pi, возможно, взял корону за Интернет вещей (IoT) проектов, простое Arduino Uno ( какие бывают типы Arduino? ) у этого проекта более чем достаточно сил.

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

Arduino-Midi-контроллер-Макетная

Что такое MIDI?

MIDI означает цифровой интерфейс музыкальных инструментов. Он описывает стандартный способ общения музыкальных устройств друг с другом. Если у вас есть электронная клавиатура, у вас, вероятно, есть MIDI-интерфейс. Хотя есть несколько технических деталей, связанных с реализацией MIDI, важно помнить, что MIDI это не аудио! MIDI-данные — это простой набор инструкций (одна инструкция называется «сообщением»), которые другое устройство может реализовать для создания разных звуков или параметров управления.

MIDI поддерживает 16 каналов. Это означает, что каждый кабель может поддерживать 16 различных устройств, независимо взаимодействующих друг с другом. Устройства подключаются с помощью 5-контактного кабеля DIN. DIN означает «Немецкий институт стандартизации» и представляет собой просто кабель с пятью контактами внутри разъема. USB часто используется вместо 5-контактного DIN, или может использоваться интерфейс USB-MIDI.

MIDI-кабель-мужчина

Изменение управления и изменение программы

Существует два основных типа сообщений MIDI: изменение управления и изменение программы.

Сообщения Control Change (CC) содержат номер контроллера и значение от 0 до 127. Сообщения CC часто используются для изменения таких настроек, как громкость или высота звука. Устройства, которые принимают MIDI, должны поставляться с руководством, объясняющим, какие каналы и сообщения настроены по умолчанию, и как их изменить (так называемое сопоставление MIDI).

Сообщения Program Change (ПК) проще, чем сообщения CC. Сообщения ПК состоят из одного номера и используются для изменения пресета или патча на устройстве. Сообщения на ПК иногда называют «Patch Change». Аналогично сообщениям CC, производители должны предоставить документ с изложением того, какие предварительные настройки изменены конкретным сообщением.

Что тебе понадобится

  • Arduino
  • 5-контактная розетка DIN
  • 2 х 220 Ом резисторы
  • 2 х 10 кОм резисторы
  • 2 х мгновенные выключатели
  • Монтажные провода
  • макетировать
  • MIDI кабель
  • MIDI-устройство или интерфейс USB

План строительства

Этот проект будет довольно простым. Конечно, вы можете добавить больше кнопок или оборудования, чтобы удовлетворить ваши потребности. Подойдет практически любой Arduino — для этого примера нужны только три контакта. Этот проект состоит из двух кнопок для управления программой, MIDI-порта для отправки данных и устройства для приема сообщений. Эта схема была построена на макете здесь, однако его можно перенести в коробку проекта и паяные разъемы для надежного решения.

Схема сборки

Arduino-Midi-контроллер замыкание

MIDI соединение

MIDI-Распиновка

Подключите ваш MIDI-разъем следующим образом:

  • MIDI-контакт 5 для передачи Arduino (TX) 1 через резистор 220 Ом
  • MIDI-контакт 4 для Arduino + 5V через резистор 220 Ом
  • MIDI контакт 2 для заземления Arduino

Кнопка подключения

Кнопки работают, изменяя сопротивление, которое «видит» Arduino. Вывод Arduino проходит через переключатель прямо на землю ( НИЗКИЙ ) через резистор 10 кОм (резистор «понижающий», гарантирующий, что значение остается низким). Когда кнопка нажата, значение, видимое схемой, изменяется на + 5 В без резистора ( ВЫСОКОЕ ). Arduino может обнаружить это изменение с помощью команды digitalRead (pin) . Подключите кнопки к контактам 6 и 7 на цифровом входе / выходе Arduino (I / O). Подключите обе кнопки:

  • Левая сторона кнопки до + 5В
  • Правая сторона кнопки к Arduino Ground через резистор 10 кОм
  • Правая сторона кнопки к выводу Arduino (6 или 7)

MIDI-тестирование

Теперь, когда все оборудование закончено, пришло время протестировать его. Вам понадобится интерфейс USB-MIDI (многие аудиоинтерфейсы могут сделать это) и кабель MIDI. MIDI-порт, подключенный к макету, отправляет данные, поэтому это вывод. Ваш компьютер получает данные, поэтому это ввод. В этом проекте используется превосходная библиотека Arduino MIDI v4.2 от Forty Seven Effects. После того, как вы установили библиотеку, вы можете включить ее в свой код, выбрав Sketch> Включить библиотеку> MIDI .

Вам также понадобится программа для мониторинга входящих MIDI-данных:

Подключите Arduino к на своем компьютере и загрузите следующий тестовый код (не забудьте выбрать правильную плату и порт в меню Инструменты> Плата и Инструменты> Меню портов ).

#include <midi.h> #include <midi_defs.h> #include <midi_message.h> #include <midi_namespace.h> #include <midi_settings.h> MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut void setup() { Serial.begin(31250); // setup serial for MIDI } void loop() { midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel delay(1000); // wait 1 second midiOut.sendProgramChange(12,1); // send a MIDI PC -- 12 = value, 1 = channel delay(1000); // wait 1 second } 

Этот код отправит сообщение CC, подождите 1 секунду, отправит сообщение на ПК, затем будет ждать 1 секунду в течение неопределенного времени. Если все работает правильно, вы должны увидеть сообщение на вашем MIDI мониторе.

Если ничего не происходит, не паникуйте! Попробуйте устранить неполадки:

  • Убедитесь, что все соединения правильные
  • Убедитесь, что MIDI-порт подключен правильно — на внешних краях должно быть 2 запасных контакта.
  • Дважды проверьте правильность схемы
  • Убедитесь, что схема подключена к интерфейсу USB-MIDI с помощью кабеля MIDI.
  • Убедитесь, что ваш MIDI-кабель подключен к входу вашего интерфейса USB-MIDI.
  • Убедитесь, что у Arduino есть сила
  • Установите правильный драйвер для вашего интерфейса USB-MIDI

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

Тестирование кнопок

Теперь пришло время проверить правильность работы кнопок. Загрузите следующий тестовый код. MIDI не нужно подключать для проверки этой части.

 const int buttonOne = 6; // assign button pin to variable const int buttonTwo = 7; // assign button pin to variable void setup() { Serial.begin(9600); // setup serial for text pinMode(buttonOne,INPUT); // setup button as input pinMode(buttonTwo,INPUT); // setup button as input } void loop() { if(digitalRead(buttonOne) == HIGH) { // check button state delay(10); // software de-bounce if(digitalRead(buttonOne) == HIGH) { // check button state again Serial.println("Button One Works!"); // log result delay(250); } } if(digitalRead(buttonTwo) == HIGH) { // check button state delay(10); // software de-bounce if(digitalRead(buttonTwo) == HIGH) { // check button state again Serial.println("Button Two Works!"); // log result delay(250); } } } 

Запустите этот код (но не отключайте USB-кабель) и откройте последовательный монитор ( вверху справа> Последовательный монитор ). Когда вы нажимаете кнопку, вы должны увидеть «Button One Works!» Или «Button Two Works!» В зависимости от нажатой кнопки.

Есть один важный момент, который стоит убрать из этого примера — де-отскок программного обеспечения. Это простая задержка в 10 миллисекунд (мс) между проверкой кнопки и повторной проверкой кнопки. Это повышает точность нажатия кнопки и помогает предотвратить шум, запускающий Arduino. Вам не нужно делать это, хотя это рекомендуется.

Создание контроллера

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

В этом примере будет отправлено отдельное сообщение CC для каждой нажатой кнопки. Я использую это для управления Ableton Live 9.6 на OS X. Код похож на оба тестовых примера выше.

 #include <MIDI.h> #include <midi_Defs.h> #include <midi_Message.h> #include <midi_Namespace.h> #include <midi_Settings.h> const int buttonOne = 6; // assign button pin to variable const int buttonTwo = 7; // assign button pin to variable MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut void setup() { pinMode(buttonOne,INPUT); // setup button as input pinMode(buttonTwo,INPUT); // setup button as input Serial.begin(31250); // setup MIDI output } void loop() { if(digitalRead(buttonOne) == HIGH) { // check button state delay(10); // software de-bounce if(digitalRead(buttonOne) == HIGH) { // check button state again midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel delay(250); } } if(digitalRead(buttonTwo) == HIGH) { // check button state delay(10); // software de-bounce if(digitalRead(buttonTwo) == HIGH) { // check button state again midiOut.sendControlChange(42,127,1); // send a MIDI CC -- 42 = note, 127 = velocity, 1 = channel delay(250); } } } 

Примечание. Вы не сможете использовать Serial.println () с выходом MIDI.
Если вы хотите отправить сообщение ПК вместо CC, просто замените:

 midiOut.sendControlChange(42,127,1); 

С:

 midiOut.sendProgramChange(value, channel); 

В бою

Ниже приведена демонстрация в качестве контроллера для Ableton Live ( Лучшее программное обеспечение для DJ на любой бюджет обеспечение для DJ на любой бюджет ). В верхнем правом углу отображаются аудиометры, а в верхнем среднем — входящие миди-сообщения (через MIDI Monitor в OS X)

Вы сделали MIDI-контроллер?

Существует много практических применений для пользовательского MIDI-контроллера. Вы можете построить огромный блок с ножным управлением или элегантный студийный контроллер. И если вы заинтересованы в покупке одного из них, вот лучшие USB MIDI-контроллеры вы можете купить.

Изображение предоставлено Китом Джентри через Shutterstock.com

Похожие посты
Diy

Вещи, которые вы должны иметь в виду, прежде чем брать ноутбук или смартфон в службу технической поддержки

Diy

Как использовать Arduino для съемки красивой скоростной фотографии

DiyLinux

Пять великолепных расширений Raspberry Pi, которые делают его еще более полезным

Diy

Первые шаги с Arduino: пристальный взгляд на печатную плату и структуру программы