Соединительная пластина с ближнего края платы убрана, уголок прикручен. Плата теперь совсем не прогибается, лежит ровно. Те самые рычаги (Соль и Ля-диез 2 октавы) ни за что не задевают.
Но одна мелкая проблема всё-таки осталась. Оказывается, Ми 3-й октавы колотит по микросхеме. Достаёт не металлическим рычагом (это невозможно, от этого я защитился), а углом резинки, которая крепит сам клапан на рычаге. Но я посмотрел — там с этой резинки можно будет безнаказанно срезать 1-1.5 мм, так что этот стук мы обязательно уберём. В остальном — можно начинать подгибать датчики по месту, и размечать на рычагах места приклеивания магнитов.
Сегодня я победил половину проблемы, обозначенной в прошлой заметке. Сначала изготовил новую соединительную пластину, в отверстиях которой нарезал резьбу М3. Очень хорошо, что получилось просверлить отверстия на расстоянии ровно 20 мм друг от друга. Для моих кривых рук и домашних условий это не самая простая задача. Потом аккуратно раззенковал отверстия в платах (см. рис. 1).
Платы соединились отлично. Точно встык, без зазора и без натяга. Шляпки винтов всё-таки выпирают на какую-то долю миллиметра, но это оказалось некритично.
Рычаги, показанные зелёными стрелками на рис. 3, за утопленные в плату винты не задевают. Даже есть запас в полмиллиметра примерно.
Теперь осталось пустить по ближнему краю платы алюминиевый уголок 10 мм, чтобы придать плате жесткость на изгиб и устранить тем самым провисания. Точками крепления уголка будут:
крепёжные отверстия платы по углам;
отверстия, через которые сейчас закреплена соединительная пластина;
и, может быть, на правой части платы я просверлю ещё одно отверстие, если там будет пространство, свободное от дорожек.
Но думаю, что даже имеющихся в данный момент отверстий должно хватить.
Для мелких плат (до 10 см2) существует возможность заказа плат в Китае «за 2 бакса» (см. рис. 1). Как в старые добрые времена на JLCPCB. Сайт: https://www.nextpcb.com. Там оплата через Алик, но народ с форума AlexGyver пишет, что всё нормально работает. Правда, получаешь 5 плат вместо одной, но за эти деньги такое вполне приемлемо; всё равно дешевле в РФ не заказать нигде.
А вот для заказа единичных плат бОльшего размера уже имеет смысл обращаться сюда: http://www.pcbnn.ru. Здесь уже будет несколько дешевле, хотя срок изготовления тоже немаленький (у меня было 3 недели).
Добавить алюминиевый уголок (по верхнему краю платы) в качестве усилителя жесткости платы 1 и 2 рядов. Это должно полностью предотвратить провисание платы.
Плата 3-го ряда провисать не будет, потому что за грифом есть 2 перемычки между грифом и корпусом, к которым плату можно притянуть кабельными стяжками или чем-нибудь в этом роде.
Сегодня я приклеил бруски, к которым будут крепиться платы датчиков правой клавиатуры.
Примерил плату 1 и 2 рядов и увидел подтверждение моих опасений. В том месте, где соединяются 2 половинки платы, со стороны датчиков торчат 2 гайки М3. Высота у них примерно 2.5 мм. И вот как раз эта их высота — лишняя. Как раз над этими гайками расположены рычаги клапанов среднего ряда, и при нажатии соответствующих клавиш эти рычаги стучат по этим двум гайкам. В остальных местах всё нормально, рычаги до платы не достают; расчёт был точным.
Теперь надо придумывать, как соединить платы в этом месте так, чтобы со стороны деталей из отверстий вообще ничего не торчало.
В голову пока приходят ровно две мысли:
Раззенковать отверстия в платах и закрутить винты со стороны деталей. А соединительную пластину сделать новую, и нарезать в её отверстиях резьбу М3. Этот вариант мне не очень нравится потому, что зенковка может сильно ослабить крепежные отверстия. Плата толщиной всего 1.5 мм. Что там останется после зенковки?
Оставить эту пластину, оставить эти винты, но со стороны деталей вместо гаек залить отверстия эпоксидкой. А потом обрезать винты заподлицо с поверхностью платы. Этот вариант мне не нравится тем, что соединение станет неразъёмным. Но главное, я не уверен, что эпоксидка будет нормально держать платы «за отверстия».
В общем, я решил, что эту проблему надо решать на свежую голову, и на сегодня работу над баяном закончил.
Сегодня я в первый раз примерил платы датчиков правой клавиатуры по месту (см. рис. 1).
В целом, результатом примерки я доволен. Больше всего я переживал за распределение датчиков вдоль клавиатуры; типа, с одного конца расположение первого датчика будет правильное, а с другого конца накопится ошибка в расчетах, и датчик будет либо слишком близко, либо слишком далеко.
Но нет. Видимо, я с перепугу всё намерял правильно, и датчики распределены равномерно, каждый на расстоянии 4-5 мм от центра «своего» рычага.
Единственное, середины плат слегка провисают, и надо будет придумать, как для них сделать какие-нибудь подпорки. Для платы 3-го ряда, думаю, с этим не будет проблем. А вот для платы 1-го и 2-го рядов я пока не вижу очевидного места для подпорки (такое впечатление, что поставить ее так, чтобы она не мешала ходу клапанов, не получится. Ну, в смысле, в конце концов обязательно получится, но придётся постараться.
Следующий шаг — приклеить к корпусу баяна брусочки, к которым будут крепиться края плат. Т.е. снова столярка.
А ещё я смотрю на то, как надо будет прокладывать провода, соединяющие нижний край платы 1-2 рядов с верхним краем платы 3-го ряда, и начинаю подозревать, что мне может не хватить закупленных ранее 10 метров провода МГТФ. 4 метра уже ушло на соединение платы левой клавиатуры и платы микропроцессора: 5 проводов по 80 см (50 см на растяжение меха и по 15 см с каждой стороны на закрепление и монтаж). 1.5-2 метра ушло на соединение для тестирования «на столе». Осталось примерно 3 метра — т.е. примерно 60 см если тянуть 5-проводным жгутом. Уже понятно, что буду повторно использовать «стендовые» провода (спаять их и натянуть на спайку термоусадку — не проблема вообще). Но даже в этом случае провода может оказаться впритык. Скорее всего не буду мудрить, и закуплю ещё метров 10 МГТФа, чтобы ни в чём себе не отказывать.
Сегодня — важный день для моего MIDI-баяна. Изготовлены и отлажены все платы в режиме «на столе» (см. рис. 1). Можно начинать их монтировать в баян.
Проверено всё, что может быть проверено на столе:
Работа каждого датчика холла как для правой, так и для левой клавиатур.
Работа датчика положения переключателя выборной клавиатуры.
Работа датчика давления
Правильность разделения клавиатур по MIDI каналам («правая», «выборная», «бас» и «аккорд»).
Работа ритм-машины.
На рис. 1 показаны:
плата микроконтроллера (будет размещаться внутри герметичного объёма)
плата панели управления
плата датчиков 1-го и 2-го рядов правой клавиатуры
плата датчиков 3-го ряда правой клавиатуры
плата датчиков левой клавиатуры
датчик давления (будет размещаться внутри герметичного объёма)
датчик положения переключателя выборной клавиатуры
Мне было очень интересно, правильно ли я распределил датчики на плате левой клавиатуры или нет. Там очень маленькие расстояния между рычагами, на которых установлены магниты. Достал левый полукорпус, примерил:
Все расстояния, к счастью, совпадают. А то пришлось бы переделывать плату. Сейчас плата не пролезает между рычагами; это потому, что при монтаже все датчики нужно будет аккуратно повернуть «боком» и слегка пригнуть вниз, чтобы точно спозиционировать их относительно магнитов.
И вообще, монтаж плат датчиков — это будет самая трудная работа. Нужно будет точно позиционировать каждый датчик (всего их 107). И надо будет ещё клеить магниты на рычаги правой клавиатуры.
А пока — демонстрация того, что готово на текущий момент.
Я решил, что запаивать его нужно на проводках, а не на контактную гребенку. В таком варианте можно будет легко регулировать высоту экранчика над платой; это может понадобиться, чтобы подогнать экранчик к корпусу панели управления (который ещё предстоит разработать и напечатать).
Выпаивание контактной гребенки из экранчика — это, для моих кривых рук, процесс с негарантированным результатом. Придётся сильно греть плату дисплея, и я не уверен, что это не испортит сам экранчик. Поэтому пусть этот дисплей остаётся с гребенкой, а я припаял синий дисплей. Припаял его проводом МГТФ 0.2 и прилепил на плату на двусторонний скотч. Получилось отлично. Всё работает.
На видео ниже — довольно полная демонстрация того, что имеется на данный момент. Экранчик светится, кнопки работают, ритм-машина играет, датчики клавиатуры работают, настройки меняются, MIDI команды передаются в синтезатор. Можно даже что-то пытаться «сыграть» под ритм-аккомпанемент, поднося магнит к датчикам (в конце видео).
Прошивку я довёл до состояния, когда уже можно боле менее пользоваться панелью управления. И я решил, что на очереди — запайка платы датчиков левой клавиатуры. Потом проверю её работу на столе и буду монтировать всё это уже в сам баян.
Продолжаю отладку плат. В прошлой серии я обнаружил, что не работает экран.
Пришлось его выпаять из платы панели управления и начать исследование. Воткнул я экран на макетку, и на эту же макетку перекинул сигнальные провода I2C и взял питание со свободного (пока) разъёма основной платы. В таком виде экран нормально завёлся. Но самое главное — это даже не экран, а то, что запустился основной рабочий цикл прошивки. А значит появилась возможность проверить работу всех датчиков правой клавиатуры. Это — самое главное, что я хотел сделать.
На удивление, глюков почти не было. В смысле, их было всего два:
Не срабатывал датчик самой высокой ноты среднего ряда.
2 датчика самых высоких нот третьего ряда почему-то срабатывали вместе: подношу магнит к одному датчику, а он срабатывает вместе с соседним. И то же самое, когда я подношу магнит к соседнему датчику.
Первый глюк вылечился тщательной пропайкой сигнального вывода датчика; был плохой контакт с «пятаком» верхнего слоя. Второй глюк вылечился после промывки соответствующего участка платы спиртом. Видимо, какая-то грязь изображала из себя «соплю». Теперь все датчики работают как надо (см. видео ниже).
Потом я перешёл к плате управления. Начал с выяснения, почему не срабатывает ни одна кнопка. Оказалось, что на дорожке, которая соединяет выход каскада регистров с разъёмом, было аж два разрыва. Как обычно, зачистил маску (иголкой) и спаял дорожку тоненьким проводком. Кнопки теперь работают все.
И осталась последняя проблема — неработающий (на плате) дисплей. Провёл я эксперимент. Вместо того чтобы запаивать экранчик на место, я его воткнул на макетку, и пробросил на ту же макетку сигнальные провода и питание прямо из того разъёма, куда должен запаиваться экранчик. И оно заработало. То есть с платой всё нормально, а проблема была в каком-то плохом контакте после предыдущего монтажа.
Следующий шаг — запаять экранчик на место. В этот раз проводками, а не на гребёнку. И если оно заработает, то на этом отладка «железной» части всех плат (кроме платы левой клавиатуры) будет закончена. Можно будет либо браться за плату левой клавиатуры, либо дорабатывать прошивку, убирая сделанные ранее «костыли» (временные решения) и адаптируя её к полноценной панели управления.
Спаял я все платы, кроме левой клавиатуры. Левую, думаю, можно пока отложить, она для работы некритична. Там всего-то в двух местах нужно кое-что закомментировать в коде, чтобы отсутствие данных из левой клавиатуры не мешало отлаживать остальное.
Как я и говорил в предыдущей заметке, с первого раза всё это хозяйство не завелось.
Выглядит это так: при включении не загорается экран. Светодиоды нормально сбрасываются в «ноль», но экран остается пустым. Пришлось отлаживать.
Сначала я решил убедиться, что каскад светодиодов работает, как запланировано. Сделал пару прошивок со вспомогательным кодом, чтобы посмотреть, все ли светодиоды загораются, и правильный ли у них в результате порядок. Оказалось, что один светодиод какой-то странный — плохой контакт где-то внутри; оживает при шевелении. Пришлось заменить на исправный.
С порядком оказалось чуть веселее. Там же у меня каскад из двух регистров. И данные из буфера в каскад я загружаю из цикла. А цикл, чисто на автомате, я начал с первого элемента массива. Забыл, что младший байт должен грузиться последним, т.к. загрузка этого каскада идёт «снизу вверх». В результате данные младшего регистра попадали в старший, и наоборот. Поправил.
В результате убедился, что как минимум управление светодиодами работает как надо. (Ну, помимо того, что всё хозяйство успешно питается от внешнего БП через спец-разъём, а не через USB на ардуинке.)
Затем с помощью очередной отладочной прошивки убедился в том, что до основного цикла дело не доходит. Т.е. выполнение кода останавливается где-то в блоке инициализации.
Раз у меня есть светодиоды, значит на них можно выводить «отладочную печать». 🙂 Добавил метод showDebugCode(), который выводит 9-битовое число на светодиоды. В двоичном коде, естественно. И расставил в блоке инициализации контрольные точки. Которые показали, что управление передаётся в метод init() библиотеки дисплея и оттуда не возвращается. Ну то есть надо копать в направлении «что не так с подключением дисплея». Простейшие моменты типа «нет ли обрыва дорожки» и «нет ли замыканий» я уже проверил (и один разрыв в дорожке я-таки нашёл; зачистил маску и спаял дорожку тоненьким проводком). Так что с основными проверками всё норм. Видимо, неисправность хитрее. Возможно, один сигнальный проводник (или оба) замыкают на что-то по дороге. (Т.е. возможно где-то при пайке повешена сопля, невидимая глазом.) Та же самая ардуинка, пересаженная на макетку с таким же точно дисплеем, нормально инициализируется и начинает «работать». То есть проблема именно где-то в платах.