You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino舵机速度控制:如何降低舵机140°与159°之间切换的运行速度

解决方案

核心原理

你原有代码直接把目标角度一次性赋值给舵机,舵机默认会以硬件支持的最快速度跳转角度。要实现慢转,只需要把角度跳转改成逐度步进+每步添加短延时的逻辑即可。

具体修改步骤

  • 新增转速控制常量,数值越大舵机转动速度越慢,可根据需求自行调整
  • 新增舵机平滑转动专用函数,实现从当前角度逐步过渡到目标角度的逻辑
  • 替换原有直接给舵机写角度的代码,改为调用平滑转动函数

修改后完整代码

#include <Servo.h>

const int TOUCH_SENSOR_PIN   = 6;   // 触摸传感器1引脚
const int TOUCH_SENSOR_PIN2  = 7;   // 触摸传感器2引脚
const int SERVO_PIN          = 9;   // 舵机信号引脚
const int SERVO_DELAY        = 15;  // 舵机每步转动延时,单位毫秒,数值越大转得越慢

Servo servo; // 舵机控制对象

// 变量定义
int angle = 140;                  // 舵机当前角度
int lastTouchState;               // 触摸传感器1上一次状态
int currentTouchState;            // 触摸传感器1当前状态
int lastTouchState2;              // 触摸传感器2上一次状态
int currentTouchState2;           // 触摸传感器2当前状态

// 舵机平滑转动函数:输入目标角度,自动从当前角度慢转到目标角度
void servoWriteSlow(int targetAngle) {
  int currentAngle = servo.read(); // 读取舵机当前实际角度
  if (targetAngle > currentAngle) {
    // 角度递增的情况
    for (int i = currentAngle; i <= targetAngle; i++) {
      servo.write(i);
      delay(SERVO_DELAY);
    }
  } else if (targetAngle < currentAngle) {
    // 角度递减的情况
    for (int i = currentAngle; i >= targetAngle; i--) {
      servo.write(i);
      delay(SERVO_DELAY);
    }
  }
  angle = targetAngle; // 更新全局角度变量
}

void setup() {
  Serial.begin(9600);
  pinMode(TOUCH_SENSOR_PIN, INPUT);
  pinMode(TOUCH_SENSOR_PIN2, INPUT);
  servo.attach(SERVO_PIN);
  servo.write(angle);
  currentTouchState = digitalRead(TOUCH_SENSOR_PIN);
  currentTouchState2 = digitalRead(TOUCH_SENSOR_PIN2);
}

void loop() {
  lastTouchState    = currentTouchState;
  currentTouchState = digitalRead(TOUCH_SENSOR_PIN);
  
  lastTouchState2    = currentTouchState2;
  currentTouchState2 = digitalRead(TOUCH_SENSOR_PIN2);

  if((lastTouchState == LOW && currentTouchState == HIGH) || (lastTouchState2 == LOW && currentTouchState2 == HIGH)) {
    int targetAngle;
    if(angle == 140) {
      targetAngle = 159;
    } else if(angle == 159) {
      targetAngle = 140;
    }
    // 调用慢转函数替代原来的直接写角度
    servoWriteSlow(targetAngle);
  }
}

速度调整方法

修改常量SERVO_DELAY的数值即可调整转速:

  • 数值越大,每步转动间隔越长,整体转动速度越慢,比如设置为20时转动速度会比15更慢
  • 数值越小,每步转动间隔越短,整体转动速度越快,最小可设置为1(和默认最快速度接近)

内容的提问来源于stack exchange,提问作者Filip GG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 03:51:00