Unopad:基于 Arduino 的无缝 Ableton Live MIDI 控制器
项目概述
大多数 MIDI 控制器教程只讲 Arduino 端代码,很少涵盖如何在 DAW(数字音频工作站)中实际使用。本项目旨在提供一站式教程,帮助初学者理解从硬件制作到软件配置的完整流程。作者使用 Arduino Uno,因其无法直接通过 USB 发送 MIDI 消息,需借助 LoopMIDI 和 Hairless MIDI-Serial Bridge 两款软件实现虚拟 MIDI 端口通信。
电路设计
电路非常简单:9 个带灯按钮(APEM A01 系列)直接连接到 Arduino 数字引脚 D2-D10,未采用矩阵扫描,以支持多键同时按下(且 Uno 引脚足够)。每个按钮一端接数字引脚,另一端接地,利用内部上拉电阻(INPUT_PULLUP)工作,按下时读取低电平。
按钮 3 → D2 按钮 2 → D3 按钮 1 → D4
按钮 6 → D5 按钮 5 → D6 按钮 4 → D7
按钮 9 → D8 按钮 8 → D9 按钮 7 → D10
MIDI 映射与通信
定义 9 个 MIDI 音符(36-44 对应 C1-B1),使用 NOTE_ON (0x90) 和 NOTE_OFF (0x80) 命令,力度固定为最大值 127。Arduino 通过串口发送三字节 MIDI 消息:命令字节、音符字节、力度字节。
软件架构
Button 类封装
创建 Button 类管理每个按钮:引脚号、对应音符、当前状态、上次状态。getButtonState() 仅在状态改变时返回 0(按下)或 1(释放),避免重复发送消息。初始状态为 1(未按下)。
主循环
loop() 中遍历按钮数组调用 updateButtons():检测状态变化,按下发送 NOTE_ON,释放发送 NOTE_OFF。另包含 RGB LED 指示函数(未在硬件清单中但代码保留)。
Ableton Live 配置全流程
- 创建虚拟端口:打开 LoopMIDI,添加新端口(如 "Unopad")。
- 桥接串口与 MIDI:打开 Hairless MIDI-Serial Bridge,Serial Port 选 Arduino Uno,MIDI In/Out 选 LoopMIDI 端口,波特率设为 9600(与代码一致)。按下按钮观察 Hairless 窗口是否显示 MIDI 消息。
- Ableton 设置:Options → Preferences → Link MIDI,将 LoopMIDI 端口的 Track 和 Remote 设为 On。右上角 MIDI 指示灯闪烁即表示连接成功。
- 作为鼓架/键盘使用:选中 MIDI 轨,Monitor 设为 In,MIDI To 选音频输出设备,即可触发声音。
成品展示与后续计划
作者使用旧音箱外壳和自制面板制作外壳,并计划添加“长按切换 CC 模式”功能。代码托管于 GitHub:MidiDrumpad。
制造工艺
- Arduino Mega 按键 PWM 调光:三阶段渐变 LED 实战教程
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- DIY Arduino 加湿器控制器:继电器安全控制高压电路
- 用 Arduino Uno 和 1Sheeld 构建 4x4x4 LED 立方体 - 互动音乐可视化项目
- DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
- Arduino 101 计步器:集成 DHT11 温湿度 + LCD 显示步数/距离/卡路里
- Arduino RGB 颜色混合器 – 分步制作教程
- 手把手打造Arduino Nano喂食机器人