4.3.5 舵机模块#

4.3.5.1 简介#

本教程将为您详细介绍舵机模块的使用方法和应用技巧。舵机是一种能够精确控制角度的电机,广泛应用于机器人、遥控模型和自动化设备中。教程内容包括舵机的工作原理、引脚功能、电路连接方法以及如何通过微控制器(如ESP32)控制舵机的转动角度。您将学习如何编写代码来实现舵机的精确位置控制、平滑运动以及多舵机协同工作。无论您是电子初学者还是有经验的开发者,本教程都将帮助您掌握舵机模块的应用,为您的项目增添灵活的机械控制功能。

4.3.5.2 元件知识#

Img

控制原理:舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms 之间,但是,事实上脉宽可由0.5ms 到2.5ms 之间,脉宽和舵机的转角0°~180°相对应。有一点值得注意的地方,由于舵机牌子不同,对于同一信号,不同牌子的舵机旋转的角度也会有所不同。

引脚介绍:

j119

GND: 一个接地的引脚,棕色

VCC: 一个连接到+5V电源的引脚,红色

S: 信号端的引脚,PWM信号控制,橙色

内部结构图:

Img

  • 信号线:接收来自微控制器的控制信号;

  • 电位器:可以测量输出轴的位置量,属于整个舵机机构的反馈部分;

  • 内部控制器:处理来自外部控制的信号,驱动电机以及处理反馈的位置信号,是整个伺服机构的核心;

  • 直流电机:作为执行机构,输出多少转速,转矩,位置;

  • 传动机构/舵机系统:该机构根据一定传动比,将电机输出的行程缩放到最终输出的角度上。

驱动舵机:

通过向舵机的信号信号线发送PWM信号来控制舵机的输出量,PWM脉冲的占空比直接决定了输出轴的位置。

例如(这里以180°舵机为例):

  • 当我们向180°舵机发送脉冲宽度为1.5毫秒(ms)的信号时,舵机的输出轴将移至中间位置(90度);

  • 脉冲宽度为0.5ms时,舵机的输出轴将移至最小的位置(0度);

  • 脉冲宽度为2.5ms时,舵机的输出轴将移至最大的位置(180度)。

img

舵机的周期通常为20毫秒,希望以50Hz的频率产生脉冲,但是许多伺服器在40至200 Hz的范围内也都能正常工作。

注: 不同类型和品牌的舵机之间最大位置和最小位置的角度可能会不同。许多舵机仅旋转约170度(或者只有90度),但宽度为1.5ms的伺服脉冲通常会将伺服设置为中间位置(通常是指定全范围的一半)。

4.3.5.3 接线图#

  • 舵机的黄色线连接到io26

⚠️ 特别注意:智慧农场已经组装好了,这里不需要把舵机拆下来又重新组装和接线,这里再次提供接线图,是为了方便您编写代码!

Img

4.3.5.4 实验代码#

⚠️ 特别注意: 上传代码前要添加库文件,库文件存放在Arduino_库文件文件夹中名为ESP32Servo.zip

代码文件在Arduino_代码文件夹中,代码文件为4_3_5_Servo,如下图所示:

Img

鼠标双击4_3_5_Servo.ino即可在Arduino IDE中打开。

/*
 * 文件名 : Servo
 * 功能   : 舵机转动
 * 编译IDE:ARDUINO 2.3.6
 * 作者   : https://www.keyesrobot.cn/
*/

#include <ESP32Servo.h>  //需要导入ESP32开发板的舵机库

Servo myservo;  // 创建舵机对象来控制舵机,在ESP32上可以创建16个舵机对象
                
int pos = 0;    // 定义变量存储舵机位置
// ESP32上推荐的PWM GPIO引脚包括2、4、12-19、21-23、25-27、32-33

int servoPin = 26;
                
void setup() {
  myservo.attach(servoPin);   // 将引脚26上的舵机连接到舵机对象上
  myservo.write(180);
  delay(1000);
}

void loop() {
  for (pos = 180; pos >= 80; pos -= 1) { // 从180度到80度
    myservo.write(pos);              // 告诉舵机到变量“pos”的位置
    delay(15);                       // 每次等待15ms让舵机到达对应的位置
  }
  for (pos = 80; pos <= 180; pos += 1) { // 从80度到180度
    // 每次15度
    myservo.write(pos);              //告诉舵机到变量“pos”的位置
    delay(15);                       // 每次等待15ms让舵机到达对应的位置
  }
}

4.3.5.5 实验结果#

按照接线图接好线,外接电源,选择好正确的开发板板型(ESP32 Dev Module)和 适当的串口端口(COMxx),然后单击按钮Img上传代码。上传代码成功后可以看到饲料盒在慢慢打开,慢慢关闭,实现可控制的。

注意:SG90舵机是180度,在套件中的饲料盒较小,SG90舵机只需旋转100度,就能完全关闭饲料盒。

  • 80度:完全打开。

  • 120度:打开一半。

  • 180度:关闭。

Img

⚠️ 注意:请勿将手指伸入到饲料盒中,谨防夹伤!请勿将其他物体堵住饲料盒盖,以免弄坏舵机。