概述
你是否想在不构建电机控制器的情况下将运动功能添加到一个Arduino项目?那么伺服电机可能是最理想的选择。
与直流电动机不同,您可以精确控制这些电动机的位置。指示他们指向何处。
它们在许多机器人项目中很有用,例如在RC模型上的转向装置,或驱动传感器旋转,从而让机器人车辆环顾四周。
什么是伺服?
伺服是闭环控制系统的总称。
闭环系统使用反馈信号来调整电动机的速度和方向,以获得所需的结果。
RC伺服电机和工业的伺服电机在原理上是相通的。它包含一个小型直流电动机,通过齿轮连接到输出轴。
输出轴驱动伺服臂,并且还连接到电位计。
电位计向伺服控制单元提供位置反馈信息,使将当前位置和目标位置能够进行比较。
控制单元能够利用比较的结果调整电机当前位置,直到匹配目标位置。
伺服电机如何工作?
您可以通过向信号线发送一系列脉冲来控制伺服电机。传统的模拟伺服电机期望大约每20毫秒接收一次脉冲(即信号应为50Hz)。
脉冲的长度决定了伺服电机的位置。
- 如果脉冲高电平持续1ms,则伺服角度将为零。
- 如果脉冲在1.5ms内为高电平,则伺服将处于其中心位置。
- 如果脉冲高电平持续2ms,则伺服将到达180度。
- 在1ms到2ms之间的脉冲将使伺服轴在其行程的整个180度内移动。
脉冲的持续时间有时会因品牌不同而有所不同,0度时为0.5毫秒,180度时为2.5毫秒。
伺服电机引脚排列
伺服电机通常具有三个连接,如下所示:
伺服电机之间电线的颜色各不相同,但红色电线始终为5V,GND为黑色或棕色。控制线通常为橙色或黄色。
将伺服电机连接到Arduino UNO
让我们将伺服电机连接到Arduino。
例如,让我们使用SG90微型伺服电机。它在4.8-6VDC(典型值为5V)上运行,并且可以旋转大约180度(每个方向90度)。
它在空闲时消耗约10mA的电流,在移动时消耗100mA至250mA的电流,因此我们可以通过Arduino上的5伏输出为其加电。
如果您的伺服器消耗的电流超过250mA,请考虑为伺服器使用单独的电源。
将红色导线连接至Arduino的5V(或DC插孔),并将黑色/棕色导线接地。最后将橙/黄线连接到arduino-PWM使能引脚9。
Arduino代码–扫描
对于我们的Arduino简单项目,我们将使用Arduino IDE随附的内置示例之一。
转到“Examples”子菜单。选择“Servo->Sweep”。
将以下代码上传到arduino中。您将立即看到电动机朝一个方向移动,然后又朝另一个方向移动。
#include <Servo.h>
int servoPin = 9;
Servo servo;
int angle = 0;
// servo position in degrees
void setup() {
servo.attach(servoPin);
}
void loop() {
// scan from 0 to 180 degrees
for(angle = 0; angle < 180; angle++) {
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 0; angle--) {
servo.write(angle);
delay(15);
}
}
说明:
控制伺服器不是一件容易的事,但是对我们来说幸运的是,Arduino IDE已经包含了一个非常漂亮的库Servo。它包含简单的命令,因此您可以快速指示伺服器转到特定角度。
如果要使用这些命令,则需要通过以下命令告诉Arduino IDE您正在使用该库:
#include <Servo.h>
接下来要做的是声明与伺服电机的控制引脚连接的Arduino引脚。
int servoPin = 9;
下面的线创建一个伺服对象。
Servo servo;
实际上,您最多可以以这种方式定义八个伺服器,例如,如果我们有两个伺服器,则可以编写如下代码:
Servo servo1;
Servo servo2;
该变量angle
用于存储舵机当前角度(以度为单位)。
int angle = 0;
在设置功能中,我们servo
使用以下命令将对象链接到将控制伺服的引脚:
servo.attach(servoPin);
循环功能实际上包含两个for循环。第一个循环在一个方向上增加角度,第二个"for"在相反方向上增加角度。
下面的命令告诉伺服器将其位置更新到指定角度。
servo.write(angle);
故障排除
如果您决定直接从Arduino运行,有时您的伺服器可能会出现异常。这样做的原因是,伺服器会消耗大量功率,尤其是在启动过程中,这会导致Arduino板复位。
如果发生这种情况,通常可以通过在GND和5V之间放置一个相当大的电解电容器(470uF – 1000uF)来解决此问题。
电容器充当电能的储存器,因此当电动机启动时,它会从电容器以及Arduino电源中获取电荷。
电容器的较长引线应连接到5V,负极引线应连接到GND。
用电位器控制伺服
下一步是添加一个电位计,以便我们可以通过旋转旋钮来控制伺服器的位置。
当您要控制连接到伺服系统的传感器的平移和倾斜时,此项目可能非常有用。
接线
如接线图所示,您将需要一个电位计,从10k起的任何值都可以。将电位计的一端接地,另一端与Arduino 5V相连,抽头与模拟输入A0相连。
Arduino代码
使伺服跟随旋钮位置的代码比上一个实例更简单。
#include <Servo.h>
int potPin = 0;
int servoPin = 9;
Servo servo;
void setup() {
servo.attach(servoPin);
}
void loop() {
int reading = analogRead(potPin);
int angle = map(reading, 0, 1023, 0, 180);
servo.write(angle);
}
请注意,现在有一个名为的新变量potPin
。
在循环功能中,我们首先从模拟引脚A0读取值。
int reading = analogRead(potPin);
这给我们提供了一个介于0到1023之间的值。但是我们需要按比例缩小它,因为伺服器只能旋转180度。
一种方法是使用Arduino map()函数将一个范围内的数字重新映射到另一个范围。因此,下面的线更改读数以表示0到180度之间的角度。
int angle = map(reading, 0, 1023, 0, 180);
最后,我们使用write()
命令告诉伺服器将其位置更新为电位计选择的角度。
servo.write(angle);
最后
以上就是清脆曲奇为你收集整理的arduino控制小车转向_伺服电机如何工作及其Arduino接口的全部内容,希望文章能够帮你解决arduino控制小车转向_伺服电机如何工作及其Arduino接口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复