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

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

MIDI контроллер на Atmega16U4

Автор: ProAlex, proalexx@yandex.ru
Опубликовано 21.07.2015
Создано при помощи КотоРед.

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

Поэтому я задумался над тем, как создать устройство, позволяющее восполнить данный недостаток. Поэксперементировав с разными микроконтроллерами, остановился на Atmega16U4 фирмы Atmel, как наиболее подходящий для решения данной задачи. Так же добавив в устройство возможность использовать его, как MIDI-USB переходник, для тех инструментов у которых отсутсвует USB-MIDI интерфейс.

В результате появился миди контроллер, который я назвал ATEMP MC1. Следующее видео показывает его возможности при разных вариантах включения.

Рассмотрим сначала теоретическую часть работы данного устройства.

1. Поток миди сообщений генерируется инструментом в случае разных действий со стороны музыканта. Это может быть, как нажатие клавиш инструмента, так и нажатия кнопки или поворота ручки контроллера. Миди сообщения в основном идут трех байтовой пачкой, но бывают и двух и одно и более трех. Например нажатие клавиши в сообщении выглядит, как 0x90 0x3C 0x40 (Note On/chan 0, Middle C, Velocity ), а изменения контроллера громкости, как 0xB0 0x07 0x40 (Control Change/chan0, Volume, Lеvel). Подробная информация о протоколе миди выложена на специальных сайтах, где с ней может подробно ознакомится любой желающий, например https://www.gweep.net/

2. Базовая функция устройства состоит в том, чтобы принимать со входа MIDI IN и передавать на выход MIDI OUT или USB порт все входящие миди сообщения, а для добавления в поток сообщения с собственных контроллеров, необходимо прерывать программу и считывая положение ручек контроллера вставлять эти сообщения в поток. При передачи в USB поток следует учитывать специфику данного протокола, так как здесь сообщения миди нужно дополнительно перепаковывать в пакеты USB. Например нажатие клавиши будет уже выглядеть, как 0x09 0x90 0x3C 0x40 ( Note-on message on virtual cable 0 (CN=0x0; CIN=0x9) Note On/chan 0, Middle C, Velocity)

3. Прерывание необходимо так же, для динамического сканирования кнопок ввода и вывода информации на четырех разрядный восьмисегментный индикатор.

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

Рассмотрим более подробно работу узлов данной схемы.

В Atmega16U4 для приема передачи данных миди сообщений мы используем порт USART1 его вход, выход RXD, TXD, и настраиваем его на частоту MIDI протокола, то есть Baud Rate: 31250 Гц, для считывания данных с потенциометров контроллеров используем входы ADC 1,2,4,5,6,7,8. Для динамического отображения на четырех разрядном восьмисегментном индикаторе, включенном по схеме с общим анодом и для подвески опроса кнопок используем для сегментов порт PB0..7, разрядов порт PD0..1 и PC6..7. Развязанные через диоды кнопки опрашиваются динамически на порт кнопок PD5 (в следующих статьях я на простом примере расскажу, как организовать простой драйвер для динамической индикации и опроса кнопок, в случае индикатора с общим анодом или катодом). Для прерывания необходимого для вывода информации на разряд индикатора, опроса нажатия кнопки, а так же запуска канала ADC я использую внутренний таймер TIMER0.

Для работы по аппаратному USB порту подключаемся к его D+ D-. Питание вся схема получает от USB порта. В MIDI протоколе для подключения и передачи приему данных используется схема — токовая петля через оптрон. Она позволяет гальванически развязать устройства, для предотвращения попадания в разные фазы. В данной схеме используется стандартное включение оптрона типа 4N33 наш аналог АОТ127А, в качестве буферного элемента используется микросхема 74LS00 наш аналог к555ла3, при достаточной крутизне спадов оптрона ее можно и не ставить, но тем не менее в миди адаптерах и прочих схемах для порта миди ее рекомендуют использовать.

Для корректной работы с USB портом я использовал стандартный Атмеловский стек series4-usb_software_library_template для данной серии микроконтроллеров U4 и в настройках usb_dexyinaors.c, h прописал конфигурацию класса миди порта, USB Endpoint dexyinaors для считывания и записи данных (описания взяты с сайта конфигураций usb.org: https://www.usb.org/developers/devclass_docs/midi10.pdf), он также подходит и для Atmega32U4, то есть в данной схеме они заменяемы, просто при компиляции надо указать под какой контроллер компилировать. В следующих статьях я поподробнее напишу про работу с этим удобным USB стеком, на стандартных примерах. Для программирования использую софтовый Атмеловский программатор Flip, через USB порт, чтобы программировать при включении нужно держать нажатой кнопку B4 подача низкого уровня на вход HWB запускает вшитый в чип загрузчик.

Читайте также:  Костюм для индейской вечеринки своими руками

В качестве управления колесом питча и модуляции RV1,RV2 я использовал джойстик от пульта управления радиоуправляемыми моделями вертолета:), но можно поставить и колеса от старой миди клавиатуры или синтезатора.

Источник

USB MIDI-контроллер на Arduino

В очередной раз играя на гитаре и управляя звуком через Peavey ReValver и прочие Amplitube, задумался о приобретении MIDI-контроллера. Фирменные устройства, вроде Guitar Rig Kontrol 3, стоят около 13 000 рублей, и обладают только напольным исполнением. То есть оперативно менять положения нескольких регуляторов весьма проблематично.

Различные контроллеры DJ направленности выглядели интереснее за счет обилия фейдеров и энкодеров. Решено было совместить приятное с полезным и сделать MIDI-контроллер самому.

Начальные требования: 2-7 фейдеров, столько же роторных потенциометров/энкодеров, около 10 кнопок, подключение по USB.

Далее стал выбирать компоненты. Arduino выбрал по причине наличия, в принципе можно использовать ту же ATmega32u4, STM, либо другой контроллер. Фейдеры и кнопки нашел в местном радиомагазине. Энкодер и потенциометры уже были когда-то куплены. Тумблеры нашел в гараже. Корпус решил изготовить из верхней крышки DVD плеера.

Комплектующие:

  • Arduino UNO R3 1 шт.
  • Фейдеры сп3-25а 5 шт.
  • Рот. потенциометры 3 шт.
  • Энкодер 1 шт.
  • Кнопки pbs-26b 16 шт.
  • Крышка от DVD 1 шт.
  • Тумблеры 2шт.

Сначала согнул корпус и пропилил в нем бормашиной отверстия под фейдеры:

Затем просверлил отверстия для тумблеров и рот. потенциометров, разметил положение кнопок. Так как сверла на 19 (да и соответствующего патрона для дрели) у меня не было, то отверстия для кнопок сверлил на 13, а затем увеличивал разверткой.

Основа готова, теперь можно думать, как подключать все это добро к Arduino. Во время изучения данного вопроса наткнулся на замечательный проект HIDUINO. Это прошивка для ATmega16u2 на борту Arduino, благодаря которой устройство определяется как USB-HID MIDI device. Нам остаётся только отправлять данные MIDI по UART со скоростью 31250 бод. Чтобы не захламлять исходники дефайнами с кодами MIDI событий, я воспользовался этой библиотекой.

Так как я использовал Arduino, то решил сделать шилд, к которому уже и будут подключаться вся периферия.
Схема шилда:

Как видно из схемы кнопки подключил по матричной схеме. Задействованы встроенные подтягивающие резисторы ATmega328, поэтому логика инверсная.


Забыл разместить на печатке диоды, пришлось подпаивать к кнопкам.

Потенциометры подключены через мультиплексор 4052b к вводам АЦП.

Энкодер повесил на аппаратное прерывание.

Печатную плату развёл в Sprint layout, Затем изготовил старым добрым ЛУТ’ом с использованием самоклеющейся плёнки и хлорного железа. Качество пайки страдает от ужасного припоя.


Для заливки прошивки в ATmega32u4 я кратковременно замыкал 2 пина ICSP, затем использовал Flip. В дальнейшем подключил к этим пинам кнопку.

Прошивка работает, осталось прикрутить стенки и лицевую панель. Так как я размечал все по месту, то на рисование панели времени ушло больше, чем на всё остальное. Выглядело это так:

  • 1. В качестве фона картинки выставлялась миллиметровка
  • 2. Размечались отверстия
  • 3. Полученное выводилось на печать
  • 4. Вырезались все отверстия
  • 5. Откручивались и снимались все элементы
  • 6. Устанавливалась панель, устанавливались на места все кнопки/потенциометры
  • 7. Отмечались несоответствия шаблона и корпуса
  • 8. Переход к пункту 2, пока все отверстия не совпадут

Панель изготовлена из миллиметрового ПЭТ, покрытого плёнкой с принтом и ламинированием, отверстия вырезались лазером по cdr файлу. У иркутских рекламщиков все это обошлось мне всего в 240 рублей.

Боковые стенки выпилил из фанеры.

Вид устройства на текущий момент:

Стоимость комплектующих:

  • Arduino UNO R3 320 р.
  • Фейдеры сп3-25а 5х9=45 р.
  • Рот. потенциометры + ручки 85 р.
  • Энкодер 15 р.
  • Кнопки pbs-26b 16х19=304 р.
  • Панель 240 р.
  • Мультиплексор 16 р.
  • Фанера, текстолит, тумблера, корпус от DVD — в моём случае бесплатно.

Итого: 1025 руб.

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

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

Источник

Сайт про изобретения своими руками

МозгоЧины

Сайт про изобретения своими руками

Как сделать дешевый MIDI контроллер на базе Arduino своими руками

Как сделать дешевый MIDI контроллер на базе Arduino своими руками

Мне давно хотелось разбудить в себе композитора и начать творить свою собственную электронную музыку. Однако я был (мягко говоря) обескуражен высокими ценами на MIDI контроллеры. Но порыскав по просторам интернета у меня появилась задумка создать собственный контроллер, используя для этого Arduino Uno и токопропроводящие краски!

Давайте начнём)

Шаг 1: Подбор деталей

Вы можете слегка отойти от изложенного материала и собранный вами MIDI контроллер все равно будет работать (под «слегка отойти» имею ввиду, что можете установить резистора с чуть-чуть другим номиналом или оставить один из выводов отключенным).

Читайте также:  Новогодний костюм бэтмен своими руками

С электроники нам понадобится:

  • 1 Arduino Uno с usb кабелем;

  • 1 баночка токопроводящей краски;

  • 1 монтажная плата размерами 5×7 см;

  • резисторы с сопротивлением 2.2 кОм;

  • резисторы с сопротивлением 10кОм;

  • резисторы с сопротивлением 4.7кОм;

  • 12 шт 2.7 MОм резисторов;

Кроме электроники, также потребуются следующие инструменты:

  • Паяльник и припой;
  • Кусачки;
  • Подставка для пайки деталей (третья рука);
  • Мультиметр;
  • Несколько проводов и/или тонкая металлическая проволока.

Шаг 2: Припаиваем штыри

Создание платы начнём с припаивания штырей. Разместим согнутые штырьки в центре первого ряда на плате. Они в последующем будут служить «чувствительными» выводами, к которым будет подсоединяться клавиатура.

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

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

Для следующего этапа, расположим прямые гребёнки в слотах Arduino. Установим поверх штырей, что вставлены в Arduino, плату. Данное действие потребовало приложения небольшого усилия, поскольку штыри не идеально отцентрованы относительно отверстий платы.

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

Шаг 3: Напаиваем перемычки

Теперь удалим плату с Arduino и перевернём её на обратную сторону. Напаяем перемычки, на которые в дальнейшем будут крепится компоненты. Есть два способа сделать это:

  • Заполнить все необходимые отверстия припоем, а после соединить их друг с другом.
  • Использовать тонкую проволоку.

Советую использовать второй метод, поскольку он проще и быстрее. Если вы выберете этот метод, расположите проволоку на плате, как на изображении.

  • Красная точка означает — припаиваем провод в отверстие.
  • Желтая точка — соединяем тонкую проволоку со штырём на другой стороне платы (как на третьем изображении).

Как вы можете видеть, немного испортил нижний левый угол, когда нанёс слишком много припоя, поэтому будьте внимательны!

Совет: Если у вас нет тонкой проволоки, используйте обрезки выводов используемых резисторов.

Шаг 4: Припаиваем сенсорно-ёмкостные резисторы

Устанавливаем компоненты, а именно 2.7MОм резисторы, которые будут выполнять сенсорно-ёмкостные функции.

Примечание: Если вы хотите узнать больше о теоретических основах и практическом применении сенсорно-ёмкостных датчиков, советую ознакомится со следующими ссылками:

Расположим один 2.7MОм резистор снизу самого правого согнутого штыря и протолкнём ножки через отверстия (как на первом изображении). Теперь перевернём плату и протолкнём один вывод резистора обратно в следующее отверстие (как показано на втором изображении). Припаяем нижнюю ногу резистора к отверстию, а верхнюю ногу резистора к выводу штыря. После чего прикрепим 7cm провод на этот штырь (как видно с третьего изображения).

Повторим процесс со всеми резисторами и проводами, припаяв их на места. Нижнее ножки резисторов должны сформировать одно длинное соединение.

Совет: Выбирайте чередующееся цвета для проводов — это позволит проще производить соединение в последующих шагах.

Шаг 5: Припаиваем кнопки

Начнём с размещения кнопок и резисторов на плате, как на первом и втором изображениях. В моём случае использовал 2.2кОм резисторы, но можно использовать любой резистор со значением между 2кОм и 10кОм.

Перевернём плату и припаяем всё на свои места. Изображение 3 объясняет, какие различные соединения вам нужно будет сделать:

  • синяя точка – обозначает ножку кнопки, что необходимо припаять на плату;
  • розовaя точка – обозначает ножку резистора, которую необходимо припаять на плату;
  • красная линия означает — вам следует спаять две точки в одно соединение;
  • чёрная линия обозначает провод, что будет идти от одной ножки кнопки через отверстие в плате, что потом соединится со штырём на другой стороне.

Если всё спаяно правильно, две самые левые кнопки позволят изменять октавы, в то время как самая правая кнопка позволит включать LDR сенсор.

Шаг 6: Припаиваем LDR и LED

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

Совет: Любой резистор в интервале между 330 Ом и 5кОм будет хорошим решением для 5mm LED.

Теперь расположим LED, LDR и резисторы (4.7K для LDR) в нужных местах. Перевернём плату и припаяем всё. Третье изображение пояснит, какие различные соединения следует выполнить:

  • коричневые точки – выводы LDR, что следует припаять на плату;
  • розовая точка – ножка резистора, что следует припаять на плату;
  • оранжевые точки – выводы LED, что необходимо припаять на плату;
  • красная полоса – вам нужно спаять две точки в одно соединение;
  • чёрная полоса – провод, что будет идти от вывода резистора через отверстие платы, что потом будет соединяться со штырём.

Примечание: Перед припаиванием LED, убедитесь в том, что полярность светодиода верная. Положительный вывод LED следует соединить с резистором, а отрицательный вывод с землей.

Шаг 7: Тестируем все соединения

Сейчас хорошее время протестировать удачно ли пропаяны соединения кнопок, LDR и LED. Это последняя возможность исправить ошибки, советую вам загрузить прикрепленный код и запустить программу. Скопируйте/ скачайте архив и загрузите Arduino_Test_Fixture_Code на плату Arduino.

Читайте также:  Перегородка для фургона своими руками

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

Шаг 8: Завершение работы с платой

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

Перевернём плату и отрежем провода нужной длины. Припаяем их к штырям, что заходят в разъемы Arduino. Прежде чем начать использовать MIDI контроллер, сначала нужно протестировать его соединения с помощью тестового скетча Аrduino_Test_Fixture_Code_2. Загрузите скетч, откройте последовательный порт и прикоснитесь к «чувствительным» штырям на плате. Если вы увидите текст ‘Note x is active’ для каждого штыря, во время касания, все выводы работают корректно.

Шаг 9: Преобразуем Arduino в MIDI устройство

После того, как плата готова, пришло время преобразовать Arduino в MIDI контроллер, который будет распознаваться музыкальными программами, такими как Ableton и Fl Studio или даже другими MIDI устройствами. Процесс состоит из двух шагов:

  1. Изменить текущие встроенные программы на Arduino Uno на MIDI совместимые программы;
  2. Загрузить MIDI скетч на Arduino.

Начнём с первого пункта. По условию в Arduino загружена прошивка usb-последовательный порт, что позволяет Arduino обмениваться сообщениями с ПК и Arduino IDE. С новой программой DualMoco, добавиться второй режим, что позволит Arduino выступать в роли MIDI устройства.

Будем использовать программу FLIP и следуя инструкции изменим прошивку Arduino. Работоспособный файл вы найдете в архиве в папке Firmware — файл DualMoco.hex.

После загрузки новой прошивки, переподключите Arduino к ПК. Если всё пройдёт успешно, Arduino не должен будет обнаруживаться Arduino IDE, потому что новая программа находится в режиме (MIDI mode). Откройте музыкальную программу, что способна записывать MIDI и проверьте, чтобы Arduino с именем MIDI/MOCO for LUFA отображалась над MIDI настройками, как вы можете видеть на 1-ом изображении.

Шаг 10: Производим последнее приготовления

Особенность DualMoco в том, что у неё есть второй режим — usb-последовательный порт, что позволяет загружать скетчи с Arduino IDE, точно также, как при обычной прошивке. Чтобы перевести Arduino во второй режим, соедините два ISCP вывода вместе, как показано на 1 и 2 изображении. Вы можете либо использовать кусочек провода или маленькую перемычку, как показано на изображениях. Теперь отключите USB кабель на несколько секунд от Arduino и переподключите его, Arduino должен обнаружится в Arduino IDE.

Примечание: Когда вы захотите переключится из режима usb-последовательный порт в MIDI режим, удалите перемычку с ISCP выводов, как показано на третьем изображении и переподключите Arduino к ПК.

Пришло время загрузить действующий скетч в Arduino, Arduino_Final_Code. Скачайте его, переведите Arduino в usbпоследовательный порт режим и загрузите код. Если необходимо точная настройка пороговой величины, поэкспериментируйте со значениями THRESHOLD и RES . После того, как все заработает, как и ожидалось, поменяйте текущую строку 17, с:

boolean midiMode = false; // if midiMode = false, the Arduino will act as a usb-to-serial device

boolean midiMode = true; // if midiMode = true, the Arduino will act as a native MIDI device.

После того, как в код внесены последние изменения, пришло время протестировать музыкальную программу способную поддерживать MIDI устройства. Сначала переведём Arduino в MIDI режим, для этого:

  1. Загрузим финальный код в Arduino.
  2. Извлечем USB кабель с Arduino.
  3. Переключим Arduino в МIDI режим удалив перемычку с выводов ISCP.
  4. Установим USB кабель в Arduino.

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

Шаг 11: Припаиваем скрепки на джампепы

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

Процесс припайки скрепок к проводам довольно прост:

  1. Отрезаем штекер с одной стороны провода;
  2. Зачищаем провод от изоляции на 5 мм;
  3. Припаиваем зачищенный провод к скрепке;
  4. Повторяем для всех 12 скрепок.

Примечание: Скрепки не должны быть покрыты никаким покрытием (краской или пластиком).

Шаг 12: Закрашиваем шаблон

Хотя и можно играть на Arduino MIDI клавиатуре только прикасаясь к скрепкам, гораздо интереснее, сделать свой собственный трафарет и использовать его. Раскрасил распечатанный шаблон. Шаблон находится в архиве с проектами.

Раскрашивание шаблона довольно простое занятие, только убедитесь в том, что оставляете пространство между линиями и используете соответствующие краски, иначе ничего работать не будет. После того, как краска высохнет, закрепите скрепки на «клавишах» и можете приступать творить музыку.

Источник

Оцените статью
Своими руками