Несколько лет назад мне попалась компактная драм-машина от известного подросткового инженерного дела.
Тогда меня очень поразила идея использовать печатную плату как часть корпуса и элемент дизайна устройства.
С тех пор мне тоже захотелось собрать похожее по стилю устройство.
В результате я собрал простую миди-блютуз-клавиатуру, которая легко подключается к ноутбуку или айфону.
Идея
Изначально я хотел взять простой микроконтроллер с поддержкой USB (например, ATmega32u4), прикрепить к нему кнопки, фейдеры и потенциометры, выкинуть все это на небольшую плату и положить конец.
Но какой смысл во всей этой компактности, если рядом висит длинный USB-кабель? Тут-то я и вспомнил про ESP32, который вроде бы поддерживал Bluetooth, и относительно свежую и перспективную технологию MIDI-BLE.
Миди через Bluetooth
Спецификация BLE-MIDI появилась не так давно в 2017 году и позволяет передавать MIDI-команды через Bluetooth с относительно небольшой задержкой в 10-20 мс (для сравнения, у обычного USB — 4 мс).Технология успешно поддерживается всеми современными операционными системами, в частности iOS начиная с версии 8, Android начиная с версии 6, а также Windows 10 и Mac OS начиная с High Sierra. Все работает очень хорошо, а главное, вы можете без всяких проводов подключить контроллер к iPhone и играть на синтезаторе в каком-нибудь Garage Band. Реализовать все это программно на практике оказалось не так уж и сложно.
Все, что вам нужно сделать, это создать устройство BLE с правильным UUID MIDI Service и UUID MIDI Feature, после чего вы сможете связываться с подключенным устройством с помощью коротких пакетов BLE, аналогичных по структуре обычным MIDI-сообщениям (с добавлением двух служебных байтов).
) Не думаю, что имеет смысл в сотый раз рассказывать об устройстве MIDI-протокола — статей на эту тему бесчисленное множество.
Что ж, вы можете прочитать классный урок по MIDI-BLE. здесь
Доказательство концепции
Первое, что вам нужно сделать, это поддержать свою идею каким-нибудь простым и работающим прототипом; После получаса исследований на Github я загрузил чей-то скетч в ESP, который, к моему удивлению, смог обнаружить мое устройство и даже отправить миди-команды на компьютер.Именно тогда я начал набрасывать примерные очертания устройства: хотелось иметь хотя бы пару октавных кнопок, по одной кнопке для поднятия и понижения октавы и потенциальную возможность вкручивать фейдеры и прочие ручки.
.
Проблему отсутствия ветвей у ESP32 решили путем их расширения с помощью мультиплексора CD74HC4067. Должно было работать так: к CD74HC4067 подключаются кнопки, микроконтроллер поочередно устанавливает разные адреса на адресных шинах мультиплексора и считывает значение кнопки, расположенной по соответствующему адресу, с вывода Common Output микросхемы.
Кстати, вместо кнопки можно вполне установить потенциометр и считывать с него напряжения, тем самым добавив в устройство, например, питч-колесо.
Купив кнопки и микросхемы, за вечер собрал вот такой прототип:
Тут-то меня и постигло первое разочарование - кнопки.
Кнопки были отвратительными, тугими и оставляли следы на пальцах при активной игре.
Я прекрасно помню, какие кнопки были на моем подростковом инженерном ПО-12, они выглядели точно так же, но были мягкими и гладкими.
Позже я заказал себе несколько образцов разных кнопок и все они оказались вполне подходящими для такой игрушки, а вот первые, наиболее доступные из ближайшего чипа и дипа, оказались совершенно не годятся.
Хардвар
Прототип как-то работал, концепция устройства была понятна, дело было до печатной платы.К имеющимся компонентам я добавил лишь кнопки для программирования установленного микроконтроллера, выводы PLS для прошивки и финальной отладки, аккумулятор LiPo и плату зарядки литиевого аккумулятора на базе TP4056. Я так спешил, что забыл добавить LDO для питания ESP32 и банальную кнопку включения.
Хотя, конечно, поначалу был огромный соблазн разместить на плате сразу кучу разных фишек, от экрана до дополнительных миди-выходов.
Плату я спроектировал в EASYEDA всего за пару вечеров и отправил в DirtyPCB на печать.
Принципиальная схема
Такие платы пришли за 3 недели.
Программное обеспечение
После того, как печатная плата была собрана, пришло время закончить прошивку и разобраться со всеми проблемами, которые были рассыпаны на этапе проектирования аппаратной части.
Во-первых, я обнаружил, что не все входы АЦП есть на EPS32. одинаково полезно можно использовать вместе с WiFi или Bluetooth, а именно порт ADC2 некорректно работает с Bluetooth. Какой порт я установил для чтения данных из мультиплексора? Ну конечно на него!
Позже, когда устройство уже запустилось и успешно работало, я начал ловить странный баг: клавиатура периодически отваливалась от компьютера.
А причина оказалась простой, AMS1117-3.3, который я поставил в схему, совершенно не подходил для питания ESP32 от литиевой батареи, так как падал напряжение на целых 0,7 В.
Обнаружив это , я заменил его на менее энергоемкий LD3985M30R. Преодолев эту проблему, я, наконец, получил ура все заработало Да, совсем забыл сказать: поскольку у меня стойкая неприязнь к Arduino IDE, то на отладку и написание прошивок меня очень вдохновило, когда я открыл для себя PlatformIO.
Рамка
И все же использовать устройство с висящей на задней стороне батареей LiPo мне показалось перебором, и я решил сделать небольшой чехол.Корпуса, напечатанные на 3D-принтере, всегда казались мне слишком самодельными, поэтому я решил вырезать корпус лазером.
За вечер в Fusion360 сделал бампер из акрила 6 мм и чехол.
Результат
В результате получилась компактная клавиатура размером с iPhone. Вот короткое видео с примером того, как это работает После того, как я закончил прошивку и собрал устройство в корпус, я хотел сделать вторую версию с миди-выходом, OLED-экраном и устранить косяки предыдущей печатной платы, но позже отказался от нее.Ссылка на Github с исходниками Ссылка на проект с платой Теги: #ESP32 #DIY или Сделай сам #arduino #Bluetooth #BLE #midi
-
Шпионские Веб-Камеры
19 Oct, 24 -
Прошивка Htc One В Фастбуте
19 Oct, 24 -
Дополненная Реальность Наоборот
19 Oct, 24 -
Как Разрабатывается 1С:erp (И Не Только)
19 Oct, 24 -
Rbpopup.jquery
19 Oct, 24