亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南

硬件物料 (BOM)

  • 元器件规格/数量关键备注
    Arduino Micro / Leonardo1ATmega32U4 原生 USB,必选
    6N137 高速光耦1MIDI 电流环隔离核心
    1N4148 快恢复二极管1光耦输入保护
    电容 100 nF1电源去耦
    电阻 220 Ω3光耦输入/输出限流
    电阻 10 kΩ1光耦输出上拉
    电阻 470 Ω1MIDI OUT 接地电阻
    LED + 支架1电源指示
    DIN-5 接头 (MIDI 专用)2IN/OUT 各一,含螺母固定
    塑料外壳 + PCB + 尼龙支柱1 套成品封装

    电路原理

    标准 MIDI 电流环隔离电路:

    Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南

    固件方案:Control Surface 库

    选用 Control Surface 库,完整实现 MIDI 协议栈,支持:

    两个版本固件

    版本 A:基础透传

    #include <Control_Surface.h>
    USBMIDI_Interface midiusb;
    HardwareSerialMIDI_Interface midiser = {Serial1, MIDI_BAUD};
    MIDI_PipeFactory<5> pipes;
    const int ledPin = 10;
    
    void setup() {
      Serial.begin(115200);
      pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH);
      midiusb >> pipes >> midiser;   // USB -> Serial
      midiser >> pipes >> midiusb;   // Serial -> USB
      Control_Surface >> pipes >> midiusb;
      midiser >> pipes >> Control_Surface;
      midiusb >> pipes >> Control_Surface;
      Control_Surface.begin();
    }
    void loop() { Control_Surface.loop(); }
    

    版本 B:过滤 "All Notes Off" (修复 Roland D50 等设备问题)

    // ... 同上引脚与管道定义 ...
    struct MyMIDI_Callbacks : MIDI_Callbacks {
      void onChannelMessage(Parsing_MIDI_Interface& midi) override {
        ChannelMessage cm = midi.getChannelMessage();
        if (cm.header == 0xB0 && cm.data1 == 0x7B) return; // 丢弃 All Notes Off (CC#123)
        if (cm.header == 0x90 && cm.data2 == 0x00) cm.header = 0x80; // NoteOn(v=0) → NoteOff
        midiusb.send(cm);
      }
      void onSysExMessage(Parsing_MIDI_Interface& midi) override {
        midiusb.send(midi.getSysExMessage());
      }
      void onRealTimeMessage(Parsing_MIDI_Interface& midi) override {
        midiusb.send(midi.getRealTimeMessage());
      }
    } callbacks;
    
    void setup() {
      // ... 管道连接同版本 A ...
      Control_Surface.begin();
      midiser.setCallbacks(callbacks); // 注册回调
    }
    void loop() { Control_Surface.loop(); }
    

    已知问题与修复

    大 SysEx 包截断:Control Surface 1.x 限制 SysEx 缓冲 128 字节,导致 D50 编辑器通讯失败。
    修改库源码两处 (需管理员权限):
    • src/MIDI_Parsers/MIDI_MessageTypes.hpp:uint8_t length; → size_t length;
    • src/Settings/Settings.hpp:constexpr size_t SYSEX_BUFFER_SIZE = 128; → 320
    官方承诺 2.x 版本修复。

    USB 设备名称自定义

    编辑 Arduino 安装目录 hardware/arduino/avr/boards.txt (需管理员):
    leonardo.build.usb_product="Arduino Leonardo" → leonardo.build.usb_product="My MIDI Adapter"
    上传后改回,避免影响其他项目。

    故障排查

    扩展建议

    资源文件

    制造工艺

    1. 智能缺水报警器 – DIY植物土壤湿度监测装置
    2. 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
    3. 仅用 3 根模拟口驱动 4×3 矩阵键盘:电阻分压识别键值
    4. 3D 打造紧凑型 MIDI 架子鼓套件
    5. 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
    6. 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
    7. DIY 自动量程电容表 (10 pF – 10 μF) – Arduino Nano 简易制作
    8. 非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
    9. Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
    10. 为Arduino构建隔离模拟输入电路
    11. RGB 32 频段音频频谱可视化器:Arduino Nano 驱动 WS2812B 8×32 LED 矩阵
    12. Arduino UNO 精准视觉反应时间测试仪