发布时间: 2026-05-02
最初你把舵机连到 Uno上时,发觉它仅仅是轻轻颤动却不转动, 不然就是全然没反应, 这可是好多初学者都会碰见的情形。实际上呀,只要有正确的接线,再有几行代码,能够让舵机精准旋转到你期望它停下的角度。
核心解决办法是,运用 Uno来操控标准180度舵机,总共只需三步。
1. 要把舵机的信号线,也就是通常为橙色或者黄色的那根线,连接至Uno的数字引脚9,此引脚支持PWM。
2. 红色电源线接5V,棕色/黑色地线接GND;
3. 上传依照下面所提供的示例程序,舵机便会自行从0度转向180度而后再折返回来。
这里给出经校验的接线图纸,给出完备的代码内容,给出挑选型号的参数数据,给出发生故障时排查表格,使得你能够在同一时间掌握舵机操控的全套流程。
Uno开发板(任何兼容型号均可)
标准SG90或MG995舵机(5V工作电压)
杜邦线(母对公,3根)
外接电源(当舵机扭矩较大时,如MG995需独立供电)
常见错误的案例呈现为,把电源线错误地连接在了3.3V上面,进而致使舵机出现无力或者抖动的状况。标准的舵机必然是要在5V以及超过5V的电压条件下,这样子才能够正常地开展工作。要是使用大扭矩的舵机,好比是30kg·cm这种,直接运用Uno的5V输出就会把板载稳压器烧坏,一定要外接5至7.4V的电源并且实现共地。
把空的程序上传完之后,用手对舵机输出轴进行轻轻拨动,这时应该能够感受到十分明显的阻尼以及齿轮咬合所带来的感觉。要是完全处于松动的状态,那就表明舵机没有通电或者已经出现损坏的情况了。
#
Servo ; // 创建舵机对象
int = 9; // 信号引脚
int pos = 0; // 角度变量
void setup() {
.(); // 绑定引脚
}
void loop() {
// 从0度逐步转到180度,每次增加1度,间隔15ms
for (pos = 0; pos <= 180; pos += 1) {
.write(pos);
delay(15);
}
// 从180度逐步转回0度
for (pos = 180; pos >= 0; pos = 1) {
.write(pos);
delay(15);
}
}
表述含义为,借助.write(角度) 能够直接使得舵机跳到指定角度这个范围,也就是0至180之间,而delay(15) 则会给予舵机充足的时间用来完成转动。
#
Servo ;
int = 9;
void setup() {
.();
.write(90); // 直接定位到90度
}
void loop() {
// 无需循环,舵机保持90度
}
如若你所运用的是360度连续旋转舵机伟创动力,那么write(0)意味着是全速朝着逆时针方向转动,write(180)代表着全速朝着顺时针方向转动,write(90)则是表示停止。示例:
.write(0); // 持续正转
delay(2000);
.write(90); // 停止
delay(1000);
.write(180); // 持续反转
重要提示要知晓:扭矩单位“kg·cm”所表达的是于1cm力臂之上能够提起的重量情况。比如说SG90于理论层面之上是能够提起1.8kg重物的,不过实际当中由于存在摩擦现象以及动态负载因素,故而建议按照降额50%的方式来进行使用。
能够通过PWM脉冲宽度(500~2500μs)来控制绝对角度的0~180度舵机,当属最为常见的那种。
0度到270度伟创动力舵机,以及360度的舵机,其对应的脉冲范围是不一样的,比如说700微秒到2300微秒,修改Servo库的()这个方法是可以进行调整的。
连续旋转舵机:内部去掉了限位机构,角度指令变为速度控制。
倘若你所购置的是360度的舵机,然而却想要将其定位至特定的角度,这是根本无法达成的,——请去更换成标准的180度型号。
原因1:出现电压不足的状况。当舵机承受的负载比较大的时候,的5V输出电流(大约500mA)数量不多。解决办法:额外连接5V电池组,并且把外接电源的GND和的GND去进行连接。
解释2:信号线连接不正确,或者引脚对PWM不予以支持。在 Uno上面,支持PWM的引脚是3、5、6、9、10、11。要是使用别的数字引脚,那就需要改用软件来模拟PWM,不过这并不被推荐。
检查电源,运用示波器或者万用表去测量5V电压,而且所述波动小于0.25V。 电源相较于USB供电而言更加稳定。
由于在loop()函数当中,频繁地去执行并非舵机的操作,像是大量地使用.print,这种情况会致使信号出现延迟,这就是代码干扰的表现。针对此问题解决的办法是,要么把舵机控制放置在独立定时器中断的外面,要么就是降低其他任务的频率。
类型不同之处:特定的一些用于工业方面的舵机,像是专门应用于机器人的那种,其默认的脉冲范围处于700至2300μs之间 ,通过运用.(9, 700, 2300)对其进行再次校准。
![]()
机械卡顿:拆下外部结构,检查是否有异物卡住输出齿轮。
引脚出现冲突,因Servo库占据了一个定时器,也就是 ,这有可能跟 Tone() 或者 库产生冲突,解决办法是,换到其他的 PWM 引脚,或者移除产生冲突的库。
控制最多12个舵机, Uno需要外接电源这样做。接线的时候,每个舵机的信号线去占用不同的PWM引脚啦,并且电源和地线你要并联起来哟。示例:
#
Servo , ;
void setup() {
.(9);
.(10);
}
void loop() {
.write(0);
.write(180);
delay(1000);
.write(180);
.write(0);
delay(1000);
}
留心:每增添一个舵机的情况下,峰值电流会相应增长200至800mA。当运用3个MG995之时,需要额外连接7.4V/5A以上的电源。
#
Servo ;
int ;
void setup() {
.(9);
.begin(9600);
.("输入0~180之间的角度");
}
void loop() {
if (.()) {
= .();
if ( >= 0 && <= 180) {
.write();
.print("舵机转到 ");
.();
} else {
.("角度无效,请输入0~180");
}
}
}
重申核心观点:
控制 Uno舵机的重点并非那种复杂繁多的代码,而是存在于这三个要点之中:
1. 正确的供电——大多数故障源于电流不足;
2. 匹配的信号引脚——使用PWM口(推荐9号);
3. 对于舵机类型的选择,要明确,标准一百八十度舵机是用于定位的,而三百六十度舵机则是用于连续旋转的,需加以区分。
你的下一步行动方案:
1. 即刻依据本文接线图以及代码, SG90舵机去完成一场“来回摆动”的基础性实验(花费时间不超过5分钟)。
2. 将舵机于你所负责项目里展现出的最大负载扭矩予以记录,依据本文所提供的选型表去采购超出其负载扭矩百分之三十冗余量的型号。
3. 假定你的项目存在要同时操控4个以上舵机的情况,那么请预先筹备一个7.4V锂电以及DCDC降压模块(其输出为5V/5A),以此防止烧坏。
要是存在控制总线舵机(RS 485/CAN)的需求,或者有着更精确的力矩控制方面的需要,那就去查阅对应舵机手册当中的“异步串行协议”章节——然而绝大多数爱好者运用本文的PWM方法已然足够。
进行验证,完成上述所列步骤之后,用手去阻挡舵机摇臂,它产生明显的对抗力,而且在松开之后能够恢复到原本的位置。万一能够做到这些,那么你已然把控了控制舵机的所有必要知识。