自制巨型乐高迷你人偶动画操作游戏:Arduino 控制舵机与音效
项目概览
这是一个历经四个阶段的大型 DIY 项目:从 PVC/MDF 手工制作乐高风格巨型人偶 “Frank”,到加装 6 个 MG90S 舵机、Adafruit MP3 Shield、双 Arduino 协作,最终变身可互动的“操作游戏”装置——玩家用镊子触碰金属边缘触发音效与动作。
核心硬件
- Arduino UNO × 2(一块控舵机,一块驱动 MP3 Shield)
- MG90S 金属齿轮舵机 × 6
- Adafruit VS1053 MP3 Shield × 1
- 3W 4 Ω 喇叭 × 2
- 3D 打印支架、铝制触点、滚珠轴承、弹簧等机械结构件
电子系统架构
- MP3 Shield Arduino:监听 3 个触点(GPIO 2/3/4),触发时播放对应 MP3(02/03/04.mp3),并向舵机 Arduino 发送 300 ms 高电平脉冲(D5/D8/D9)。
- 舵机 Arduino:收到脉冲后执行预编程的缓动动作(含 easeInOutCubic、easeOutBounce 等 30+ 缓动函数),驱动头部、手臂、腿部共 6 个舵机。
- 两板共地,独立供电,底部固定在 “Frank 的床” 下方。
关键代码片段
舵机端(节选)
#include <Servo.h>
Servo servo5, servo6, servo7, servo8, servo9, servo10, servo11;
int pin2=2, pin3=3, pin4=4;
void setup() {
// 初始化 7 个舵机引脚 5~11,设置初始角度
// pin2/3/4 设为 INPUT_PULLUP 等待 MP3 板触发
}
void loop() {
if (digitalRead(pin2)==HIGH) zap2();
else if (digitalRead(pin3)==HIGH) zap3();
else if (digitalRead(pin4)==HIGH) zap4();
delay(300);
}
// 通用缓动移动函数 moveServo() + 30+ 缓动算法
// zap2/3/4 分别编排不同动作序列
MP3 端(节选)
#include <Adafruit_VS1053.h> #include <SD.h>
Adafruit_VS1053_FilePlayer musicPlayer = ...;
void loop() {
if (musicPlayer.GPIO_digitalRead(2)) { zap2(); }
else if (musicPlayer.GPIO_digitalRead(3)) { zap3(); }
else if (musicPlayer.GPIO_digitalRead(4)) { zap4(); }
// 音量按键处理...
}
void zap2() {
audioPlay("02.mp3");
activate(relayPin5); // 向舵机板发脉冲
delay(6000); // 等待动作完成
audioStop("02.mp3");
}
机械亮点
- 头部/手臂/腿部均采用 3D 打印支架 + 5/16″ 螺栓作转轴,配合滚珠轴承实现低摩擦转动。
- 躯干与腿部内嵌铝制触点,镊子触碰即导通,作为游戏触发开关。
- 舵机输出端通过钢丝拉动铝臂,弹簧辅助复位,动作平滑自然。
项目地址
完整构建日志(含 3D 模型、电路图、代码):The RPF 论坛 | CAD 文件:Thingiverse
制造工艺
- 用 Arduino 打造绚丽显示器 Ambilight 系统
- 用 Arduino UNO 和 OLED 显示屏制作经典 Pong 游戏:分步教程
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Arduino Uno 自动化乐高星球大战发射器
- Arduino 触控打砖块:在 2.4 英寸 TFT LCD 上重现经典街机
- Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值
- 自制 Arduino 电子宠物「Tamaguino」:复刻经典 Tamagotchi 全攻略
- 智能无线开关控制器:Arduino + 433MHz 远程操控墙壁开关
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- 基于 Arduino Nano 的智能运动感应水枪
- 使用 SparkFun 7 段数码管构建可靠的 Arduino 倒计时器
- Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏