发布时间: 2026-05-06
众多爱好者于制作智能小车或者机械臂期间伟创动力舵机,会碰到一个问题,那就是启用超声波传感器去触发舵机转动至某个角度之后,舵机没法稳定维持,会产生抖动的状况又或者自行回位而去位置。举例来讲伟创动力,当超声波检测到障碍物距离小于30厘米的时候,你期望舵机带动云台转动到90度并且维持住,然而实际上舵机仅仅是瞬间动一下接着又弹回到原来的位置。这一般是由于控制程序没有持续输出保持角度这样的信号,又或者是舵机角度映射计算出现了错误。跟着下面这个视频教学,它会讲解完整步骤,教你怎样正确去调整,从而让舵机稳稳地停在你想要的那个任意角度上。
由控制信号线所接收的PWM(脉冲宽度调制)信号,决定了舵机的角度。标准舵机每20毫秒会接收一个脉冲,脉冲宽度处于0.5毫秒到2.5毫秒之间时,对应着0度到180度 (不同舵机范围略有差异)。要使舵机维持在一个角度,就不间断地去发送该角度所对应的脉冲宽度信号,而不能仅仅发送一次。调整目标角度,就是对脉冲宽度数值作出改变。
把超声波传感器的Trig引脚,连接到开发板的数字引脚,比如D9,再把超声波传感器的Echo引脚,连接到开发板的数字引脚,例如D10。
把舵机的信号线,也就是通常呈现橙色或者黄色的线,连接到那个PWM输出引脚,像D5这个引脚,然后电源线和地线分别连接到5V以及GND。
留意,舵机瞬间电流较大,倘若直接经由开发板供电,那么有可能致使复位,故而建议运用外部5V电源并且进行共地处理。
![]()
当处于编程主循环之际,不间断地读取有关超声波返回的、以厘米作为单位的距离呢。示例伪代码如下:
= e(, );
关键要点在于,当两者间的距离小于预先设定好的阈值之际,要使得舵机转动到指定确切角度且保持该信号状态;不然的话,就要转动到另外一个角度。错误的行为方式是仅仅在检测到有变化之时进行一次写入操作,而正确的行为方式是在每一次循环的过程当中都执行写入动作。
#
Servo ;
void loop() {
float = ();
if ( < 30) {
.write(90); // 转到90度并持续保持
} else {
.write(0); // 转到0度
}
delay(15); // 等待舵机到达位置,但信号持续输出
}
要是想变动保持着的角度值,只要去更改.write(角度)里头的数字就行。角度的范围一般是0到180。要是你的舵机是0到270°或者0到360°,那就得查阅舵机数据手册,去算出对应的PWM脉冲宽度(比如说,0°对应0.5ms,270°对应2.5ms,采用线性插值)。
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 舵机剧烈抖动 | 供电不足或信号线接触不良 | 使用外置稳压电源(5V/2A以上),检查杜邦线 |
| 转到目标角度后慢慢回位 | 代码中只写入了一次,没有持续写入 | 确保.write()在每次循环中都执行 |
| 超声波触发后舵机反应慢 | 循环中加入了过长的延时 | 减少delay(),改用非阻塞定时读取 |
| 舵机总是转到最大角度 | 角度值超出范围或信号引脚不正确 | 检查.()的引脚,确认角度值≤180 |
![]()
#
Servo servo;
const int = 9;
const int = 10;
float ;
void setup() {
servo.(5);
(, );
(, INPUT);
.begin(9600);
}
void loop() {
// 获取距离
(, LOW);
(2);
(, HIGH);
(10);
(, LOW);
long = (, HIGH);
= * 0.034 / 2; // 单位厘米
// 根据距离控制舵机角度并持续保持
if ( > 0 && < 30) {
servo.write(90); // 障碍物靠近,转到90度并保持
.("Hold at 90°");
} else {
servo.write(0); // 无障碍物,转回0度并保持
}
delay(20); // 20ms符合舵机信号周期,同时保证读取稳定
}
唯一让舵机于超声波触发之后维持固定角度的办法,是去编写持续输出那个对应指定角度PWM信号的控制程序,并非单次触发。只要调整角度,仅需修改写入的目标值就行。任何出现“只能动一下却没法保持”的状况,要优先检查循环里是不是每次都在执行servo.write()。
1. 按照上述所提及的步骤,去连接硬件,进而上传代码,要单独测试舵机,看看它能不能稳定地停在0°,再看看能不能稳定地停在90°,还有能否稳定地停在180°(通过使用servo.write()在setup中进行循环写入,然后加以观察)。
2. 增添超声波传感器之后,借由串口监视器,实时去查看距离值,来认定阈值判断是正确的。
3. 若是舵机仍旧存在抖动的情况,那就去更换质量优良的舵机,并且要保证电源输出电流大于或等于2A。
4. 根据视频里头的实际接线状况以及调试展示情形,一行一行地去对比你的代码,这样就能一次性达成成功。



