Гид по технологиям

Создание простого MIDI‑контроллера на Arduino

7 min read Аудио Обновлено 02 Jan 2026
MIDI‑контроллер на Arduino — простой проект
MIDI‑контроллер на Arduino — простой проект

MIDI-контроллер на макетной плате с Arduino

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

Если вы впервые работаете с Arduino — не переживайте: прочитайте полный гайд для начинающих по Arduino перед началом.

Макетная плата Arduino для MIDI-контроллера

Что такое MIDI?

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

Ключевые факты:

  • MIDI поддерживает 16 каналов на один кабель — то есть по одному кабелю могут работать до 16 логических устройств.
  • Большинство сообщений используют диапазон значений 0–127 (7‑бит).
  • Стандартная скорость передачи для классического MIDI через DIN‑кабель — 31 250 бод (31250).

MIDI‑устройства обычно подключаются 5‑контактным DIN‑кабелем. В современных системах часто используется USB‑MIDI или USB‑интерфейсы.

MIDI-кабель, штекер 5-pin

Типы сообщений: Control Change и Program Change

  • Control Change (CC) — содержит номер контроллера и значение 0–127. Часто используется для громкости, панорамы, параметров эффектов.
  • Program Change (PC) — содержит одно число и переключает пресет/патч на устройстве.

Производители обычно поставляют документацию с описанием преднастроек и MIDI‑маппинга устройства.

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

  • Arduino (подойдёт Uno, Nano; для USB‑MIDI лучше Leonardo/Pro Micro с нативным USB)
  • Гнездо 5‑pin DIN (female)
  • 2 × резистор 220 Ом
  • 2 × резистор 10 kΩ (пулл‑даун)
  • 2 × моментальные кнопки (momentary switches)
  • Провода для соединений (hook‑up wires)
  • Макетная плата (breadboard)
  • MIDI‑кабель
  • MIDI‑устройство или USB‑MIDI интерфейс

Примечание: если вы планируете финальный корпус — подготовьте клеммные разъёмы, пайку и корпус.

План сборки

Проект простой и легко расширяется: достаточно трёх пинов Arduino для примера. Схема включает два переключателя для управления сообщениями Program/Control, MIDI‑порт для передачи данных и принимающее устройство (компьютер/синтезатор). На этапе прототипа удобно использовать макетную плату; затем можно перенести схему в корпус и сделать пайку.

Сборка схемы

Схема подключения MIDI-контроллера на Arduino

Подключение MIDI

Распиновка MIDI-разъёма

Подключите MIDI‑разъём так:

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

Это простая и часто используемая схема для MIDI‑выхода (MIDI OUT). Для MIDI‑входа требуются дополнительные элементы (оптопара или соответствующая развязка).

Подключение кнопок

Кнопки работают как переключатели, меняющие логический уровень на входе Arduino. В этой схеме используется «pull‑down» резистор 10 kΩ, который держит вход в LOW, пока кнопка не замкнёт цепь на +5 В.

Подключите так:

  • Левая сторона кнопки -> +5 В
  • Правая сторона кнопки -> Arduino GND через резистор 10 kΩ
  • Правая сторона кнопки -> цифровой пин Arduino (6 или 7)

Когда кнопка нажата, вход получает HIGH (+5 В), Arduino это фиксирует через digitalRead(pin).

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

Когда аппаратная часть собрана, проверьте передачу MIDI. Вам нужен USB‑MIDI интерфейс или аудиоинтерфейс с поддержкой MIDI и программа‑монитор:

  • MIDI Monitor (macOS)
  • MIDI‑OX (Windows)
  • KMidiMon (Linux)

Библиотека: пример использует Arduino MIDI Library v4.2 (Forty Seven Effects). Установите библиотеку через Sketch > Include Library > MIDI.

Подключите Arduino к компьютеру и загрузите тестовый скетч. Не забудьте выбрать плату и порт в Tools > Board и Tools > Port.

#include 
#include 
#include 
#include 
#include 

MIDI_CREATE_INSTANCE(HardwareSerial, Serial, midiOut); // создаём объект midiOut

void setup() {
  Serial.begin(31250); // настройка последовательного порта для классического MIDI (31250 бод)
}

void loop() {
  midiOut.sendControlChange(56, 127, 1); // отправляем Control Change: 56=номер контроллера, 127=значение, 1=канал
  delay(1000); // ждём 1 с
  midiOut.sendProgramChange(12, 1); // отправляем Program Change: 12=номер пресета, 1=канал
  delay(1000); // ждём 1 с
}

Этот код каждую секунду отправляет CC и PC. В MIDI‑мониторе вы должны видеть входящие сообщения.

Если сообщений нет — выполните проверку:

  • Проверьте проводку и соединения
  • Проверьте правильность распиновки MIDI‑гнезда
  • Убедитесь, что плата запитана
  • Подключили ли вы кабель к MIDI‑входу интерфейса (вход/выход легко перепутать)
  • Проверяйте качество макетной платы — дешёвые брони иногда имеют плохие контакты
  • Установлен ли правильный драйвер для USB‑MIDI интерфейса

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

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

const int buttonOne = 6; // пин первой кнопки
const int buttonTwo = 7; // пин второй кнопки

void setup() {
  Serial.begin(9600); // последовательный монитор для отладки
  pinMode(buttonOne, INPUT);
  pinMode(buttonTwo, INPUT);
}

void loop() {
  if (digitalRead(buttonOne) == HIGH) {
    delay(10); // программный дебаунс
    if (digitalRead(buttonOne) == HIGH) {
      Serial.println("Кнопка 1 работает!");
      delay(250);
    }
  }

  if (digitalRead(buttonTwo) == HIGH) {
    delay(10);
    if (digitalRead(buttonTwo) == HIGH) {
      Serial.println("Кнопка 2 работает!");
      delay(250);
    }
  }
}

Откройте Serial Monitor в Arduino IDE (правый верхний угол → Serial Monitor) и нажимайте кнопки — вы должны увидеть сообщения.

Важно: программный дебаунс — это простой 10 мс промежуток между двух проверок состояния кнопки, чтобы исключить дребезг контактов.

Создаём контроллер с отправкой разных CC для каждой кнопки

Ниже — финальный пример: при нажатии каждой кнопки отправляется свой CC. Код похож на тестовые примеры.

#include 
#include 
#include 
#include 
#include 

const int buttonOne = 6;
const int buttonTwo = 7;

MIDI_CREATE_INSTANCE(HardwareSerial, Serial, midiOut);

void setup() {
  pinMode(buttonOne, INPUT);
  pinMode(buttonTwo, INPUT);
  Serial.begin(31250); // MIDI out
}

void loop() {
  if (digitalRead(buttonOne) == HIGH) {
    delay(10);
    if (digitalRead(buttonOne) == HIGH) {
      midiOut.sendControlChange(56, 127, 1); // пример: CC 56
      delay(250);
    }
  }

  if (digitalRead(buttonTwo) == HIGH) {
    delay(10);
    if (digitalRead(buttonTwo) == HIGH) {
      midiOut.sendControlChange(42, 127, 1); // пример: CC 42
      delay(250);
    }
  }
}

Примечание: при использовании Serial порта для классического MIDI вы не сможете одновременно делать Serial.println() для отладки — они будут конфликтовать с MIDI‑потоком.

Если вы хотите отправлять Program Change вместо Control Change — замените:

midiOut.sendControlChange(42, 127, 1);

на:

midiOut.sendProgramChange(value, channel);

Демонстрация и интеграция с DAW

Ниже — пример использования контроллера с Ableton Live, где в мониторе видно входящие MIDI‑сообщения. Собрания типа такого подходят для управления переключением пресетов, включения эффектов или управления транспортом.

Практические варианты и расширения

  1. USB‑MIDI (нативный) — используйте платы с USB‑MIDI (Leonardo, Micro, Pro Micro) и библиотеку MIDIUSB для отправки данных по USB без внешнего интерфейса.
  2. MIDI IN — если нужен вход, добавьте оптопару для развязки (MIDI IN обычно требует развязки по текущему стандарту).
  3. Энкодеры, фейдеры и потенциометры — для передачи непрерывных CC можно подключать аналоговые входы через A‑пины.
  4. Стабильность — для боевой сборки перенесите схему на макетную плату под пайку и установите в корпус.

Когда это не сработает (ограничения и подводные камни)

  • Нативный USB‑MIDI на Arduino Uno невозможен без дополнительных преобразований (Uno не поддерживает USB‑MIDI без прошивки USB‑Serial чипа).
  • Для сложной логики и многоканальных контроллеров лучше использовать платы с большим количеством I/O или микроконтроллеры с USB‑Host/Device.
  • Если устройство принимающее MIDI ожидает специфический MIDI‑MAP, вам нужно настроить соответствующие номера CC/PC.

Руководство по отладке (Runbook)

  1. Нет сообщений в мониторе:
    • Проверить питание Arduino.
    • Проверить, выбран ли правильный COM‑порт и плата.
    • Проверить, подключён ли MIDI‑кабель в разъём IN на интерфейсе.
    • Проверить распиновку DIN‑гнезда.
  2. Кнопки не реагируют:
    • Проверить подключение резисторов 10 kΩ и пинов 6/7.
    • Использовать Serial Monitor и тестовый скетч для проверки кнопок.
  3. Прерывания/дребезг:
    • Увеличьте дебаунс (например, до 20–50 мс) либо используйте аппаратный дебаунс (конденсатор).
  4. Стабильность на макетной плате:
    • Паяйте на плате прототипа или используйте провода покороче.

Мини‑методология проектирования

  1. Определите набор сообщений (CC/PC) и каналы.
  2. Прототипируйте на макетной плате.
  3. Тестируйте с MIDI‑монитором и целевым устройством.
  4. Улучшайте интерфейс (подписи, подсветка, защита от дребезга).
  5. Перенесите в корпус и спаяйте для надёжности.

Контроль версий совместимости и миграция

  • Классический DIN‑MIDI использует 5‑pin DIN и 31250 бод.
  • USB‑MIDI требует поддержки USB‑device на плате — для Arduino Uno нужен отдельный USB‑MIDI интерфейс.
  • При переходе на другую плату проверьте количество доступных I/O и наличие нативного USB.

Таблица ключевых чисел (факт‑бокс)

  • MIDI‑каналов: 16
  • Диапазон CC/Velocity: 0–127
  • Скорость передачи классического MIDI: 31250 бод
  • Резисторы в схеме: 220 Ом (серийные для DIN), 10 kΩ (pull‑down)

Чек‑листы по ролям

Для музыканта:

  • Проверить, какие CC/PC принимает ваш синтезатор/DAW.
  • Настроить карту (MIDI mapping) в DAW.

Для сборщика/мастера:

  • Надёжная пайка и крепление DIN‑гнезда.
  • Корпус с доступом к винтам и кабелям.

Для разработчика ПО:

  • Логика обработки нажатий (дебаунс, удержание, повтор).
  • Масштабируемость кода для добавления энкодеров/фейдеров.

Пример диаграммы принятия решения

flowchart TD
  A[Начать: нужен ли классический DIN-MIDI?] -->|Да| B[Использовать Serial TX '31250 бод']
  A -->|Нет, нужен USB| C[Использовать плату с нативным USB]
  B --> D{Нужен MIDI IN?}
  D -->|Да| E[Добавить оптопару и развязку]
  D -->|Нет| F[Простая схема MIDI OUT]
  C --> G[Использовать MIDIUSB библиотеку]

Советы по безопасности и практичности

  • Всегда отключайте питание при перенастройке разъёмов и пайке.
  • MIDI‑сигнал классически не требует сложной гальванической развязки на выходе, но при подключении к студийному оборудованию соблюдайте аккуратность и используйте качественные кабели.

Альтернативы

  • Готовые контроллеры: если нужен готовый и компактный вариант с поддержкой множества контролов — рассмотрите коммерческие USB‑MIDI контроллеры.
  • Использование плат с большим числом A/D входов для фейдеров и потенциометров (например, Teensy или платы на базе ARM).

Итог и дальнейшие шаги

Вы собрали базовый MIDI‑контроллер на Arduino. После успешного теста подумайте о добавлении индикаторов состояния (LED), множественных кнопок, энкодеров и корпусе. Для живых выступлений рекомендуется собрать плату на пайке и обеспечить механическую защиту разъёмов.

Важно: если планируете распространение устройства, проверьте совместимость с целевым ПО и требования к MIDI‑маппингу.

Image Credit: Keith Gentry via Shutterstock.com

Краткое резюме

  • Прототип на макетной плате позволяет быстро проверить идею.
  • Для классического MIDI нужен Serial на 31250 бод.
  • Для USB‑MIDI — платы с нативным USB или отдельный интерфейс.
  • Основные проблемы — неправильная распиновка, провода и дребезг кнопок.

Важно: при создании более сложных контроллеров используйте аппаратные решения для дебаунса, экранирование кабелей и продуманную разводку питания.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как подключить контроллер Xbox 360 к консоли
Игры

Как подключить контроллер Xbox 360 к консоли

Как удалить профиль на Xbox (Series X|S, One, 360)
Xbox

Как удалить профиль на Xbox (Series X|S, One, 360)

Юбилей Xbox: как смотреть трансляцию и чего ждать
Gaming

Юбилей Xbox: как смотреть трансляцию и чего ждать

Как подключить контроллер Xbox к Mac
Технологии

Как подключить контроллер Xbox к Mac

CSS font-family — как менять шрифты на сайте
Frontend

CSS font-family — как менять шрифты на сайте

Адаптивный navbar на HTML и CSS
Веб-разработка

Адаптивный navbar на HTML и CSS