Arduino 打造会说话的智能人形机器人「Mofiza」
项目亮点
仅用 Arduino Pro Mini(或 Uno)、3 个红外接近传感器、3 个舵机、SD 卡模块和扬声器,即可制作一款能“看、说、动”的桌面级人形机器人 Mofiza。检测到胸前传感器触发播放欢迎语并伸手握手;触碰眼部传感器则播放抗议语音并抬头/挥手。全程开源,适合入门机器人与语音交互学习。
核心硬件清单
- Arduino Pro Mini 5V/16MHz(或 Uno/Nano)× 1
- 红外避障/接近传感器模块 × 3(两只眼、胸口各一)
- 微型舵机 SG90/MG996R × 3(头部、左手、右手)
- Micro SD 卡模块 (TF Card) × 1 + ≤2GB Micro SD 卡 × 1
- 扬声器 8Ω/0.5W + 功放(如 PAM8403)或有源音箱
- 万用板/PCB、排针排母、杜邦线、纸板/3D 打印外壳
- 5V 电源(移动电源或锂电池+稳压)
电路连接要点
| 模块 | Arduino 引脚 | 备注 |
|---|---|---|
| SD 卡模块 (SPI) | D10(CS), D11(MOSI), D12(MISO), D13(SCK) | 5V 供电,需 3.3V 电平转换或分压 |
| TMRpcm 扬声器输出 | D9 (PWM) | 库默认 Timer1,需避开舵机冲突 |
| 舵机:头部 | D2 | ServoTimer2 库使用 Timer2 |
| 舵机:左手 | D3 | |
| 舵机:右手 | D4 | |
| IR 传感器:左眼 | D6 | 低电平触发 |
| IR 传感器:右眼 | D7 | 低电平触发 |
| IR 传感器:胸口 | D8 | 低电平触发 |
关键库依赖
- TMRpcm:GitHub - 从 SD 卡播放 WAV 音频,占用 Timer1。
- ServoTimer2:教程 - 使用 Timer2 驱动舵机,避免与 TMRpcm 冲突。
- 标准
SD、SPI库(IDE 自带)。
音频文件准备
- 准备 8-bit/16kHz/单声道 WAV 文件(如
welcome.wav、eye_touch.wav)。 - 文件名须符合 8.3 格式(如
WELCOME.WAV),放入 SD 卡根目录。 - 可用 Audacity 转换:导出 → WAV (Microsoft) → 8-bit PCM, 16000 Hz, Mono。
固件代码精简版
#include
#include
#define SD_CS 10
#include
TMRpcm tmrpcm;
ServoTimer2 head, lHand, rHand;
const int IR_EYE_L = 6, IR_EYE_R = 7, IR_CHEST = 8;
void setup() {
head.attach(2); lHand.attach(3); rHand.attach(4);
tmrpcm.speakerPin = 9;
pinMode(IR_EYE_L, INPUT_PULLUP);
pinMode(IR_EYE_R, INPUT_PULLUP);
pinMode(IR_CHEST, INPUT_PULLUP);
Serial.begin(9600);
if (!SD.begin(SD_CS)) { Serial.println("SD FAIL"); return; }
// 初始姿态
head.write(1500); lHand.write(300); rHand.write(1700);
}
void loop() {
// 胸口传感器触发:欢迎 + 握手动作
if (!digitalRead(IR_CHEST)) {
tmrpcm.play("welcome.wav");
lHand.write(2500); delay(2000); // 伸手
lHand.write(1200); delay(9000); // 握手保持
}
// 眼部触发:抗议 + 抬头/挥手
else if (!digitalRead(IR_EYE_L) || !digitalRead(IR_EYE_R)) {
tmrpcm.play("eye_touch.wav");
head.write(2000); delay(500);
head.write(1500);
rHand.write(2500); delay(500);
rHand.write(1700);
}
// 空闲姿态
else {
head.write(1500); lHand.write(300); rHand.write(1700);
}
}
机身制作建议
- 纸板/泡沫板剪折成人形,预留传感器、舵机、喇叭安装孔。
- 舵机连杆用铁丝/吸管制作,保证动作幅度。
- SD 卡模块、主控板固定在躯干内部,走线整理。
- 外观可贴纸、涂色、加装 LED 眼睛增强表现力。
进阶扩展方向
- 增加更多舵机实现腿部行走(需更多 PWM 引脚,可用 PCA9685 扩展)。
- 接入语音识别模块(如 LD3320、ESP32)实现语音指令控制。
- 加装超声波/TOF 测距,实现避障跟随。
- 用 ESP32-CAM 替代 IR 传感器,实现人脸识别问候特定人物。
- 移植到 ESP32,利用双核并行处理音频/舵机/视觉,性能大幅提升。
完整代码与资源
- GitHub 完整版:Mofiza--Humanoid-social-robot(含多状态机、表情动画、电量监测等)
- 原理图:
schematics文件夹 PNG
制造工艺
- Arduino与树莓派构建互联网控制视频流机器人完整指南
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- Arduino UNO 自制循迹小车:从零构建自主巡线机器人
- Arduino + Android 蓝牙控制 Roomba Create 2 扫地机器人完整指南
- Arduino Nano 语音控制机器人:蓝牙 + 手机 APP 实现
- 通过专用 Android App 蓝牙控制 Arduino 机械臂
- 高级智能电池充电器:多路复用与数字显示
- 手把手打造Arduino Nano喂食机器人
- 四轮 Arduino 机器人:Dabble App 蓝牙手柄遥控