ss这几天翻箱底,找到了这么个舵机
国内见的不多,官网:https://dynamixel.com/
不过入门还挺简单,先准备arduino和dynamixel sheild
然后下载打开arduino编辑器,安装DynamixelShield依赖包
查询一下自己舵机的id和波特率,如果不知道的话,就安装这个scan一下:
帮大家下好了链接:https://pan.baidu.com/s/1EStB-g97ZWgBKGNRX0fyJQ
提取码:B206
--来自百度网盘超级会员V6的分享
就可以试试咯~
切记修改舵机的id和波特率
角度设置:
/*******************************************************************************
* 版权所有 2016 ROBOTIS CO., LTD.
*
* 根据 Apache 许可证,版本 2.0 进行许可;
* 除非符合许可证的规定,否则您不得使用此文件。
* 您可以在以下网址获得许可证副本:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 除非适用法律要求或书面同意,否则软件
* 按“原样”提供,不提供任何形式的保证或条件,
* 包括但不限于适销性保证、适用于特定用途的保证或
* 不侵权。详见许可证。
*******************************************************************************/
#include <DynamixelShield.h>
#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_MEGA2560)
#include <SoftwareSerial.h>
SoftwareSerial soft_serial(7, 8); // DYNAMIXELShield UART RX/TX
#define DEBUG_SERIAL soft_serial
#elif defined(ARDUINO_SAM_DUE) || defined(ARDUINO_SAM_ZERO)
#define DEBUG_SERIAL SerialUSB
#else
#define DEBUG_SERIAL Serial
#endif
const uint8_t DXL_ID = 1; // 设置舵机的ID
const float DXL_PROTOCOL_VERSION = 2.0; // 设置舵机通信协议版本
DynamixelShield dxl; // 创建DynamixelShield对象
//This namespace is required to use Control table item names
using namespace ControlTableItem;
void setup() {
// 初始化串口通信,设置波特率为115200
DEBUG_SERIAL.begin(115200);
// 设置串口波特率为57600bps。必须与DYNAMIXEL舵机的波特率相匹配。
dxl.begin(57600);
// 设置端口协议版本。必须与DYNAMIXEL协议版本相匹配。
dxl.setPortProtocolVersion(DXL_PROTOCOL_VERSION);
// 获取DYNAMIXEL信息(通过ping命令检查舵机是否连接)
dxl.ping(DXL_ID);
// 在配置EEPROM区域的项目时关闭扭力
dxl.torqueOff(DXL_ID);
// 将舵机工作模式设置为位置模式
dxl.setOperatingMode(DXL_ID, OP_POSITION);
// 打开舵机扭力
dxl.torqueOn(DXL_ID);
}
void loop() {
// 设置舵机到原始值512的位置
dxl.setGoalPosition(DXL_ID, 512);
// 延迟1秒
delay(1000);
// 打印舵机当前位置(原始值)
DEBUG_SERIAL.print("Present Position(raw) : ");
DEBUG_SERIAL.println(dxl.getPresentPosition(DXL_ID));
// 延迟1秒
delay(1000);
// 设置舵机到5.7度的位置
dxl.setGoalPosition(DXL_ID, 5.7, UNIT_DEGREE);
// 延迟1秒
delay(1000);
// 打印舵机当前位置(角度值)
DEBUG_SERIAL.print("Present Position(degree) : ");
DEBUG_SERIAL.println(dxl.getPresentPosition(DXL_ID, UNIT_DEGREE));
// 延迟1秒
delay(1000);
}
速度设置:
/*******************************************************************************
* 版权所有 2016 ROBOTIS CO., LTD.
*
* 根据 Apache 许可证,版本 2.0 进行许可;
* 除非符合许可证的规定,否则您不得使用此文件。
* 您可以在以下网址获得许可证副本:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 除非适用法律要求或书面同意,否则软件
* 按“原样”提供,不提供任何形式的保证或条件,
* 包括但不限于适销性保证、适用于特定用途的保证或
* 不侵权。详见许可证。
*******************************************************************************/
#include <DynamixelShield.h> // 包含DynamixelShield库
#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_MEGA2560)
#include <SoftwareSerial.h> // 如果是 Uno、Nano、Mini 或 Mega,则包含 SoftwareSerial 库
SoftwareSerial soft_serial(7, 8); // 创建软串口对象,将其连接到 DYNAMIXELShield 的 UART RX/TX 引脚
#define DEBUG_SERIAL soft_serial // 将软串口设置为 DEBUG_SERIAL
#elif defined(ARDUINO_SAM_DUE) || defined(ARDUINO_SAM_ZERO)
#define DEBUG_SERIAL SerialUSB // 如果是 Due 或 Zero,则将 USB 串口设置为 DEBUG_SERIAL
#else
#define DEBUG_SERIAL Serial // 否则将硬串口设置为 DEBUG_SERIAL
#endif
const uint8_t DXL_ID = 6; // 定义舵机的ID
const float DXL_PROTOCOL_VERSION = 1.0; // 定义舵机通信协议版本
DynamixelShield dxl; // 创建 DynamixelShield 对象
// 使用 ControlTableItem 命名空间来使用控制表项名称
using namespace ControlTableItem;
void setup() {
// 初始化串口通信,设置波特率为115200
DEBUG_SERIAL.begin(115200);
// 设置串口波特率为1000000bps。必须与 DYNAMIXEL 舵机的波特率相匹配。
dxl.begin(1000000);
// 设置端口协议版本。必须与 DYNAMIXEL 协议版本相匹配。
dxl.setPortProtocolVersion(DXL_PROTOCOL_VERSION);
// 获取 DYNAMIXEL 信息(通过 ping 命令检查舵机是否连接)
dxl.ping(DXL_ID);
// 在配置 EEPROM 区域的项目时关闭扭力
dxl.torqueOff(DXL_ID);
// 将舵机工作模式设置为速度模式
dxl.setOperatingMode(DXL_ID, OP_VELOCITY);
// 打开舵机扭力
dxl.torqueOn(DXL_ID);
}
void loop() {
// 设置舵机目标速度为200(原始单位)
dxl.setGoalVelocity(DXL_ID, 200);
// 延迟1秒
delay(1000);
// 打印舵机当前速度(原始单位)
DEBUG_SERIAL.print("Present Velocity(raw) : ");
DEBUG_SERIAL.println(dxl.getPresentVelocity(DXL_ID));
// 延迟1秒
delay(1000);
// 设置舵机目标速度为25.8 RPM
dxl.setGoalVelocity(DXL_ID, 25.8, UNIT_RPM);
// 延迟1秒
delay(1000);
// 打印舵机当前速度(RPM单位)
DEBUG_SERIAL.print("Present Velocity(rpm) : ");
DEBUG_SERIAL.println(dxl.getPresentVelocity(DXL_ID, UNIT_RPM));
// 延迟1秒
delay(1000);
// 设置舵机目标速度为百分比 -10.2%
dxl.setGoalVelocity(DXL_ID, -10.2, UNIT_PERCENT);
// 延迟1秒
delay(1000);
// 打印舵机当前速度(百分比单位)
DEBUG_SERIAL.print("Present Velocity(ratio) : ");
DEBUG_SERIAL.println(dxl.getPresentVelocity(DXL_ID, UNIT_PERCENT));
// 延迟1秒
delay(1000);
}