Эта статья — сжатый туториал на тему подключения педалей экспрессии к компьютеру. От читателя не требуется специальных навыков в области электроники, но умение паять желательно. На минималистичное повторение подключения при наличии всех узлов и материалов действительно достаточно полчаса (автор проверил с секундомером и уложился в 10 минут). С другой стороны, верхнего предела нет: потенциал по обработке сигнала с педалей (кривые, лимиты) при этом ограничивается разве что фантазией, средствами языка Python и быстродействием контроллера.
Контекст
Сразу стоит оговориться, что речь идет именно о педалях для виртуальных музыкальных инструментов, особенно о ситуации, когда этих педалей нужно более одной. Автосимуляторы с такими педалями не работают, а инструменты на основе физического моделирования на них завязываются очень удачно. Здесь, например, Dr. Mix играет на струнных из Audio Modelling SWAM с применением двух педалей. Pianoteq поддерживает блоки из трех педалей фортепианного типа. Не всегда MIDI-клавиатура или иной контроллер имеет столько физических входов для педалей и не всегда возможности переназначения их функций имеются. Вот тут-то возможно применение решения, о котором далее.
Ингредиенты
Педали, от одной до трех штук. Проверено с Roland EV-5 и Roland DP-10 (фортепианная подпружиненная). В теории решение совместимо и с другими педалями, которые имеют потенциометр внутри и оканчиваются TRS-джеком 6,35 мм (1/4 дюйма), но в такой ситуации действуйте на свой страх и риск. Вместо педалей можно рассмотреть и потенциометры-крутилки, и аналоговые духовые контроллеры, но это уже отдельное направление для развития темы.
Классический вариант Raspberry Pi Pico на базе RP2040. Переход на Pico 2 также должен протекать беспрепятственно, но не имеет экономической целесообразности. Достаточно одной штуки на всю конструкцию с тремя педалями.
USB-кабель для Raspberry Pi Pico (как правило, на стороне контроллера нужен Micro-USB). Тоже один.
Ответные разъемы TRS 6,35 мм (гнездо) по количеству педалей.
Для макета без пайки — провода «для ардуино» (dupont wires и прочие пафосные названия тоже о том же) и крючки для логического анализатора. Лучше взять побольше.
Для изделия — припой, инструменты для пайки и монтажный провод любой не слишком толстый. Требования по току скромные (не выше 1 мА), а монтаж столь прост, что можно распустить витую пару или ПВС 0,5 мм2. Впрочем, гораздо удобнее использовать цветной НВ-4 0,2 мм2.
Корпус по вкусу. Одна штука. Для длительной эксплуатации нужен, а для макета можно обойтись.
Программная часть
Работать конструкция будет под CircuitPython, поэтому забираем с сайта проекта самую свежую версию в виде файла UF2.
Для установки змеи достаточно подключить Raspberry Pi Pico с зажатой кнопкой BOOTSEL к компьютеру, после чего закинуть файл UF2 на обнаружившуюся «флешку».
Далее нужно скачать и распаковать zip-архив с библиотеками (версия библиотек должна соответствовать версии CircuitPython). Из папки lib внутри архива в папку lib на Raspberry Pi Pico нужно скопировать отдельный файл simpleio.mpy и целую папку adafruit_midi.

После этого в файл code.py, лежащий на Raspberry Pi Pico (в корне), вставить приведенную в листинге ниже программу. Программа любезно позаимствована здесь и доработана для унификации и поддержки трех педалей.
Список cc_map = [2, 4, 11] можно и нужно редактировать, если требуется переназначить функции педалей.
Строка 31 (now[i] = ...) может быть творчески доработана с целью внедрения кривых чувствительности, инверсии и т. п. Этот шаг не является обязательным, базовое масштабирование диапазона уже включено.
##### code.py #####
import time
import board
import usb_midi
import adafruit_midi
import simpleio
from analogio import AnalogIn
from adafruit_midi.control_change import ControlChange
cc_map = [ # Use a MIDI CC list, e. g. this one https://anotherproducer.com/online-tools-for-musicians/midi-cc-list/
2, # CC2 (Breath Controller)
4, # CC4 (Foot Pedal)
11, # CC11 (Expression)
]
midi = adafruit_midi.MIDI(
midi_in = usb_midi.ports[0], in_channel = 0, midi_out = usb_midi.ports[1], out_channel = 0
)
pedal = [AnalogIn(board.A0), AnalogIn(board.A1), AnalogIn(board.A2)]
now = [0, 0, 0]
while True:
time.sleep(0.001) # 1 ms
active = False
for i in range(3):
now[i] = int(round(simpleio.map_range(pedal[i].value, 0, 65535, 0, 127)))
active = active or (now[i] > 2)
if active:
message = [ControlChange(cc_map[0], now[0]), ControlChange(cc_map[1], now[1]), ControlChange(cc_map[2], now[2])]
midi.send(message)
По желанию рядом с code.py можно создать файл boot.py и в целях оптимизации и защиты от случайного изменения отключить в нем лишние функции контроллера.
##### boot.py #####
import usb_hid, usb_midi, usb_cdc
import storage
import board
from digitalio import DigitalInOut, Direction, Pull
usb_cdc.disable()
usb_hid.disable()
usb_midi.enable()
button = DigitalInOut(board.GP14)
button.direction = Direction.INPUT
button.pull = Pull.UP
if button.value:
storage.disable_usb_drive()
Внимание! Данный файл boot.py отключает «режим флешки». Чтобы его вернуть, отключите Raspberry Pi Pico от компьютера, защипните чем-нибудь токопроводящим GP14 и GND (как на фото), после чего подключите обратно.
Аппаратная часть
Raspberry Pi Pico служит мостом между аналоговыми педалями и портом USB.
Подключение со стороны USB тривиально, а соединение с педалями хоть и предельно просто, но выполняется отдельными проводниками и требует аккуратности и навыков пайки. Впрочем, макет можно временно собрать на крючках для анализатора.
На фото показана конструкция для одной педали. Для трех лучше зафиксировать разъемы на корпусе, а соединения выполнить пайкой.
Принципиальная схема не разрабатывалась. Соединения оформлены табличкой. Весьма полезными здесь могут оказаться описание разъема TRS и иллюстрация с назначением выводов Pico, позаимствованная у производителя.

Педаль 1 |
Педаль 2 |
Педаль 3 |
|
Sleeve (гильза) |
AGND (33) |
AGND (33) |
AGND (33) |
Ring (кольцо) |
3V3 OUT (36) |
3V3 OUT (36) |
3V3 OUT (36) |
Tip (наконечник) |
ADC0 (31) |
ADC1 (32) |
ADC2 (34) |
Иными словами, общий провод всех педалей заводится на общий контроллера, питание для всех педалей берется с вывода 36 контроллера, а выход каждой педали поступает на свой вход встроенного АЦП. Назначение контактов штекера приведено для Roland EV-5 и Roland DP-10. Если ваши педали другие, рекомендуется найти их схемы.
Внимание! Разъемы TRS могут вызывать незапланированные замыкания контактов при коммутации, поэтому подключать сначала следует педали к контроллеру, а затем — контроллер к компьютеру. Альтернативой может послужить установка резисторов по 100 Ом в каждый провод, например.
Пробный заезд
В списке MIDI-устройств в Cubase успешно появляется CircuitPython Audio.

Запись с него возможна. Цель достигнута.

Вместо заключения. TODO, или идеи развития
Однозначно упаковать в корпус.
Реализовать те или иные защитные цепи на разъемах (резисторы в разрыв, диодные «вилочки», антистатическая защита на входы АЦП).
Изучить надобность RC-фильтра на входе.
Прикрутить программные кривые чувствительности.
Изучить вопрос регулярной потери нескольких семплов (малозначимо, поскольку педаль — орган управления довольно медленный).
Не поддаться соблазну навесить кнопочки и крутилки.
Милости прошу в комментарии, особенно если есть желание и возможность поделиться другими примерами применения!
Комментарии (8)
vasan
02.02.2025 03:18Помню делал подобный блок педалей вообще без всякой электроники. Просто купил три кнопки для дверного звонка, продавались одно время такие - с квадратной площадкой, куда можно было нажимать не только рукой, но и ногой. Прикрутил их саморезами к доске а провода распаял на разъём для LPT порта от старого принтера.
В качестве драйвера LPT порта, использовал LPTWDMIO от Валерия Ковтуна. Также написал небольшую программу на Delphi, которая считывала нажатия на педали и отправляла требуемые MIDI-сообщения через virtualMIDI SDK от Тобиаса Эриксена. Так что получилось всё очень просто. )
alcotel
02.02.2025 03:18Тут, как я понял, про аналоговые педали речь. У которых "потенциометр внутри". Футсвичи-то аппаратно можно и через плату от полудохлой мышки подключить, если LPT совсем скончался.
juramehanik
02.02.2025 03:18На маркетплейсах если что есть "raspberry pi pico type-c", китайская, это если вы живете в 25 году и уже подзабыли как страшный сон microusb
vasan
02.02.2025 03:18И что из этого? У меня футсвич к системнику вообще через LPT порт подключен )
По твоему творцы обязаны под пореблядство прогибаться?
ovegio
02.02.2025 03:18Предлагаете автору поискать Raspberry Pi Pico с LPT портом?
А если серьёзно, то тут чисто практический смысл. Появление Type-C - это, пожалуй, лучшее из того, что происходило с USB за всё время его существования. А microUSB, на мой взгляд, это худший из USB-разъемов, у которого из плюсов - только компактность по сравнению с предшественниками.
И если совет просто взять сразу контроллер с другим разъёмом может помочь автору или желающему повторить за автором время и нервы при поломке хлипкого разъема в неподходящий момент, то это полезный совет.
kaseiiro Автор
02.02.2025 03:18Ничего не имею против. К Pico несложно приспособить ISAшную планку с LPT, если при этом не ставить задачу отображать ее в адресное пространство, то и софт тривиален.
Wesha
Педаль даже концептуально не та! Не могу представить себе бородатого рокера в косухе, пользующегося такой мимиминой педалью!