项目简介
在服务机器人、教育玩具或家庭陪伴设备中,面部表情已成为提升人机亲和力的关键设计语言。本教程将解析如何用 Arduino 精准驱动 SG90 舵机,结合机械结构设计与动画算法,打造自然流畅的表情变化。
为什么选择 Arduino + 舵机?
在众多情感化机器人方案中,为何我们聚焦于 Arduino 控制舵机转动这一技术路径?
答案很现实:性价比高、响应快、开发简单。
- Arduino 平台普及度极高,IDE 支持图形化拖拽与 C/C++ 混合开发,初学者几天内即可上手;
- 微型舵机(如 SG90)体积小、扭矩适中、价格低廉,且自带闭环反馈,能稳定保持指定角度;
- 每个舵机独立控制一个运动自由度,多个协同即可模拟复杂表情。
更重要的是,这套系统像搭积木一样灵活——你可以先做一个只会'笑'的头壳,未来再逐步加入眼睑开合、语音识别情绪响应等功能。
核心部件揭秘:SG90 微型舵机到底怎么工作?
别看 SG90 只有指甲盖大小,它的内部其实是个完整的位置伺服系统。
它是怎么'听话'的?
舵机接收的是周期为 20ms(即 50Hz)的 PWM 信号,其中高电平持续时间决定目标角度:
| 脉宽 | 对应角度 |
|---|---|
| 1.0ms | 0° |
| 1.5ms | 90°(中位) |
| 2.0ms | 180° |
这个信号由 Arduino 通过数字引脚输出,经 Servo.h 库自动转换为对应脉宽。舵机内部的控制芯片会比较设定值与电位器反馈的实际转角,驱动电机正反转,直到两者一致,形成闭环。
关键参数一览
- 工作电压:4.8V ~ 6V(推荐外接 5V 电源)
- 额定扭矩:1.8kg·cm @ 4.8V —— 足以拉动轻质塑料构件
- 空载速度:0.12 秒/60° —— 动作响应迅速
- 角度范围:标称 0°~180°,实测可达约 200°,但长期超程易损电位器
- 寿命:正常使用下超过 10 万次动作
使用 SG90 的三大注意事项
- 切勿长时间堵转:一旦机械卡死,电机持续用力会导致齿轮熔断;
- 焊接前务必拆下舵机:高温可能损坏内部电子元件;
- 建议加装物理限位:防止程序误操作导致舵盘强行旋转超出极限。
如何让 Arduino 真正'指挥'这些小马达?
代码层面,我们依赖 Arduino 官方提供的 Servo.h 库,它屏蔽了底层 PWM 波形生成细节,让我们可以用'写角度'的方式直接控制舵机。
以下是一个典型的四舵机控制系统示例,分别控制左右眉毛和嘴角:
#include <Servo.h>
// 定义四个舵机对象
Servo leftEyebrow;
Servo rightEyebrow;
Servo leftMouth;
Servo rightMouth;
// 引脚分配
const int LEFT_EYEBROW_PIN = 9;
const RIGHT_EYEBROW_PIN = ;
LEFT_MOUTH_PIN = ;
RIGHT_MOUTH_PIN = ;
{
leftEyebrow.(LEFT_EYEBROW_PIN);
rightEyebrow.(RIGHT_EYEBROW_PIN);
leftMouth.(LEFT_MOUTH_PIN);
rightMouth.(RIGHT_MOUTH_PIN);
leftEyebrow.();
rightEyebrow.();
leftMouth.();
rightMouth.();
();
}
{
leftEyebrow.();
rightEyebrow.();
leftMouth.();
rightMouth.();
}
{
leftEyebrow.();
rightEyebrow.();
leftMouth.();
rightMouth.();
}
{
leftEyebrow.();
rightEyebrow.();
leftMouth.();
rightMouth.();
}
{
();
();
();
();
();
();
}

