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

Добавил пользователь Евгений Кузнецов
Обновлено: 18.09.2024

kentforth

Active Member

Коллеги! я тут запилил видос, о том как сделать себе бюджетный миди контроллер. Всё подключение было на макетной плате. Arduino Uno я покупал в районе 300 р. Большее скорее подойдет для студентов нищебродов, которые не хотят переплачивать за дорогостоящие контроллеры

fractala

Well-Known Member

Хорошее видео, спасибо! У тут дело даже не в нищебродстве, ваше видео натолкнуло на мысль сделать контроллер под себя
Именно можно сделать под себя расположение органов управления.

Натолкнуло собственно вот на какую мысль, ваша прошивка позволяет работать только с двумя buttons и одним упорным потенциометром?

kentforth

Active Member

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

1)Моно включать любое коллличество, она никак не влияет на скетч ардуино и колличество использемых кнопок, она лишь позволяет компьютер определить ваш миди контроллер как HID устройство.
2) Да, все верно
3) с бесконечными энкодерами пока не сталкивался, но я предполагаю это тот е потенциометр, имеет таке номинал, например 10 кОм, в софте крайнее полоение будет определятся как 10кОм, но ручку просто крутите сколкьо угодно вправо или влево, например если назначили на этот энкодер ручку громкости, то когда дойдет до крайнего полоения, ручка громкости остановит свое двиение, а сами моете крутить энкодер сколько угодно
4) Видел как на Ардуино делали контроллер из более 30 кнопок, моно подключить мульти плексор, кадый мультиплексор будет занимать один цифровой вход на ардуино, и на кадый мультиплексор моно подключить до 8 кнопок, если например подключить 8 мультиплексоров, то будем иметь 64 кнопки, точно таке и с потенциометрами
5)что такое Sysex я не знаю
[DOUBLEPOST=1476815170][/DOUBLEPOST]Если хотите знать больше, подписывайтесь на мой канал, в дальнейшем буду запиливать другие видосы на эту тему. Кнопки, потенциометры и прочее,что связано с самодельными миди-контроллерами)

andriano аватар

Собственно, не так давно обнаружил устройство, которое может представлять некоторый интерес для DIY - клавиатура K-25M от Roland.

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

Ссылку не привожу, дабы не сочли за рекламу, но лично я заказывал в Музторге курьером.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

andriano аватар

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

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

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

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


Пока публикую самый первый работоспособный прототип:

- диапазон фиксированный: от До малой до До второй,

- Active Sensing не поддерживается,

- Running Status не поддерживается.

Дальше предполагается добавить кнопки для перемещения строя по октавам и реализовать упомянутые Active Sensing и Running Status.

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

Но самое главное, как выяснилось, для клавиатуры подобного типа вполне хватает контроллеров AVR без каких-бы то ни было дополнительных внешних микросхем.

В данной статье мы рассмотрим простейший адаптер 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

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

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

проекты, простые Arduino Uno (какие бывают типы Arduino?

) имеет более чем достаточно мощности для этого проекта.

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

Прочитать, прежде чем заняться этим проектом.

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

Что такое MIDI?

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

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

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

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

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

Схема сборки

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

MIDI соединение

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

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

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

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

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

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

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

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

  • MIDI-монитор для OS X
  • MIDI-OX для Windows

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

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

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

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

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

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

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

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

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

В бою

Ниже приведена демонстрация в качестве контроллера для Ableton Live (Лучшее программное обеспечение для DJ на любой бюджет

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

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


В один прекрасный день я решил, что может стоит замутить на AVR дешевый MIDI-синтезатор. Подобный проект был очень интересен мне как эмбеддеру. Поиски информации о принципах генерации сложных звуков на AVR контроллерах привели к выводу, что это очень, очень, … очень не тривиальная тема. В найденных мной примерах разработки MIDI-синтезаторов количество тембров и многоголосие были весьма ограничены. Это меня совсем не устроило, к тому же я не хотел завязнуть в собственных изысканиях по синтезу звуков. Продолжив поиск далее, я нашел ссылку на замечательный чип от VLSI Solution — VS1053B. Его официальная спецификация — OggVorbis/MP3/AAC/WMA/FLAC/MIDI Audio Codec. Вот даташит на это чудо. Согласно даташиту на борту у этого чипа присутствует MIDI-синтезатор с двумя банками инструментов и эффектом реверберации. Сам чип обошелся бы мне в 143 грн. По сравнению со стоимостью самого дешевого готового промышленного MIDI-синтезатора это сущие копейки. Чтобы не возится с платой под корпус LQFP48, я решил купить уже готовый модуль от SparkFun для Ардуины на базе VS1053B, который у них называется — Music Instrument Shield. Вот на него ссылка. Модуль потянул на 260 грн., что вполне вписывалось в бюджетное решение. Спаяв на макетке цепь опторазвязки входа MIDI, я смог запустить модуль, подключить клавиши и послушать звучание синтезатора на чипе VS1053. Качество конечно не такое как у Super Quartet, но вполне приемлемое, и к тому же 128 инструментов только в первом банке инструментов (их список есть в даташите) — это замечательно. Это было именно то, что я искал. Возможно на этом можно было бы и остановиться, но а где тут AVR? Где же наш дорогой и любимый эмбеддинг? Все далее….

Моя MIDI-клавиатура M-Audio Keystation 61, как очень дешевое изделие, сильно урезана функционально. На ней есть всего две кнопки выбора функций, которых не достаточно для быстрого и удобного управления инструментом. По-умолчанию после включения питания, эти кнопки позволяют смещаться вверх или вниз на одну октаву. Чтобы переназначить управление другими функциями, надо совершить очень хитрые комбинации нажатий кнопок и клавиш, которые запомнить сложно. Поэтому я решил к MIDI-модулю добавить микроконтроллерное управление, которое бы оживило недоступные с клавиатуры функции.


�?нтерфейс MIDI по сути оказался простым UART работающим на скорости 31250 бод, 8 бит данных, 1 стоп-бит и без контроля четности. Поэтому добавить AVR-посредника между клавишами и MIDI-модулем была не проблема. Этот контроллер должен был транслировать через себя MIDI-команды полученные с клавиатуры и вставлять необходимые команды управления. Так родилась концепция моего синтезатора. Детальная проработка позволила разделить устройство на три блока: питание, MIDI-Audio и управление.


Первый блок — блок питания. Ничего революционного в нем нет. Схема классическая. Трансформатор 20 ватт, на выходе выпрямителя получаем 9 вольт, которые отдельным шнуром выводятся для питания MIDI-клавиатуры (т.е. мой синтезатор выступает еще и блоком питания для клавиш). После выпрямителя идет стабилизатор на LM7805 (КРЕН05), который выдает питание 5 вольт на все цифровые и аналоговые цепи. Тут все просто.


Второй блок — блок MIDI-Audio. Блок имеет цифровую и аналоговую части. На плате четко видно разделение цифровой и аналоговой земли. MIDI-модуль подключается сверху в разъемы на плате блока (прям как к Ардуине). На цифровой части находятся разъем MIDI, опторазвязка преобразователя MIDI-TTL и контроллер-посредник ATtiny2313. Контроллер транслирует через себя данные со входа Rx на выход Tx, это канал от клавиш к синтезатору VS1053. Команды управления контроллер получает от блока управления асинхронно параллельным кодом (это для скорости) на порт В. Блок управления сигнализирует контроллеру о готовности передачи байта сигналом внешнего прерывания. По окончании приема всех байтов MIDI-команды контроллер сразу выталкивает их на выход Tx, т.е. в синтезатор. На этом пока все обязанности контроллера-посредника заканчиваются. Работает контроллер только на прерываниях. На аналоговой части блока расположено два стерео усилителя: первый — линейный, второй — для наушников. Линейный усилитель усиливает слабый сигнал с аудио-выхода MIDI-модуля и выводит его на разъемы линейного выхода (разъемы типа тюльпан). На усилитель для наушников сигнал линейного выхода попадает через сдвоенный потенциометр регулятора громкости. Выход усилителя наушников оформлен в виде разъема под пальчиковый штекер. В этом блоке тоже все достаточно просто, без нюансов.

Третий блок — блок управления. Основа блока контроллер ATmega16. Порт С этого контроллера используется для передачи команд управления в блок MIDI-Audio. К этому же порту также подключен LCD на 2 строки по 16 символов (в моем случае это WH1602С). На LCD выводится номер и название (по даташиту VS1053) текущего инструмента. Все выводы порта A контроллера используются как входы АЦП. На текущий момент задействованы только 2 входа. К ним подключены потенциометры, с помощью которых задается уровень реверберации и время задержки реверберации. Остальные шесть входов пока заглушены и возможно будут использованы для будущих функций. На плате блока имеется преобразователь уровней RS232-TTL — чип MAX232N, для обеспечения подключения синтезатора к СОМ-порту компьютера. Это задел для будущих функций. Есть у меня мысли о загрузке с ПК небольших музыкальных семплов в память контроллера для подыгрывания исполнителю на втором MIDI-канале. Порт B используется для работы с матричной клавиатурой и светодиодами. Половина выводов этого порта подключена к двоично-десятичному дешифратору 74HC154N (аналог К155�?Д3), который позволяет организовать до 16 вертикалей для матрицы клавиатуры (хотя я использовал всего 7). Эти выводы также управляют сдвиговым регистром 74HC595, который на прикрепленной к передней панели платке может зажигать до 8 светодиодов (запаяно 3, используется пока 1).

Клавиатура выполнена на отдельной плате, которая прикреплена к передней панели корпуса. Кнопки разделены на две группы: 8 кнопок управления и 20 кнопок для быстрого выбора инструментов. Текущая версия прошивки контроллера блока управления позволяет кнопками управления выбрать один из 128 инструментов и привязать его к любой из кнопок быстрого выбора. Данная привязка сохраняется в энергонезависимой памяти и сохраняется с выключением питания. Также сохраняется и последний выбранный инструмент, который автоматически выбирается сразу после включения устройства.

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

Запись опубликована в рубрике Разное с метками AVR, MIDI, VS1053. Добавьте в закладки постоянную ссылку.

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