Нарисовал корпус панели управления

Поскольку прошивка готова, и датчики настроены, нужно продвигаться к следующему этапу: 3D печать корпуса панели управления и кнопок. Эскиз расположения кнопок и светодиодов на плате у меня был, на его основе и разрабатывал модель корпуса.

Сначала сделал модель самой печатной платы, чтобы по ней проверять правильность расположения отверстий в корпусе и правильность размеров кнопок. Потом нарисовал корпус, кнопки, и объединил всё в сборку. Очень удобно всё это делать в Компас 3D: делаешь сам корпус временно невидимым, и можешь проверять, как кнопки располагаются относительно микровыключателей, запаянных на плату. Как раньше без таких программ жили — решительно непонятно.

Рис. 1

Вроде норм. Единственное место, которое мне не нравится — это расположение левой «стрелки» вплотную к экрану. Надо было разнести ещё миллиметра на 3. Но уже поздно; расположение элементов определяется платой, а её я переделывать совершенно точно не буду.

Теперь надо прицениться к печати этого корпуса и 22-х кнопок (16 на Ø10 мм, и 6 на Ø15 мм).

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

Рис. 2

Прошивка для MIDI-баяна готова

Сегодня вечером после работы я закончил работу над прошивкой MIDI-баяна. Даже не верится. Реализовал все функции, которые хотел:

  • Полная поддержка готово-выборной левой клавиатуры. На механизм переключателя установлен свой собственный датчик, и контроллер при включении сам определяет текущий режим. Само собой, переключение режимов тоже определяется. В готовом режиме басы и аккорды играют в разные MIDI каналы, которые можно настраивать совершенно независимо. Т.е. на бас можно настроить звук контрабаса, а на аккорды — гитару или, например, фортепиано. В режиме выборной клавиатуры вся левая рука играет в один канал (что логично). Само собой, канал для выборки настраивается независимо от каналов баса и аккордов.
  • Особенность конструкции левой клавиатуры моего баяна в том, что басы там играют октавами. Т.е. при нажатии одной клавиши баса механизм открывает два клапана: одна нота в контроктаве и одновременно с ней та же нота в большой октаве. Для баяна это хорошо, т.к. добавляет красок в басовый звук. А вот для MIDI инструмента — это уже недостаток, т.к. далеко не каждый инструмент будет хорошо звучать с октавами в басах. Поэтому я сделал спец-режим «запрет октав в басах». Если он включен, то контроллер игнорирует нажатия более высоких басовых нот, если уже нажата соответствующая низкая нота. Само собой, датчики должны быть настроены так, чтобы датчик низкой ноты срабатывал чуть-чуть раньше, чем датчик высокой ноты.
  • Работа меха регистрируется дифференциальным датчиком давления, который измеряет разницу между давлением внутри герметичного корпуса и давлением снаружи. Также есть режим игры с выключенным датчиком давления; в этом случае громкость звука настраивается через меню настроек.
  • Имеется возможность сохранения 6 вариантов настроек всех MIDI-каналов (правая рука, бас, аккорд и выборка) — т.н. «пресетов». Каждый пресет включается своей кнопкой; текущий пресет обозначается соответствующим горящим светодиодом. (См. заметку про дизайн панели управления.) Запоминание настроек происходит интуитивно просто: как только все звуки настроены как надо, достаточно нажать и удерживать кнопку соответствующего пресета. После обнаружения длительного нажатия, соответствующий светодиод сначала быстро заморгает, обозначая, что «сейчас будет записан выбранный пресет». Если в течение 3-х секунд после начала моргания кнопку не отпустить, то пресет запишется в энергонезависимую память (EEPROM). По похожему алгоритму запоминаются радиостанции в некоторых автомагнитолах.
  • Поскольку настроек у MIDI каналов много, и перебирать их через меню не всегда удобно, реализованы 4 настраиваемых кнопки быстрого доступа к настройкам. Если в момент редактирования нужного параметра нажать и удерживать кнопку быстрого доступа, то эта кнопка станет связана с этим самым параметром. И для повторного изменения данного параметра достаточно будет один раз коротко нажать эту кнопку быстрого доступа (и сразу можно будет менять параметр «стрелочками»). Очень удобно.
  • Если контроллер обнаруживает, что настройки звука изменились, то светодиод текущего пресета начинает медленно мигать, показывая, что имеются несохранённые изменения. Эти изменения можно сохранить либо в текущем пресете, либо в любом другом. А можно и не сохранять.
  • Имеется встроенная ритм-машина, которая может работать в двух режимах:
    • ручной — когда при каждом нажатии басовых клавиш проигрывается один звук ударных инструментов (например барабан «бочка»), а при нажатии аккордов — другой звук (например «тарелка»).
    • автоматический — когда проигрываются заранее запрограммированные мелодии (в данный момент у меня сделаны 5 штук: 2 метронома (3/4 и 4/4) и 3 простых ритма). Автоматический режим может стартовать либо по кнопке на панели управления, либо при первом нажатии любой басовой клавиши.
  • Имеется «упрощенный» режим выбора некоторых настроек, адаптированный специально для синтезатора ATEMP MIDI HW Synth. В этом режиме значения параметров, не реализованные в синтезаторе, просто пропускаются; выбрать можно только то, что поддерживается синтезатором. В основном это касается выбора дополнительных банков инструментов.
  • Все настройки сохраняются с энергонезависимой памяти, и при следующем включении инструмент восстанавливает то состояние, в котором он был выключен.

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

Рис. 1

Продолжая тему джазовой гармонии на баяне

По следам предыдущих публикаций.

Сделал сводку по основным «джазовым» аккордам — см. рис. 1. Это для «До». Для остальных нот — всё по аналогии (у баянистов здесь не должно возникать вопросов).

На схеме в «числителе» указаны готовые аккорды, которые надо нажимать, а в «знаменателе» — басы. Нужный джазовый аккорд получается при одновременном нажатии баса и «готовых» аккордов.

Рис. 1

Эта информация будет полезна, например, для игры т.н. «turnaround progression» которая используется в очень многих джазовых произведениях:

Dm7 - G7 - Cmaj7 - A7

Вести с MIDI-полей

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

А пока докладываю о том, что было сделано за всё это время:

  • В библиотеку работы со светодиодами я добавил режим медленного мигания светодиода. Пригодится для того, чтобы показывать, что данные текущего пресета (настроек тембров и прочих звуковых параметров) были изменены, но еще не сохранены в EEPROM.
  • Добавил глобальную настройку «Общая громкость» — чтобы можно было вручную настраивать громкость одновременно для всех активных MIDI-каналов.
  • Добавлено обновление значений громкости при включении/выключении датчика давления (значение общей громкости берется либо из датчика давления, либо из глобальной настройки соответственно).
  • Сделано обновление значений громкости в каналах левой руки при переключении режима готовой/выборной клавиатуры.
  • Сделано сохранение и восстановление глобальных настроек и пресетов в/из EEPROM (сохранение пресетов производится длительным нажатием кнопки соответствующего пресета, а глобальные настройки всегда автоматически сохраняются спустя 8 секунд с момента последнего изменения). В результате при включении баян приходит в то же состоянии, в каком он находился в момент выключения. Мне очень нравится, как всё получилось.
  • Сделал функцию отправки всех настроек в синтезатор. Настройки отправляются либо при смене пресета, либо по нажатию спец-кнопки на панели управления.
  • Добавил удобное переключения банков инструментов для синтезатора ATEMP. Для некоторых инструментов могут быть, а могут и не быть дополнительные варианты звучания; эти дополнительные варианты расположены в дополнительных т.н. «банках». В каких именно — описано в документации на синтезатор. Я сделал так, чтобы банки инструментов можно было менять только на те, в которых есть доп. инструменты; т.е. если для какого-то инструмента есть всего 3 варианта звучания, то для такого инструмента можно выбрать только один из этих 3-х вариантов (вместо того, чтобы перебирать все 127 возможных значений). Это на порядки упрощает поиск нужного тембра.
  • Сделан экран редактирования глобальных настроек (общая громкость, режим «running sttatus» и проч.)
  • Небольшой рефакторинг старого кода.

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

В исходниках уже 3910 строк; продолжаю работу над прошивкой.

Рис. 1

Мысли про скорость

Пока я нахожусь вдали от компьютера, приходят в голову разные мысли. Одна из них — это вопрос: способен ли будет мой баян перегрузить MIDI out порт командами в том случае, когда будут меняться настройки всех трёх активных midi каналов при нажатии кнопки «смена пресета». Для каждого канала надо будет установить примерно 15 параметров. Один параметр — это одна midi команда из 3-х байтов. Т.е. при смене пресета нужно будет отправить порядка 50 байт, и мне было интересно, сколько времени это может занять; будет ли эта задержка заметна во время игры.

А тут выдалось время на то, чтобы посчитать.

Скорость обмена данными у MIDI интерфейса — 31250 бод. То есть порядка 2900 байт в секунду. То есть порядка 1000 midi-команд в секунду. То есть мои несчастные 15 команд пролетят за 15 миллисекунд.

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

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

Рис. 1 (КДПВ)

Баян впервые собран

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

Можно играть обеими руками.

По механике — осталось герметизировать все отверстия и придумать, как крепить жгут проводов, идущий из одного полукорпуса в другой.

Черновая проверка датчика давления показала, что отработка нештатных ситуаций прошивкой работает отлично. 🙂 При одновременной работе датчика давления и большого количества музыкальных клавиш переполнялась внутренняя очередь MIDI-сообщений и прошивка вылетала в индикацию внутренней ошибки (баян перестаёт реагировать на внешние раздражители и высвечивает на светодиодах код ошибки). Видимо, очередь на 4 MIDI-сообщения была слишком маленькой; увеличил до 7. И слегка поменял внутреннюю логику разгребания этой очереди и отправки команд в синтезатор через MIDI-out порт.

Сейчас всё работает чётенько. 🙂

Но с прошивкой ещё возиться и возиться. Это для отладки электроники и механики там сейчас есть всё, что надо. А для игры не хватает ещё много чего. Продолжу работу над баяном после 15 августа. А пока другие дела.

Рис. 1

Режим готовых аккордов настроен

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

Я сегодня потратил часа 2, чтобы настроить датчики для режима аккордов. И когда я переключил на выборку, то для 9 нот из 12 была сбита настройка выборки: магниты пролетали мимо датчиков, и в крайнем положении рычагов ноты не звучали.

Это потому, что, как оказалось, в разных случаях при нажатии клавиш рычаги опускаются на разную глубину:

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

Получается, что датчик должен ловить магнит в довольно большом диапазоне расстояний. Одиночный магнит с такой задачей не справляется, и пришлось наклеить ещё по одному магниту на каждый «аккордовый» рычаг (см. рис. 1). И только после этого начали как надо работать и аккорды, и выборка.

Сегодня я с этим возился аж до полуночи. Завтра на свежую голову тщательно проверю ещё раз все датчики и буду прикручивать плату датчиков в рабочем положении. После этого просверлю отверстие в левой деке и, пожалуй, продену в него провод. (Операция эта условно-необратимая, потому что потом я припаяю к концу провода разъём, и вытащить провод обратно уже будет нельзя.

Если повезёт, то завтра я смогу сыграть на баяне обеими руками, но без меха (потому что внутренний объём пока будет негерметичен). Герметизировать всё буду уже потом, завтра не успею.

Рис. 1

Настроены датчики левой клавиатуры

Почти настроены. Выборный режим полностью работает (см. видео ниже).

Несмотря на то, что в выборном режиме все датчики работают нормально, нужно будет дополнительно настраивать 12 датчиков, которые работают в режиме готовых аккордов. Дело в том, что в выборном режиме рычаги нажимаются «глубже», т.е. опускаются ниже на плату. А в режиме готовых аккордов те же рычаги останавливаются раньше. И часть датчиков (бОльшая часть) не срабатывает. Их надо будет поднимать над платой, и ловить промежуточное положение, чтобы они звучали и в крайнем положении рычага для выборного режима, и в крайнем положении для готового. Очень надеюсь, что такое положение поймать удастся. Иначе придётся на эти 12 рычагов переклеивать магниты, чтобы они были двойные.

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

Рис. 1

Занимаюсь настройкой положения датчиков левой клавиатуры

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

Дело, можно сказать, вообще не двигалось, пока я не нашёл способ фиксировать плату в одном и том же положении, не прикручивая её шурупами. (Прикручивать буду в самом конце, когда буду уверен, что все датчики работают как надо и дальнейшая коррекция положения платы уже точно не нужна). Положение «ближе-дальше» определяется шириной картонной проставки, временно (а может и не временно) приклеенной перед платой, между бортиком и платой (см. рис. 1). А положение «вправо-влево» определяется «приметами на местности»; в данном случае — центр крепёжного отверстия платы должен точно совпадать с краем проставки.

Эта проставка на рис. 1 — уже третья, шириной 5 мм. Предыдущие 2 (7 мм и 6 мм) оказались слишком широкими, не позволяющими правильно выставить дальний ряд датчиков. В текущем положении далчики ближнего ряда слишком высовываются вперёд, но эту проблему можно решить подгибкой ножек.

Процесс очень небыстрый. Вчера за 2 часа я настроил только половину басов. Т.е. 12 датчиков дальнего ряда. 12 — потому что в этом баяне басы играют октавами, т.е., например, одновременно с самым левым рычагом на рис. 1 (Фа контр октавы) нажимается и 13-й рычаг (Фа большой октавы).

Эта особенность механизма, кстати, является проблемой для MIDI инструмента. Далеко не каждый вариант басового звука будет хорошо звучать октавами. Поэтому в прошивке буду делать отключаемый режим программного запрета на октавы в басах; т.е. если нижняя басовая нота уже звучит, то контроллер не будет отправлять в синтезатор команду включения верхней басовой ноты даже если соответствующий датчик сработал. (Придётся израсходовать 2 байта ОЗУ на запоминание текущего состояния 12-ти нижних басовых нот.)

Рис. 1

Полбаяна уже умеет играть

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

Декоративную решетку пока прикрутить не получится, т.к. она будет упираться в плату датчиков 1-го и 2-го рядов (см. рис. 1). Как я ни старался опустить её как можно ниже, всё равно пришлось её поднять над рычагами так, что она в результате не помещается в штатные габариты этой части баяна. Положение платы выверено очень точно; если её опустить вниз хотя бы на 0.5 миллиметра, то некоторые рычаги клапанов среднего ряда по ней уже будут стучать, что недопустимо. Ну вот такой у меня баян, ничего с этим не поделать.

Придётся декоративную решётку тоже поднимать миллиметра на 2-3. Буду изобретать какие-нибудь прокладки между решеткой и корпусом баяна.

А пока решетки нет — плату панели управления пришлось прилепить на внешнюю поверхность корпуса. С этим можно будет прожить до тех пор, когда будет прикручена решетка. Потом прилеплю на саму решётку. (Клею на 2-сторонний скотч, естественно.)

Рис. 1

Вот так выглядит правый полукорпус изнутри:

Рис. 2

Герметизировать отверстие для проводов я пока не стал; на тот случай, если вдруг придётся зачем-нибудь всё разбирать.

Но разъёмы (MIDI-out и питание) я уже герметизировал. Обернул каптоновым скотчем — получилась как-бы опалубка, которую я залил термоклеем. В результате все щели в разъёмах перекрыты. При самой финальной сборке останется дополнительно герметизировать отверстие MIDI разъёма, и всё. Отверстие разъёма питания герметизировать е буду, т.к. мне кажется, что этот разъём и так уже достаточно плотно сидит в корпусе на резьбе.

Думал я, что вчера и сегодня буду работать над левым полукорпусом. Но не получилось. Оба вечера я играл на правой половинке: разучиваю «The Cat» Джимми Смита. Очень,очень затягивающее занятие. Но надо будет хотя бы завтра вечером начать работу над левой клавиатурой.