Arduino舵机控制入门教程

舵机是一种常见的执行器,能够精确控制旋转角度,广泛应用于机器人、模型控制等领域。本教程将带你学习如何使用Arduino控制舵机。

1. 所需材料

  • Arduino开发板(如UNO)
  • 舵机(常见型号:SG90)
  • 面包板与跳线

2. 舵机基础知识

舵机组成

  • 直流电机
  • 减速齿轮组
  • 角度传感器(电位器)
  • 控制电路

工作原理

  • 通过PWM(脉冲宽度调制)信号控制角度
  • 标准PWM频率:50Hz(周期20ms)
  • 脉冲宽度对应角度:
    • 0.5ms → 0°
    • 1.5ms → 90°
    • 2.5ms → 180°

3. 电路连接

舵机引脚说明(通常有三种颜色):

  1. 棕色/黑色:GND(接地)
  2. 红色:VCC(电源,通常接5V)
  3. 橙色/黄色:信号(接Arduino数字引脚)

电路连接图

Arduino      舵机
+5V   ─────── 红色(VCC)
GND  ─────── 棕色(GND)
D9   ─────── 橙色(信号)

4. 安装Servo库

在Arduino IDE中安装Servo库:

  1. 打开Arduino IDE
  2. 点击「工具」→「管理库」
  3. 搜索「Servo」并安装

5. 基础控制代码

下面是一个简单的舵机控制程序,让舵机在0°-180°之间往复转动:

#include <Servo.h>  // 引入舵机控制库

Servo myServo;      // 创建舵机对象
const int servoPin = 9;  // 定义信号引脚
int angle = 0;      // 当前角度值

void setup() {
  myServo.attach(servoPin);  // 初始化舵机连接
}

void loop() {
  // 从0°旋转到180°
  for (angle = 0; angle <= 180; angle += 1) {
    myServo.write(angle);  // 设置舵机角度
    delay(15);             // 等待舵机转动到位
  }
  
  // 从180°旋转回0°
  for (angle = 180; angle >= 0; angle -= 1) {
    myServo.write(angle);
    delay(15);
  }
}

6. 代码解释

  1. 库和变量定义

    • Servo.h:舵机控制核心库
    • myServo:创建舵机对象
    • servoPin:信号引脚D9
    • angle:存储当前角度值
  2. setup() 函数

    • myServo.attach(servoPin):初始化舵机连接,指定信号引脚
  3. loop() 函数

    • myServo.write(angle):设置舵机角度(0-180°)
    • delay(15):延时15ms,确保舵机有足够时间转动到指定位置

7. 进阶控制:使用电位器调节角度

下面的代码使用电位器作为输入设备,实时控制舵机角度:

#include <Servo.h>

Servo myServo;
const int servoPin = 9;
const int potPin = A0;  // 电位器连接引脚

void setup() {
  myServo.attach(servoPin);
  Serial.begin(9600);  // 初始化串口通信(可选)
}

void loop() {
  // 读取电位器值(0-1023)
  int potValue = analogRead(potPin);
  
  // 将电位器值映射到舵机角度范围(0-180°)
  int angle = map(potValue, 0, 1023, 0, 180);
  
  // 设置舵机角度
  myServo.write(angle);
  
  // 打印当前角度(可选)
  Serial.print("Potentiometer: ");
  Serial.print(potValue);
  Serial.print("  →  Angle: ");
  Serial.println(angle);
  
  delay(50);  // 短暂延时,稳定读取
}

8. 常见问题

  1. 舵机抖动或不转动

    • 检查电源是否稳定(舵机电流需求较大,建议使用外部电源)
    • 确认信号引脚连接正确
    • 尝试降低转动速度(增加delay()时间)
  2. 角度控制不准确

    • 部分舵机实际转动范围可能小于180°
    • 使用myServo.writeMicroseconds()进行更精确的控制(范围500-2500μs)
  3. 舵机发出噪音

    • 可能是供电不足导致
    • 添加电容滤波(在舵机电源引脚并联100μF电容)

9. 安全注意事项

  • 避免长时间让舵机处于极限位置(0°或180°)
  • 控制频率不要过高,避免舵机过热
  • 若使用多个舵机或大功率舵机,需使用外部电源

总结

通过本教程,你学会了:

  1. 舵机的基本连接方法
  2. 使用Servo库控制舵机角度
  3. 通过电位器实现实时控制
  4. 处理常见问题和安全注意事项

舵机是机器人项目中常用的执行器,掌握它的控制方法后,你可以尝试制作机械臂、云台、自动门等更复杂的项目!

0 条评论

目前还没有评论...