Skip to Content

Điều khiển Servo

Khởi tạo

Servo được điều khiển qua ORC Hub (Motor Driver V2):

#include <OhStemRobotics.h> using namespace ohstem::robotics; MotorDriverV2 mdV2(Wire, 0x54); // Servo 1 trên cổng S1, góc tối đa 180° ServoMotor servo1(mdV2, S1, 180); // Servo 2 trên cổng S2, góc tối đa 180° ServoMotor servo2(mdV2, S2, 180);

Giới hạn góc quay

Để bảo vệ cơ cấu, nên đặt giới hạn góc:

servo1.limit(0, 180); // Servo 1: quay từ 0° đến 180° servo2.limit(0, 80); // Servo 2: quay từ 0° đến 80° (hạn chế)

Xoay đến góc cố định

// Xoay servo 1 đến góc 90° với tốc độ 100 servo1.runAngle(90, 100); // Xoay servo 2 đến góc 45° với tốc độ 80 servo2.runAngle(45, 80);

Đặt góc ngay lập tức

// Đặt servo 1 về 0° ngay (không có tốc độ chuyển tiếp) servo1.setAngle(0); // Đặt servo 2 về 80° servo2.setAngle(80);

Xoay từng bước nhỏ

Tinh chỉnh servo theo từng bước nhỏ, phù hợp khi dùng nút gamepad:

// Tăng 5° servo1.runSteps(5, 100); // Giảm 5° servo1.runSteps(-5, 100);

Ánh xạ nút gamepad → servo

Trong chương trình demo, các nút tay cầm PS4 được gán cho servo:

// Nút L1 → Servo 1 mở (180°) robot.onTeleopCommand(GamepadButton::L1, []() { servo1.runAngle(180, 100); }); // Nút L2 → Servo 1 đóng (0°) robot.onTeleopCommand(GamepadButton::L2, []() { servo1.runAngle(0, 100); }); // Nút R1 → Servo 2 mở (80°) robot.onTeleopCommand(GamepadButton::R1, []() { servo2.runAngle(80, 100); }); // Nút R2 → Servo 2 đóng (0°) robot.onTeleopCommand(GamepadButton::R2, []() { servo2.runAngle(0, 100); });

Ngoài ra, các nút △ ✕ □ ○ được dùng để tinh chỉnh servo theo từng bước 5°.

Last updated on