Arduino 简明教程

Arduino - Servo Motor

伺服电机是一种具有输出轴的小型设备。通过向伺服发送编码信号,可以将该轴定位到特定的角度位置。只要输入线路上存在编码信号,伺服就会保持轴的角度位置。如果编码信号发生变化,轴的角度位置就会发生变化。在实践中,伺服用于遥控飞机,以定位升降舵和方向舵等控制面。它们还用于遥控汽车、木偶,当然还有机器人。

servo motor

伺服在机器人技术中非常有用。这些电机小巧,具有内置控制电路,并且相对于其尺寸而言非常强大。标准伺服(如 Futaba S-148)具有 42 oz/inch 的转矩,对于其尺寸来说非常强劲。它还根据机械负载绘制功率。因此,负载较轻的伺服不会消耗太多能量。

伺服电机的内部结构如下图所示。可以看到控制电路、电机、一组齿轮和外壳。还可以看到连接到外部世界的三根电线。一根用于电源(+5 伏)、地线,并且白线是控制线。

servo motor control circuitry

Working of a Servo Motor

伺服电机具有一些控制电路和一个电位器(可变电阻器,又称电位器),连接到输出轴上。在上面的图片中,可以在电路板的右侧看到电位器。这个锅允许控制电路监控伺服电机的当前角度。

如果轴处于正确的角度,那么电机就会关闭。如果电路发现角度不正确,它会转动电机直到它达到所需的角度。伺服的输出轴能够移动大约 180 度。通常,它在 210 度范围内某处,但它会根据制造商而有所不同。通常的伺服用于控制 0 到 180 度的角运动。由于内置在主输出齿轮上的机械停止,它在机械上不能转得更远。

施加于电机的功率与它需要行进的距离成正比。因此,如果轴需要转动较大的距离,电机将以全速运转。如果它仅需转动较小的距离,电机将以较慢的速度运转。这被称为 proportional control

How Do You Communicate the Angle at Which the Servo Should Turn?

控制线用于传达角度。角度由施加于控制线的脉冲的持续时间决定。这被称为 Pulse Coded Modulation 。伺服器期望每隔20毫秒(0.02 秒)看到一个脉冲。脉冲的长度将决定电机转动多远。例如,1.5毫秒的脉冲将使电机转动到90度位置(通常称为中立位置)。如果脉冲短于1.5毫秒,则电机会将轴转动得更接近0度。如果脉冲长于1.5毫秒,则轴会转动得更接近180度。

angle turn

Components Required

您将需要以下组件:

  1. 1 × Arduino UNO 电路板

  2. 1 × Servo Motor

  3. 1个×ULN2003驱动IC

  4. 1个×10KΩ电阻器

Procedure

按照电路图进行操作,并按照下面给出的图片所示进行连接。

servo motor connections

Sketch

在电脑上打开 Arduino IDE 软件。使用 Arduino 语言编写代码将控制你的电路。单击新建打开一个新草图文件。

sketch

Arduino Code

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

Code to Note

伺服电机具有三个端子 - 电源、接地和信号。电源线通常为红色,应连接到Arduino上的5V引脚。接地线通常为黑色或棕色,应连接到ULN2003 IC的一个端子(10 -16)。为保护您的Arduino板免受损坏,您将需要一些驱动器IC来完成此任务。在这里,我们使用了ULN2003 IC 来驱动伺服电机。信号线通常为黄色或橙色,应连接到Arduino引脚号9。

Connecting the Potentiometer

分压器/电位分压器是一种串联电路中的电阻器,它将输出电压调整为施加的输入电压的特定比率。以下是电路图 −

connecting potentiometer

V_{out} = (V_{in} \times R_{2})/ (R_{1} + R_{2})

Vout是输出电位,它取决于串联中的施加输入电压(Vin)和电阻器(R1和R2)。这意味着流过R1的电流也将流过R2而不被分流。在上面的等式中,随着R2值的改变,Vout会根据输入电压Vin相应地调整。

通常,电位器是一种电位分压器,它可以根据可变电阻的值来调整电路的输出电压,该值使用旋钮进行调整。它有三个引脚:GND、信号和+5V,如下所示 −

potentiometer with description

Result

通过改变电位器的NOP位置,伺服电机将改变其角度。