15_Arduino_音乐律动灯和控制皮影小人
开源地址:https://github.com/xieyan0811/musiclight
音乐律动皮影小人
Arduino 音乐律动灯项目,通过 FFT 音频分析实现 RGB 灯带随音乐节拍变化,并联动电磁铁控制皮影小人按节奏跳舞。
1 功能特点
- 音频信号采集与 FFT 频谱分析
- 自动节拍检测
- RGB 灯带颜色动态变化(低频→白色,中频→黄色,高频→粉色)
- 噪声过滤与信号增强
- 频率联动电磁铁控制:根据音乐频段动态驱动电磁铁,控制皮影小人按节奏跳舞
- 高频:同时驱动头部和手部电磁铁
- 低频:主要驱动手部电磁铁
- 中频:同时驱动头部和手部电磁铁
2 硬件要求
- Arduino 开发板(如 Arduino Uno)
- 麦克风模块(连接到 A0 引脚)
- WS2812B RGB 灯带(10 个灯珠,连接到 9 号引脚)
- 电磁铁 × 2(分别连接到 10 号和 11 号 PWM 引脚,6 节电池独立供电)
- 皮影小人(包含可移动的头部和手部,由电磁铁驱动)
3 电路连接
| 组件 | Arduino 引脚 | 说明 |
|---|---|---|
| 麦克风 | A0 | 音频输入 |
| RGB 灯带 | Pin 9 | 数据信号 |
| 电磁铁 1(头部) | Pin 10 | PWM 输出,控制头部运动 |
| 电磁铁 2(手部) | Pin 11 | PWM 输出,控制手部运动 |
| 电池 | GND/VCC | 6 节电池组(单独为电磁铁供电) |
4 依赖库
- arduinoFFT - FFT 音频分析库
- Adafruit_NeoPixel - RGB 灯带控制库
5 使用方法
- 在 Arduino IDE 中安装所需依赖库
- 连接硬件:
- 麦克风 → A0
- RGB 灯带 → Pin 9
- 电磁铁 1 → Pin 10(头部,6 节电池独立供电)
- 电磁铁 2 → Pin 11(手部,6 节电池独立供电)
- 上传代码到 Arduino 开发板
- 播放音乐,灯带将随节拍闪烁变色,皮影小人将按节奏跳舞
6 工作原理
6.1 频域分析(频率 → 颜色)
- 低频(62-500Hz):鼓、贝斯 → 白色灯光 + 手部运动
- 中频(560-1250Hz):人声、吉他 → 黄色灯光 + 头手联动
- 高频(1310-1940Hz):女声、镲片 → 粉色灯光 + 头手联动
6.2 时域分析(节拍 → 触发)
通过检测音频信号的峰值 - 谷值差(Peak-to-Peak),识别音乐节拍。当检测到节拍时:
- 灯光效果:点亮 RGB 灯带(持续 150ms)
- 电磁铁驱动:根据当前频段启动对应的电磁铁(持续 200ms)
- 冷却机制:两次启动间隔至少 500ms,避免过频驱动
7 参数调整
可根据实际效果调整以下参数(在代码中):
| 参数 | 默认值 | 说明 |
|---|---|---|
beatThreshold |
80 | 节拍检测灵敏度,值越小越灵敏 |
minBeatInterval |
300ms | 两次节拍的最小间隔 |
lightDuration |
150ms | 灯光持续时间 |
magnetDuration |
200ms | 电磁铁启动时长 |
magnetCooldown |
500ms | 电磁铁冷却间隔 |
magnetPower |
200 | 电磁铁功率(0-255) |
8 后记与改进方向
8.1 效果评价
作为学校科技节作品,该项目成功实现了 RGB 灯带与皮影小人的音乐同步表演。灯光的亮度和节拍同步效果令人满意,色彩搭配与音乐节奏的对应关系也很好。
8.2 存在的问题
电磁铁的吸附范围有限(有效吸附距离仅为 0.5-1cm),即使配合杠杆原理,小人的动作幅度仍然较小,难以实现更富有表现力的舞蹈动作。
8.3 改进方案
计划采用直流电机 + 曲柄摇杆机构替代电磁铁方案:
- 直流电机提供持续的旋转动力,相比电磁铁的脉冲吸附更加灵活
- 曲柄摇杆机构能将旋转运动转换为较大幅度的往复直线运动
- 可实现更加逼真、流畅的舞蹈效果
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
