ARDUINO MIDI-клавиатура на основе баяна "Рубин-5"

Dreman

✩✩✩✩✩✩✩
25 Апр 2024
2
1
tesanoff.klah.ru
Данный проект – это разработка MIDI системы предназначенной для установки в баян “Рубин-5”. Основой системы является Arduino nano. Публичный git-репозиторий проекта расположен на gitflic.ru.

Первоисточник
Основная информация по проекту и начальная информация была взята в теме Самодельная MIDI система для баяна или гармони на форуме Русская гармонь

Самая первая (мне так кажется) версия прошивки из темы на форуме была выложена на github. Там же можно найти кое-какую документацию, которую я частично скопировал в этот проект. Для меня она оказалась полезной, т.к. дала понимание, с чего нужно начинать и в каком направлении двигаться. И самое главное: мне стало очевидно, что построение собственного MIDI-баяна – это вполне осуществимая для меня задача.

Почему появился этот проект
Та версия прошивки, которую я взял на форуме (отсюда), для моего баяна не подходила, т.к. мой “Рубин-5” – готово-выборный, а значит нужно существенным образом дорабатывать прошивку, добавляя возможность работы не с 24, а с 52 клапанами в левой клавиатуре. Сразу стало понятно, что примененный в оригинальной прошивке способ чтения клавиш в этом случае работать не будет из-за технических ограничений. Т.е. чтение клавиш надо переделывать. А заодно я решил, что обязательно нужно сделать панель управления, подобную той, что на MIDI-системе Бутусова, только лучше (с OLED-экраном и с более интуитивно-понятной логикой работы управляющих кнопок).

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

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

Описание проекта
Краткий обзор функциональности
Данная реализация MIDI-баяна является, по сути, MIDI-клавиатурой, сделанной на основе баяна “Рубин-5”. Для игры на данном инструменте требуется как минимум синтезатор со стандартным MIDI-входом. Это может быть как программный синтезатор, запущенный на компьютере (в этом случае понадобится переходник MIDI->USB), так и любой синтезатор или синтезаторный модуль с MIDI входом (DIN-5). Встроенного источника звука в данной реализации MIDI-баяна нет.

Баян “Рубин-5” – готово-выборный. Для него заданы 4 логических клавиатуры:

  • правая
  • басы (для режима “готовый аккомпанемент”)
  • аккорды (для режима “готовый аккомпанемент”)
  • выборная (для режима “выборная клавиатура”)
Каждая логическая клавиатура связана со своим отдельным MIDI каналом. По-умолчанию это каналы с 1-го по 4-й. Как следствие, звучание каждой логической клавиатуры настраивается совершенно независимо от остальных.

Ритм-машина, вне зависимости от режима её работы, всегда связана со своим MIDI каналом. По-умолчанию это канал №10.

В MIDI-баяне встроен дифференциальный датчик давления, который измеряет разницу давлений внутри и снаружи герметичного корпуса баяна. Это позволяет управлять громкостью звука с помощью меха, точно так же, как это делается при игре на обычном баяне. Датчик давления можно отключить специальной кнопкой на панели управления; в этом случае всегда будет использоваться значение громкости, заданное в системных настройках (независимо от силы растяжения или сжатия меха инструмента).

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

Реализация MIDI для разных синтезаторов различается. Отличия могут быть как в списке поддерживаемых MIDI команд, так и в том, что на одни и те же команды разные синтезаторы будут реагировать по-разному (например, на управляющие команды переключения между разными банками инструментов). Я в качестве синтезатора выбрал cинтезаторный модуль ATEMP MIDI HW Synth. Поэтому в данном MIDI-баяне есть два режима работы с синтезатором:

  • “ATEMP” – в этом режиме в настройках звука можно выбрать только те значения параметров, которые поддерживаются синтезатором; неподдерживаемые параметры пропускаются; это существенно ускоряет перебор доступных вариантов и упрощает настройки.
  • “General MIDI” – в этом режиме в настройках можно выбрать любые значения параметров, поддерживаемых в текущей версии прошивки.
Если требуется учесть особенности каких-то других синтезаторов, то для этого нужно добавлять их поддержку в прошивку.

Для работы MIDI-системы необходимо для каждого клапана (не для кнопок, а для клапанов) в правой и в левой клавиатурах установить датчик Холла, а на рычаги самих клапанов – неодимовые магниты. Конструкции разных баянов могут очень сильно различаться, поэтому адаптация принципиальной схемы MIDI-баяна и выбор конструктивного решения установки датчиков находятся за рамками данного документа. Текущая реализация (принципиальная схема, печатные пллаты и способ их установки в баян) адаптирована исключительно для баяна “Рубин-5”.

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

Внешний вид и органы управления

1727624070632.jpeg
Рис. 1 Внешний вид панели управления, установленной на баяне “Рубин-5”

1727624097088.png
Рис. 2 Органы управления
  • Экран OLED – отображает текущие настройки и режим работы MIDI системы
  • Кнопки перемещения по меню – перемещают указатель текущего параметра
  • Кнопка “ок” – начинает и заканчивает изменение выбранного параметра
  • Кнопка вызова меню редактирования параметров – вызывает меню редактирования настроек звука для всех клавиатур; а также вызывает меню редактирования системных параметров
  • Программируемые кнопки F1-F4 – позволяют одним нажатием сразу перейти в режим редактирования выбранного ранее параметра звука или системного параметра
  • Кнопки пресетов – загружают выбранный пресет из энергонезависимой памяти, а также позволяют записывать текущие настройки в любой выбранный пресет
  • Кнопка синхронизации синтезатора – загружает текущие настройки в подключённый синтезатор
  • Кнопка включения датчика давления – включает или выключает датчик давления
  • Кнопка управления ритм-машиной – включает/выключает ритм-машину, позволяет выбрать режим работы ритм-машины и вызывает меню настройки ритм-машины
  • Кнопка выбора варианта ритма – циклически перебирает все имеющиеся в прошивке варианты ритма
  • Кнопки управления темпом – уменьшают или увеличивают темп воспроизведения выбранного варианта ритма
  • Индикаторы пресетов – показывают выбранный в данный момент пресет
  • Индикатор режима ритм-машины – показывает текущий режим работы ритм-машины
  • Индикатор активности MIDI порта – мигает при отправке каждой MIDI-команды в синтезатор
  • Системный индикатор – используется во время программирования программируемых кнопок F1-F4
Прошивка
Исходные файлы прошивки расположены в папке tes_midi_bayan. Для загрузки прошивки в микроконтроллер Arduino Nano нужно открыть файл tes_midi_bayan.ino в Arduino IDE и нажать кнопку “загрузить”.

Для компиляции прошивки очень желательно использовать ядро GyverCore, причём в нём стоит включить собственную реализацию порта UART. (Читайте документацию на ядро.) Это нужно для того, чтобы максимально увеличить объём доступной оперативной памяти. Использование ядра GyverCore позволило мне сэкономить 97 байт ОЗУ.

Без изменений прошивку можно использовать только в том случае, если вы устанавливаете MIDI систему в баян “Рубин-5”, используя схему и платы из каталога boards без изменений. Для установки MIDI системы в какой-нибудь другой баян, вам скорее всего понадобится адаптировать приведённую в репозитории схему для вашего баяна, и, соответственно, разработать ваш собственный вариант печатных плат.

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

Использованные библиотеки
  • Для работы с OLED-дисплеем: GyverOLED
И это всё.

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

Принципиальная схема
Исходные файлы принципиальной схемы находятся в папке boards. Разработка схемы и печатных плат велась в онлайн-редакторе EasyEDA. Приведенные файлы нужно открывать в онлайн-редакторе:

fig1

Для точной разметки расположения датчиков Холла и остальных деталей на платах датчиков правой и левой клавиатур а также кнопок и светодиодов на плате панели управления были нарисованы чертежи, расположенные в папке 2D_and_3D_models. Затем эти чертежи были экспортированы в виде графических файлов и вставлены в слой “Documentation” редактора печатных плат EasyEDA. С соответствующим масштабированием, чтобы расстановку деталей на печатной плате можно было делать просто “поверх” отметок, сделанных на чертежах.

Чертежи разработаны в программе “Компас 3D Home”.

Корпус панели управления
Для корпуса панели управления разработаны 3 детали:

  • сам корпус;
  • кнопка диаметром 15 мм
  • кнопка диаметром 10 мм
Для большего удобства проектирования была также нарисована габаритная модель самой платы панели управления.

Все файлы находятся в папке 2D_and_3D_models. Всё разработано в программе “Компас 3D Home”.

Ссылки
  1. Страница проекта на gitflic.ru
  2. Руководство пользователя MIDI-баяна
  3. Исходная тема на форуме “Русская гармонь”
  4. Синтезаторный модуль ATEMP MIDI HW Synth, к которому адаптирована прошивка
  5. Ядро для Arduino nano GyverCore
  6. Библиотека для OLED дисплея: GyverOLED
  7. История проекта в моём блоге
Благодарности

Отдельное спасибо Alex Gyver за обучающие видео, статьи и всё остальное. Без всего этого, скорее всего, я бы даже не подумал реализовывать данный проект.
 
  • Лойс +1
Реакции: Bruzzer