电子说
概述
在本课程中,您将学习如何使用Arduino控制伺服电机。
首先,您将使伺服器回扫并
零件
要构建本课中描述的项目,您将需要以下零件。
零件 数量
伺服电机 1
10kΩ可变电阻器(pot)
1
半尺寸面包板
1
Arduino Uno R3
1
跳线包
1
100 µF电容器
可选
“扫描”的面包板布局
对于本实验,唯一与Arduino连接的是伺服电机。
伺服电机有三根引线。引线的颜色在伺服电机之间有所不同,但是红色引线始终为5V,而GND将为黑色或棕色。另一个引线是控制引线,通常为橙色或黄色。该控制导线连接到数字引脚9。
伺服器方便地端接到一个插座中,我们可以在其中插入跳线,将其链接到面包板,然后再连接到Arduino。
如果伺服器不正常
您的伺服器可能行为异常,您可能会发现只有在将Arduino插入某些USB端口时才会发生这种情况。这是因为伺服器消耗了大量功率,尤其是在电动机启动时,这种突然的高需求足以降低Arduino板上的电压,从而使其自身复位。
如果这发生这种情况,那么通常可以通过在面包板上的GND和5V之间添加一个高值电容器(470uF或更大)来治愈它。
电容器充当电动机的蓄电库,因此在启动时,它会从电动机电容器和Arduino电源。
电容器的较长引线为正极引线,应将其连接到5V。负极引线也经常标有“-”符号。
Arduino的‘Sweep’代码
将以下草图加载到Arduino上,您应该发现舵机立即开始首先向一个方向旋转,然后又向另一个方向旋转
该草图基于标准的“扫描”草图,您可以在Arduino示例中的“ servo”文件夹下找到该草图。如果愿意,可以运行该草图。
下载:文件
复制代码
/*
Adafruit Arduino - Lesson 14. Sweep
*/
#include
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);
}
} /*
Adafruit Arduino - Lesson 14. Sweep
*/
#include
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库,以便您可以指示伺服电机转至特定角度。
使用伺服的命令类似于内置的Arduino命令,但是由于您始终不会在项目中使用伺服,因此将它们保存在一个称为库的东西中。如果要使用servo库中的命令,则需要通过以下命令告诉Arduino IDE您正在使用该库:
下载:文件
复制代码
#include #include
变量“ servoPin”来定义用于控制伺服器的引脚。
此行:
下载:文件
复制代码
Servo servo; Servo servo;
定义了一个新的变量“ servo”输入“伺服”。该库为我们提供了一种新类型,例如表示伺服的“ int”或“ float”。您实际上可以通过这种方式最多定义八个伺服器,因此,如果我们有两个伺服器,则可以编写如下内容:
下载:文件
复制代码
Servo servo1;
Servo servo2; Servo servo1;
Servo servo2;
在“设置”功能中,我们需要使用以下命令将“ servo”变量链接到将控制伺服器的引脚:
下载:file
复制代码
servo.attach(servoPin); servo.attach(servoPin);
变量‘angle’用于包含当前伺服角度度。在“循环”功能中,我们使用两个“ for”循环首先在一个方向上增加角度,然后在达到180度时又在另一个方向上增加角度。
命令:
下载:文件
复制代码
servo.write(angle); servo.write(angle);
告诉伺服器将其位置更新为参数提供的角度。
“旋钮”的面包板布局
下一步是添加一个锅,以便我们可以通过旋转旋钮来控制伺服器的位置。
您只需要在Arduino上将锅和导线从其滑块添加到A0。
Arduino的“旋钮”代码
使伺服跟随旋钮位置的代码比使其扫掠更简单。
下载:文件
复制代码
/*
Adafruit Arduino - Lesson 14. Knob
*/
#include
int potPin = 0;
int servoPin = 9;
Servo servo;
void setup()
{
servo.attach(servoPin);
}
void loop()
{
int reading = analogRead(potPin); // 0 to 1023
int angle = reading / 6; // 0 to 180-ish
servo.write(angle);
} /*
Adafruit Arduino - Lesson 14. Knob
*/
#include
int potPin = 0;
int servoPin = 9;
Servo servo;
void setup()
{
servo.attach(servoPin);
}
void loop()
{
int reading = analogRead(potPin); // 0 to 1023
int angle = reading / 6; // 0 to 180-ish
servo.write(angle);
}
现在有一个名为“ potPin”的第二个变量。
要设置伺服器的位置,我们从A0读取一个模拟读数。这样我们得到的值在0到1023之间。由于伺服器只能旋转180度,因此我们需要按比例缩小该值。将其除以6将得到一个介于0到170之间的角度,就可以了。
伺服电机
伺服电机的位置由脉冲长度设置。伺服器预计大约每20毫秒接收一次脉冲。如果该脉冲在1毫秒内为高电平,则伺服角度将为零;如果为1.5毫秒,则它将达到其中心位置;如果为2毫秒,则将处于180度。
伺服器的端点可能会有所不同许多伺服系统只能转大约170度您还可以购买可以连续旋转360度的“连续”伺服器。
在伺服器内部
下面的简短视频向您展示了伺服器内部正在发生的情况。
但是请注意,如果像这样拆除伺服器,很有可能不会正确返回。
其他要做的事情
打开“扫描”草图,然后尝试将延迟从15毫秒减少到5毫秒。请注意伺服旋转的速度。
尝试修改“旋钮”草图,以使它不再从旋钮的位置获取伺服角度,而是从串行监视器获取该角度,以便可以从计算机控制伺服。
》提示:要使草图从串行监视器读取度数,可以使用functionSerial.parseInt()。这将从串行监视器中读取一个数字。
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !