低成本 Arduino 呼吸控制器:USB-MIDI 即插即用,支持吸吹双向控制
核心物料清单(总成本约 ¥120)
| 组件 | 型号/规格 | 关键参数 | 备注 |
|---|---|---|---|
| 主控板 | Arduino Micro (ATmega32U4) | 原生 USB HID/MIDI | 仅 32U4 芯片支持 USB-MIDI,Uno/Nano 需额外转换器 |
| 压力传感器 | MPS20N0040D-D | 4kPa 量程,差分输出 | 极低成本,易购买 |
| 运放 | LM358N (双路) | 单电源 5V,轨到轨输出 | 放大传感器微弱信号 |
| 精密电阻 | 1MΩ ×2, 10kΩ, 22.1kΩ, 1kΩ | 1% 精度 | 构成放大电路与分压网络 |
| 气路组件 | 婴儿鼻腔吸引器 + 5mm 水族管 + 三通接头 | 医用级材质 | 口含件+导气管+分流排液 |
| 辅助 | 半块面包板、排针、22AWG 单芯线 | 免焊接原型 |
核心创新点
- 双向气流检测:传感器测量差压,吹气(正压)与吸气(负压)分别输出独立 MIDI CC,默认均为 CC#2(呼吸控制器标准)
- 过采样平滑:
Oversampling库 13-bit 硬件过采样(64倍),有效分辨率提升至 16-bit,极大抑制量化噪声 - 自定义响应曲线:支持分段线性映射表(
in[]/out[]),可实现软启动、压缩、扩展等非线性响应 - 唾液管理:三通接头分流排液,斜向布管防止积液导致读数漂移
- 即插即用:无需驱动,DAW 识别为标准 MIDI 设备,兼容所有主流宿主
硬件电路设计
信号链
MPS20N0040D (差分输出) → LM358 同相放大 (增益约 2.5×, 由 R1/R2 决定) → Arduino Micro A0 (ADC 输入)
关键点:
- 传感器 VCC 接 5V,GND 共地
- 运放单电源供电,输出摆幅 0~5V 匹配 ADC
- 三通接头直插传感器气口,免胶水密封
气路布局原则
- 口含件 → 导气管 → 三通接头「进气口」
- 三通「传感器口」→ 传感器(短管,<5cm)
- 三通「排液口」→ 吸引器婴儿端(含滤芯)→ 向下垂直布管,利用重力排液
- 全程保持 单调下坡,避免低洼积液
固件核心逻辑
用户可配参数(代码开头)
// 量程校准:吹气/吸气最大 ADC 增量,调大=更易满量程
int sensorRange1 = 800; // 吹气
int sensorRange2 = 800; // 吸气
// 输出映射:0-127=CC, 128=Aftertouch, 129=Pitch Bend Up, 130=Pitch Bend Down
int controllerNumber1 = 2; // 吹气 → CC#2
int controllerNumber2 = 2; // 吸气 → CC#2
// 通道设置
int controllerChannel1 = 1;
int controllerChannel2 = 1;
// 死区阈值:消除静止抖动
const int lowThreshold1 = 5;
const int lowThreshold2 = 5;
// 自定义曲线示例(软启动)
// int in1[] = {0, 6, 24, 78, 127};
// int out1[] = {0, 32, 64, 96, 127};
主循环流程
- 过采样读取 ADC →
sensorValue1 - 计算吸气分量:
sensorValue2 = sensorMin1 - sensorValue1 - 双向独立:限幅 → 曲线映射 → 输出范围映射(CC 0-127 / PitchBend ±8191)
- 仅当值变化时发送 MIDI 消息,避免总线拥堵
delay(refreshCycle)控制刷新率(默认 0ms 即全速)
校准与使用指南
首次上电校准
- 上电后 前 10 次采样平均值 作为零点基准(
sensorMin1) - 严禁在上电/复位时吹气/吸气,否则零点偏移
量程调节
- 打开 Arduino IDE 串口绘图器(波特率 115200,开启
#define DEBUG) - 正常演奏力度吹气/吸气,观察输出值是否能稳定触及 127
- 偏难 → 减小
sensorRange;偏易/过早饱和 → 增大
DAW 端映射
- 在合成器/采样器中将 CC#2 映射至 表情控制、滤波器截止、音量、颤音深度 等参数
- 吸气通道可映射为 Pitch Bend Down(设为 130)实现「吸气降音」效果
进阶改造方向
- 咬合/点头传感器:增加压力传感器(咬合)+ IMU(点头/倾斜),扩展为 3 维控制器
- 无线化:移植至 ESP32-S2/S3(原生 USB-MIDI + BLE MIDI),电池供电
- 专业外壳:3D 打印一体化口含件,集成防滴漏结构、指示灯、物理按键切换模式
- MPE 支持:利用 USB-MIDI 多通道实现每音独立表情控制
故障排查速查表
| 症状 | 原因 | 对策 |
|---|---|---|
| DAW 无法识别 MIDI 设备 | 未安装 USB-MIDI 库 / 板卡选错 | 库管理器搜索 "USB-MIDI" 安装,工具→板卡选 "Arduino Micro" |
| 输出值抖动大 | 低阈值过小 / 供电噪声 | 增大 lowThreshold、加 100uF 电解电容滤波 |
| 吸气无输出 | 三通接头堵塞 / 管路漏气 | 检查气路密封、清洗排液管 |
| 数值漂移 | 唾液积聚 / 温度漂移 | 优化管路坡度、定期清理、软件加基线跟踪 |
完整固件代码(含 Oversampling、USB-MIDI 库依赖)请参考项目附件。建议搭配 USB-MIDI Library 使用。
制造工艺
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- 基于 Web 控制的 DMX 灯光系统 – Arduino 主控制器
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Unopad:基于 Arduino 的无缝 Ableton Live MIDI 控制器
- 蓝牙文本传送器:Arduino + Android 跨设备粘贴神器
- Arduino 驱动的真空荧光显示器(VFD)控制器套件
- Alexa 语音控制 Arduino 智能家居中枢:基于 Yun + PubNub + AWS Lambda 全栈实现
- 校园智能体温监测系统 - 精准、实时、安全的学生健康守护方案
- Arduino 8 位并行 IO 端口库:一行代码实现 8 位数字读写
- Arduino 64 键原型键盘矩阵:用移位寄存器打造全自定义键盘
- 为Arduino构建隔离模拟输入电路
- 适用于 Arduino 项目的智能室内导航机器人套件