Skip to content

zsy0073/PWMmyservoLIB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PWM舵机控制库

项目简介

PWM舵机控制库是一个基于Arduino框架的ESP32驱动舵机的控制库,支持普通PWM舵机和乐幻索尔(Lobot)串行总线舵机。本库提供了简单易用的API,让您可以轻松控制各类舵机,实现精确的角度控制和平滑移动。

功能特点

PWM舵机控制器

  • 自动更新机制:无需在loop()中手动调用update()方法
  • 丰富的控制接口:支持多种移动方式(即时、指定时间、平滑移动)
  • 可自定义参数:可调整脉冲宽度(500-2500μs)以适配不同类型的舵机
  • 角度范围可调:默认支持0-180度,可根据需求自定义
  • 速度控制:可设置舵机移动速度,实现不同速度下的平滑转动

Lobot舵机控制器

  • 串行通信:通过串口与Lobot舵机控制板通信
  • 多舵机控制:支持同时控制多个舵机
  • 动作组功能:支持运行、停止、调速等动作组操作
  • 电池电压监测:可读取控制板电池电压
  • 舵机角度读取:支持读取舵机当前角度位置

硬件要求

  • 控制器:ESP32系列(建议使用ESP32-S3等新型号)
  • 舵机类型:
    • 普通PWM舵机(SG90、MG995等)
    • 乐幻索尔(Lobot)串行舵机(需配合其控制板)
  • 供电:建议使用独立的舵机电源,避免干扰主控板

安装方法

PlatformIO

  1. 在PlatformIO项目中,打开platformio.ini文件
  2. 添加本库作为依赖:
    lib_deps = 
      ESP32Servo
  3. 重新构建项目

Arduino IDE

  1. 安装ESP32开发板支持
  2. 通过库管理器安装ESP32Servo库
  3. 将本项目代码复制到您的项目中

基本使用

PWM舵机控制示例

#include <Arduino.h>
#include "PWMServoController.h"

PWMServoController myservo;    // 实例化普通PWM舵机控制对象 

// 舵机连接的引脚
const uint8_t SERVO_PIN = 18;  // ESP32-S3的GPIO18,根据实际连接修改

void setup() {
  Serial.begin(9600);
  Serial.println("PWM舵机控制示例开始");
  
  // 初始化舵机,连接到指定引脚
  myservo.init(SERVO_PIN);
  
  // 调整脉冲宽度以适应更多种类的舵机
  myservo.setPulseWidth(500, 2500);
  
  // 启用自动更新(默认已启用)
  myservo.setAutoUpdate(true);
}

void loop() {
  // 不再需要调用myservo.update(),库会自动处理
  
  // 以不同速度来回移动舵机
  Serial.println("舵机移动到0度位置(慢速)");
  myservo.moveServo(0, 2000);  // 慢速移动到0度,用时2000毫秒
  delay(3000);  // 等待舵机移动完成并稍作停留
  
  Serial.println("舵机移动到180度位置(快速)");
  myservo.moveServo(180, 500);  // 快速移动到180度,用时500毫秒
  delay(1000);  // 等待舵机移动完成并稍作停留
}

Lobot舵机控制示例

#include <Arduino.h>
#include "LobotServoController.h"

LobotServoController controller(Serial2);  // 使用Serial2与控制板通信

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);  // Lobot控制板默认波特率
  Serial.println("Lobot舵机控制示例开始");
  
  delay(1000);  // 等待串口初始化
}

void loop() {
  // 单个舵机控制
  controller.moveServo(1, 500, 1000);  // ID为1的舵机移动到500位置,用时1000ms
  delay(2000);
  
  // 多个舵机同时控制
  LobotServo servos[3];
  servos[0].ID = 1;
  servos[0].Position = 500;
  servos[1].ID = 2;
  servos[1].Position = 600;
  servos[2].ID = 3;
  servos[2].Position = 700;
  controller.moveServos(servos, 3, 1000);  // 3个舵机同时移动,用时1000ms
  
  delay(5000);
}

API参考

PWMServoController类

方法 描述
init(uint8_t pin) 初始化舵机,连接到指定引脚
setPulseWidth(uint16_t minPulse, uint16_t maxPulse) 设置舵机的脉冲宽度范围
setAngleRange(uint16_t minAngle, uint16_t maxAngle) 设置舵机的角度范围
moveServo(uint16_t angle, uint16_t time) 在指定时间内将舵机移动到目标角度
moveServoSmooth(uint16_t targetAngle, uint16_t speed) 以指定速度平滑移动舵机到目标角度
moveServoImmediate(uint16_t angle) 立即移动舵机到指定角度
detachServo() 断开舵机连接,停止PWM信号
getServoPos() 获取舵机当前角度
setSpeed(uint16_t speed) 设置舵机的默认移动速度
update() 更新舵机位置(使用自动更新时通常不需要调用)
setAutoUpdate(bool enable) 设置是否启用自动更新

LobotServoController类

方法 描述
moveServo(uint8_t servoID, uint16_t Position, uint16_t Time) 控制单个舵机转动
moveServos(LobotServo servos[], uint8_t Num, uint16_t Time) 同时控制多个舵机转动
runActionGroup(uint8_t NumOfAction, uint16_t Times) 运行指定的动作组
stopActionGroup(void) 停止当前运行的动作组
setActionGroupSpeed(uint8_t NumOfAction, uint16_t Speed) 设置指定动作组的运行速度
setAllActionGroupSpeed(uint16_t Speed) 设置所有动作组的运行速度
getBatteryVoltage(void) 获取电池电压
getServosPos(uint8_t numOfServos, ...) 获取指定舵机的位置

注意事项

  1. 电源供应:舵机运行时电流较大,建议使用独立电源供电
  2. 接线检查:使用前检查舵机信号线、电源线连接是否正确
  3. 更新机制:PWM舵机控制器默认启用自动更新,无需在loop()中手动调用update()
  4. 角度限制:为避免损坏舵机,确保设置的角度范围在舵机的机械限位内
  5. ESP32兼容性:本库针对ESP32进行了优化,使用其他平台可能需要修改

许可证

本项目采用MIT许可证开源。

致谢

  • ESP32Servo库
  • 乐幻索尔(Lobot)官方技术支持

版本历史

  • v1.0.0 (2025.04.09) - 首次发布,支持PWM舵机和Lobot舵机控制

About

PWM舵机总线并制

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages