搜索代码

使用电位器控制Arduino伺服电机

使用电位器控制Arduino伺服电机

在本教程中,我们将探讨如何使用电位器和Arduino控制伺服电机。目标是创建一个简单的电路,其中伺服电机的位置根据电位器的旋转进行调整。在这个项目结束时,您将拥有一个工作模型,当您旋转电位器时,伺服角度将平滑地从0度变化到180度。这是理解Arduino中模拟输入和伺服控制基础的好方法。

为了实现这一目标,我们将使用一个Arduino板、一个伺服电机和一个电位器。电位器充当可变电阻,为Arduino提供模拟输入,Arduino将根据该输入确定伺服电机的位置。这个项目不仅有趣,而且具有教育意义,因为它展示了电子和编程中的关键概念。有关更深入的解释,请务必查看视频(视频在00:00)。

硬件解析

在这个项目中,主要组件是Arduino板、伺服电机和电位器。Arduino是操作的核心,处理输入并控制输出。伺服电机将根据从Arduino接收到的命令进行物理移动。电位器可以是1k欧姆到1M欧姆,允许用户提供可变输入,从而转化为伺服运动。

伺服电机通过接收脉宽调制(PWM)信号来操作,该信号指示所需的位置。电位器在旋转时改变其电阻,Arduino将其读取为模拟电压。伺服电机在5V下工作,不支持3.3V。该电压随后被映射到伺服电机的运动范围,允许其从0度平滑移动到180度。

SG90伺服电机的数据表详情

制造商视差
零件编号SG90
逻辑/IO电压5 V
供电电压4.8-6 伏
输出电流(每通道)约500毫安
峰值电流(每通道)1 A
PWM频率指导50 赫兹
输入逻辑阈值0.5 V(低),2.5 V(高)
电压降 / RDS(导通)/ 饱和度0.5 伏特在 500 毫安
热限制0°C 到 60°C
包裹标准9克伺服电机
备注 / 变体常用于遥控应用

  • 确保伺服电机不超过其最大电流额定值。
  • 如果伺服在高负载下持续运行,请使用散热器。
  • 将电位器连接到模拟引脚以获得准确的读数。
  • 注意伺服控制的PWM信号时序。
  • 检查伺服器的运动范围,以避免物理障碍。

接线说明

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor

对于此设置,您需要按如下方式连接组件:

将电位器的中间引脚(滑动触点)连接到Arduino的模拟引脚。A0电位器的另外两个引脚应连接到5VGND在Arduino上。对于伺服电机,将红线连接到5V,黑色电线连接到GND,黄色或白色线连接到数字引脚9在Arduino上。这种安排允许电位器向Arduino提供模拟输入,Arduino将根据该输入控制伺服电机的位置。

确保验证所有连接,并确保伺服电机在其运动范围内没有障碍。如果使用不同的Arduino型号,请确认模拟输入和伺服输出的引脚分配是兼容的。

代码示例与演练

以下是初始化伺服电机并读取电位器值的代码摘录:


#include 

Servo myservo;  // create servo object to control a servo
int pos = 0;    // variable to store the servo position

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

在这段代码中,我们包含了Servo库并创建了一个名为的舵机对象。myservo伺服器连接到引脚9,这使我们可以使用这个引脚来控制它。


void loop() {
  int sensorValue = analogRead(A0);  // read the potentiometer
  pos = map(sensorValue, 0, 1023, 0, 180);  // map to servo position
  myservo.write(pos);  // move servo to position
  delay(15);  // waits 15ms for the servo to reach the position
}

在循环函数中,我们从引脚读取电位器值。A0并将其范围(0-1023)映射到伺服的范围(0-180度)。myservo.write(pos)命令然后根据电位器的旋转将伺服电机移动到所需位置。

演示 / 期待什么

当您运行此程序时,您应该看到伺服电机随着您转动电位器而平滑地从 0 移动到 180 度。如果伺服电机没有按预期移动,请检查接线并确保电位器正常工作。此外,请确保 Arduino 正常供电,并且代码已无错误地上传。您可以期待看到伺服电机实时反映电位器的位置(视频中在 02:00)。

视频时间戳

  • 00:00- 项目介绍
  • 01:30- 硬件设置说明
  • 03:45- 线圈说明
  • 05:00- 代码演示
  • 07:30- 完成项目的演示

图像

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor
11-Controlling a servo position using a potentiometer using Arduino
语言: C++
/*
 * 原始来源:Arduino IDE  
 * Arduino 项目:控制伺服位置  
 * 此代码与 Robojax.com 的视频教程一起使用  
 * 发布于2017年4月24日,地点:加拿大安大略省阿贾克斯。  
 * 编写/编辑者:Ahmad Shamshiri  
 * 在 YouTube 上观看视频:https://youtu.be/kZ9b31gVemc  
 * 查看此代码的教程页面 https://robojax.com/RJT8  
 * 使用电位器(可变电阻)控制伺服位置
 */
#include <Servo.h>

Servo myservo; // 创建伺服器对象以控制伺服器
 // 大多数电路板上可以创建十二个伺服对象。

int pos = 0; // 用于存储伺服位置的变量

void setup() {
  myservo.attach(9); // 将引脚9上的伺服器附加到伺服器对象上
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // 从0度到180度
 // 以1度为步长
    myservo.write(pos); // 告诉伺服器到达变量“pos”中的位置。
    delay(15); // 等待15毫秒以让伺服器达到位置
  }
  for (pos = 180; pos >= 0; pos -= 1) { // 从180度变为0度
    myservo.write(pos); // 告诉伺服器到达变量“pos”中的位置。
    delay(15); // 等待15毫秒以让伺服器达到位置
  }
}

资源与参考

尚无可用资源。

文件📁

没有可用的文件。