Мысли о будущем

Проект MIDI-баяна я опубликовал ранее, а сегодня я туда добавил коротенький видео-обзор. (Лишний раз убедился, что видео-блогер из меня не получится. Для выступлений перед камерой нужна спец-привычка, чтобы с одной стороны не тупить, а с другой стороны всё говорить правильно с первого раза.)

Но тем не менее, из непродолжительной эксплуатации инструмента я уже сделал несколько выводов.

Во-первых, надо добавить режим Portamento (если он нормально поддерживается моим синтезатором). Для этого нужна будет одна дополнительная настройка в списке параметров звука. Это не проблема. Но нужна будет ещё кнопка активации этого самого режима; без кнопки нехорошо. И единственный способ организовать такую кнопку — это сделать программируемые кнопки быстрого доступа к настройкам ещё более многофункциональными: чтобы можно было их переключать в разные режимы работы специальной системной настройкой. Т.е., например, кнопка F4 может быть настроена либо как кнопка быстрого доступа, либо как кнопка активации режима Portamento. Общая идея, как такое можно сделать, у меня уже есть. Но программирования там будет довольно много, больше, чем на 1 вечер.

Во-вторых, режим работы «активного меха» (т.е. датчика давления) надо делать частью данных пресета. Потому что для одних инструментов (аккордеон, орган, и может ещё какие-то) регулировка громкости мехом звучит очень органично, а, например, для фортепиано или гитары — не звучит совсем. Это тоже понятно как делать, и работы там очень немного.

В-третьих, с активным мехом не получается сделать резкий акцент (атаку), как на настоящей пневматике. Тремоло мехом тоже совершенно не звучит. Думаю, дело в том, что измерения с датчика берутся слишком редко. Сейчас там настроено 20 раз в секунду, но похоже, надо снимать показания чаще, т.к. за секунду в режиме тремоло можно мехом дёрнуть туда-сюда 6-8 раз. И если учесть, что данные с датчика фильтруются (фильтр «экспоненциальное бегущее среднее»), то данные с датчика просто не успевают за мехом.

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

В-пятых, четырёх кнопок быстрого доступа явно мало. Надо бы расширить их количество. И я уже понимаю, как. Нужно будет научить прошивку различать однократное, двойное, тройное и т.д. нажатия кнопок быстрого доступа. (Думаю, что пока можно будет остановиться на тройном). Это я тоже понимаю, как сделать. Но там работы тоже много, примерно на недельку, если вечерами.

В-шестых, я в первой версии прошивки тупанул, и использовал 32-разрядные счётчики таймеров, хотя вполне хватило бы 16-разрядных. Надо будет переделать. (И тем самым сэкономить примерно 60 байтов ОЗУ).

Продолжаю накапливать идеи для реализации во второй версии прошивки.

Рис. 1 КДПВ

Несколько деталей по завершающему этапу

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

Для проверки того, насколько хорошо уложены жгуты проводов, мне пришлось снять заднюю декоративную крышку (см. рис. 1). Воспользовался случаем, чтобы показать, как устранено провисание платы датчиков 3-го ряда. На самой плате я так сильно, как только мог, затянул пластиковые стяжки. И за образовавшиеся петли подтянул плату к металлическим распоркам.

Рис. 1

Последней операцией по герметизации правого полукорпуса было закрепление MIDI гнезда. Сами гнёзда я герметизировал ранее. А сейчас обмазал MIDI гнездо снаружи силиконовым герметиком и установил его на место. Раньше я думал, что надо это гнездо фиксировать на термоклей изнутри. Но сейчас подумал, что усилие при выдёргивании MIDI провода там довольно большое, поэтому всё-таки просверлил 2 отверстия Ø3 мм и закрепил гнездо винтами М3. В просверленные отверстия винты вошли очень плотно; пришлось их даже вкручивать. Ну и затянул я их на совесть. Теперь гнездо держится сверх-надёжно.

Рис. 2

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

Рис. 3
Рис. 4

Проект «MIDI-баян» закончен и опубликован

Страница с кратким описанием проекта здесь.

Все имеющиеся материалы, чертежи, схемы и прошивка опубликованы на gitflic.ru.

Рис. 1

Дело продвигается

В прошедшие выходные было сделано два дела:

  • Изготовлено дно из стеклотекстолита для панели управления.
  • Установлена на место декоративная решётка правой половинки.
Рис. 1 КДПВ
Читать далее «Дело продвигается»

Панель управления в сборе

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

Я поражаюсь, насколько просто в наше время делать плотную компоновку всех деталей. Это всё исключительно из-за того, что есть возможность делать трёхмерные модели и заниматься подгонкой не вживую, а на компьютере. Ну и, само собой, объёмная печать даёт такие возможности, о которых в период моего активного радиолюбительства в студенческие годы я и мечтать не смел.

Рис. 1

К сожалению, проверочная сборка показала, что материал для дна я выбрал неудачно. Дно я сделал из стенки вентиляционного короба (см. рис. 2).

Рис. 2

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

Ну и прикинул, как панель управления будет выглядеть на декоративной решетке:

Рис. 3

Вполне приемлемо.

Дурацкий баг

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

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

И внезапно обнаружил, что переключение «пресетов» отлично работает при отключенном левом полукорпусе, но глючит при подключенном.

На поиск бага ушло 5 часов. Баг оказался дурацкий: я забыл, что один из членов структуры — это 2-битовое поле. И в одном месте я самым беспечным образом обращался с ним, как с обычным целым. И не мог понять, почему не срабатывает проверка на index == number_of_elements. А элементов там 4. А поле — 2-битовое. Ага.

Я про это вспомнил только тогда, когда психанул и напихал в прошивку «отладочную печать» через светодиоды панели управления. И очень удивился когда после 3 стало 0. А потом ка-а-ак понял!

Рис. 1

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

Готов нарисованный ранее корпус для панели управления.

Кнопки вставлены «просто так», платы внутри корпуса пока нет, и вместо зкранчика пока синий скотч.

Выглядит, вполне ожидаемо, как «корпус, напечатанный на 3D принтере». Пока пусть будет так, как есть. В будущем, может быть, я сподоблюсь как-то отшлифовать наружную поверхность, чтобы было гладко и блестяще (или хотя бы матово).

Рис. 1

Печать заказывал здесь.

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

Поскольку прошивка готова, и датчики настроены, нужно продвигаться к следующему этапу: 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