news 2026/5/8 16:07:36

用Arduino和SG90/MG90S舵机做个会动的桌面小摆件:从硬件连接到代码调试全记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Arduino和SG90/MG90S舵机做个会动的桌面小摆件:从硬件连接到代码调试全记录

用Arduino和SG90/MG90S舵机打造智能桌面伙伴:从机械结构到交互逻辑全解析

桌上那个会对你点头眨眼的小家伙,可能是缓解工作压力的最佳伴侣。这次我们不满足于简单摆动,而是要赋予它真正的"生命力"——用Arduino UNO同时驱动SG90和MG90S两款舵机,打造一个能感知环境互动的智能摆件。不同于常见的单一舵机应用,这个项目将展现如何让两个特性迥异的舵机协同工作:180度的SG90负责细腻的表情变化,360度的MG90S则实现灵活的身体转动。

1. 硬件设计与机械结构

1.1 元件选型与动力搭配

核心动力组合需要精心搭配:

  • SG90(9g微型舵机):负责头部/手臂等精细动作
    • 工作电压:4.8-6V
    • 扭矩:1.6kg·cm(6V时)
    • 动作角度:0-180度
  • MG90S(金属齿轮舵机):承担底座旋转等大负载运动
    • 工作电压:4.8-7.2V
    • 扭矩:2.2kg·cm(6V时)
    • 连续旋转特性

注意:MG90S虽然标称360度,但实际是速度控制模式,需要特殊信号处理

供电方案对比表:

方案优点缺点适用场景
USB供电简单稳定功率有限(500mA)单个舵机测试
6V电池组移动方便需定期更换无电源接口场景
双路稳压模块动力充足需要接线多舵机系统

1.2 机械结构设计技巧

用3D打印件连接舵机时,这些细节能避免后续麻烦:

// 舵机臂安装参考尺寸 const float SERVO_HORN_RADIUS = 11.5; // SG90舵盘半径(mm) const float MG90S_MOUNT_HOLE = 2.5; // 安装孔直径(mm)
  • 头部摆动机构建议使用四连杆机构增加动作自然度
  • 底座旋转部分需要添加滑动轴承减少摩擦阻力
  • 配重设计遵循"下重上轻"原则,防止倾倒

2. 电路连接与电源管理

2.1 安全接线方案

典型接线错误会导致舵机抖动甚至烧毁,正确的连接方式:

  1. 信号线隔离
    • SG90信号线 → Arduino D9
    • MG90S信号线 → Arduino D10
  2. 电源分级处理
    • 控制电路:USB 5V直接供电
    • 动力电路:外接6V电池经470μF电容滤波
  3. 共地处理:所有GND端最终汇接到Arduino GND引脚

2.2 抗干扰措施

遇到舵机异常抖动时,依次检查:

  • 在舵机电源正负极间并联0.1μF陶瓷电容
  • 信号线串联220Ω电阻
  • 使用带屏蔽层的导线连接信号

关键提示:永远不要用Arduino的5V引脚直接驱动多个舵机!

3. 控制程序开发

3.1 双舵机协同控制框架

#include <Servo.h> Servo headServo; // SG90实例 Servo baseServo; // MG90S实例 void setup() { headServo.attach(9); // 头部舵机 baseServo.attach(10); // 底座舵机 calibrateServos(); // 初始化校准 } void loop() { expressEmotion(random(1,5)); // 随机表情 delay(2000); }

SG90角度控制函数

void moveHead(float angle) { angle = constrain(angle, 0, 180); // 安全限制 headServo.write(angle); delay(15); // 等待动作完成 }

MG90S速度控制技巧

void rotateBase(int speed) { // speed: -100 to 100 speed = constrain(speed, -100, 100); int pulse = map(abs(speed), 0, 100, 90, 180); if(speed < 0) pulse = map(abs(speed), 0, 100, 90, 0); baseServo.write(pulse); }

3.2 动作序列编程

让摆件完成"点头-旋转-摇头"的连贯动作:

void demoRoutine() { // 点头三次 for(int i=0; i<3; i++) { moveHead(120); // 低头 delay(300); moveHead(60); // 抬头 delay(300); } // 底座顺时针旋转 rotateBase(80); delay(1000); rotateBase(0); // 停止 // 快速摇头 moveHead(160); delay(200); moveHead(20); delay(200); }

4. 交互功能扩展

4.1 增加环境感知

用超声波传感器实现"有人靠近时主动打招呼":

#include <NewPing.h> #define TRIGGER_PIN 6 #define ECHO_PIN 5 #define MAX_DISTANCE 100 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); void checkPresence() { if(sonar.ping_cm() < 30) { welcomeGesture(); } } void welcomeGesture() { moveHead(90); // 正视 rotateBase(40); delay(500); rotateBase(-40); delay(500); rotateBase(0); }

4.2 灯光表情系统

通过WS2812B灯珠增强情绪表达:

#include <Adafruit_NeoPixel.h> #define LED_PIN 3 #define LED_COUNT 8 Adafruit_NeoPixel pixels(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); void setMood(int mode) { switch(mode) { case 1: // 高兴 pixels.fill(pixels.Color(255, 50, 0)); break; case 2: // 好奇 for(int i=0; i<LED_COUNT; i++) { pixels.setPixelColor(i, pixels.Color(0, 0, random(100,255))); } break; default: // 平静 pixels.fill(pixels.Color(0, 255, 100)); } pixels.show(); }

5. 调试技巧与性能优化

5.1 舵机参数校准

SG90典型校准数据记录表:

理论角度实际角度补偿值
-5°
90°92°-2°
180°178°+2°

校准后的控制函数:

void calibratedMove(float angle) { float offset = map(angle, 0, 180, -5, 2); // 线性插值补偿 headServo.write(angle + offset); }

5.2 电源噪声监测

用示波器观察供电波形时,合格标准:

  • 纹波电压 < 200mV
  • 瞬时压降 > 4.8V
  • 频率稳定在50Hz±5%

遇到电源问题时的解决方案:

  1. 增加1000μF电解电容
  2. 使用LC滤波电路
  3. 改用开关电源模块

6. 创意扩展方向

6.1 结合物联网功能

通过ESP8266模块实现微信控制:

void handleWechatCommand(String cmd) { if(cmd == "nod") { moveHead(60); delay(300); moveHead(120); } else if(cmd == "spin") { rotateBase(70); delay(1000); rotateBase(0); } }

6.2 机械结构改进方案

  • 使用磁吸式连接方便更换配件
  • 增加配重滑块调节重心位置
  • 采用硅胶缓冲件减少运动噪音

在完成基础版本后,我发现给摆件加上简单的"触须"传感器(用弯曲传感器实现)能大幅提升互动趣味性——当用户拨动触须时,摆件会做出惊讶的反应并改变灯光颜色。这个改进使得原本单向的交互变成了真正的双向互动。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 16:07:25

网盘直链下载助手终极指南:八大平台免费加速完整方案

网盘直链下载助手终极指南&#xff1a;八大平台免费加速完整方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…

作者头像 李华
网站建设 2026/5/8 16:06:25

如何快速实现智慧树自动刷课:终极完整使用指南

如何快速实现智慧树自动刷课&#xff1a;终极完整使用指南 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台枯燥的视频学习而手动点击"下一集&quo…

作者头像 李华