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

PiBot:Arduino驱动的88键钢琴机器人,精准演奏MIDI乐曲

核心组件清单

组件数量备注
Arduino 101 / Uno1建议Uno成本更低
74HC595移位寄存器11每个控制8路输出,共88路
IRFZ44N N沟道MOSFET88驱动电磁阀
12V铅酸电池(汽车电瓶)2供电磁阀高电流
100µF电解电容11每块控制板去耦
导线、面包板/万用板、IC座、电阻、二极管等若干见详细BOM

项目背景

作者幼时见自动钢琴演奏深受启发,决定自制低成本钢琴机器人。商用自动钢琴昂贵,本项目采用单Arduino + 11级移位寄存器级联方案,以极低成本实现88键独立控制。

硬件设计

驱动电路

机械结构

软件流程

  1. 获取MIDI文件
  2. 转文本:用https://flashmusicgames.com/midi/mid2txt.php导出文本格式(含时间戳、音高、力度、通道)
  3. Python预处理:解析文本,按时间片聚合同一时刻的按键事件,生成11组8位数据(对应11个595)+ 时间间隔,输出translated.txt
  4. Processing发送:读取文本,按时间间隔经串口发送给Arduino,发送顺序为右向左(物理琴键从高音到低音)
  5. Arduino接收:串口解析11字节数据,依次移入595链,锁存输出驱动MOSFET

关键代码片段

Python转换核心逻辑

def set_bit(On, note):
    # 将音高映射到对应595的bit位
    if 21 <= note <= 28 and On: return f"{2**(note-21)},0,0,0,0,0,0,0,0,0,0"
    # ... 其余8组类似
    else: return "0,0,0,0,0,0,0,0,0,0,0"

Processing发送循环

void run() {
  int lastTime = 0;
  for (String line : inputLines) {
    int t = Integer.parseInt(line.substring(0, line.indexOf(',')));
    delay((t - lastTime) * 5); // tempo倍率
    lastTime = t;
    send(line.substring(line.indexOf(',')+1));
  }
}
void send(String data) {
  // 反转11字节顺序后逐个发送,帧头888f、帧尾999f
}

Arduino接收与移位

void loop() {
  if (Serial.available()) {
    char c = Serial.read();
    if (c == 'f') { /* 解析一个字节并移位 */ }
  }
}

常见问题与改进

资源链接

制造工艺

  1. 蓝牙控制树莓派机器人:语音反馈功能构建指南
  2. Arduino与树莓派构建互联网控制视频流机器人完整指南
  3. 用 Python 构建 Wi-Fi 控制的树莓派机器人:分步指南
  4. 通过树莓派用 Alexa 控制 LED - 简单分步指南
  5. DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
  6. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  7. DIY Arduino 加湿器控制器:继电器安全控制高压电路
  8. Arduino Nano 语音控制机器人:蓝牙 + 手机 APP 实现
  9. MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体
  10. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  11. Arduino 101 计步器:集成 DHT11 温湿度 + LCD 显示步数/距离/卡路里
  12. Arduino RGB 颜色混合器 – 分步制作教程