ESP32 MG996R

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng servo motor MG996R mô-men xoắn cao với ESP32.

Linh Kiện Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×MG996R Servo Motor
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Servo Motor

Servo motor MG996R là một servo motor mô-men xoắn cao có khả năng nâng tải trọng lên đến 15kg. Motor này có thể xoay tay cầm từ 0° đến 180°, cung cấp khả năng điều khiển vị trí góc chính xác. Để biết thêm thông tin cơ bản về servo motor, bạn có thể tham khảo hướng dẫn ESP32 - Servo Motor.

Pinout

Servo motor MG996R được sử dụng trong ví dụ này bao gồm ba chân:

  • Chân VCC: (thường màu đỏ) cần được kết nối với VCC (4.8V – 7.2V)
  • Chân GND: (thường màu đen hoặc nâu) cần được kết nối với GND (0V)
  • Chân Signal: (thường màu vàng hoặc cam) nhận tín hiệu điều khiển PWM từ chân của ESP32.
mg996r động cơ servo sơ đồ chân

Sơ Đồ Kết Nối

Vì MG996R là servo motor mô-men xoắn cao, nó tiêu thụ rất nhiều điện năng. Chúng ta không nên cấp nguồn cho motor này qua chân 5v của ESP32. Thay vào đó, chúng ta cần sử dụng nguồn cung cấp ngoài cho servo motor MG996R.

ESP32 mg996r động cơ servo sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Code ESP32

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-mg996r */ #include <ESP32Servo.h> Servo servo; // create servo object to control a servo void setup() { servo.attach(9); // attaches the servo on pin 9 to the servo objectư servo.write(0); // rotate slowly servo to 0 degrees immediately } void loop() { for (int angle = 0; angle <= 180; angle += 1) { // rotate slowly from 0 degrees to 180 degrees, one by one degree // in steps of 1 degree servo.write(angle); // control servo to go to position in variable 'angle' delay(10); // waits 10ms for the servo to reach the position } for (int angle = 180; angle >= 0; angle -= 1) { // rotate from 180 degrees to 0 degrees, one by one degree servo.write(angle); // control servo to go to position in variable 'angle' delay(10); // waits 10ms for the servo to reach the position } }

Các Bước Nhanh

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện kết nối dây như hình trên.
  • Kết nối board ESP32 với máy tính của bạn qua cáp micro USB
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Click vào biểu tượng Libraries trên thanh bên trái của Arduino IDE.
  • ESP32Servo vào ô tìm kiếm, sau đó tìm thư viện servo của Kevin Harrington, John K. Bennett.
  • Click nút Install để cài đặt thư viện servo motor cho ESP32.
ESP32 động cơ servo thư viện
  • Kết nối ESP32 với máy tính qua cáp USB
  • Mở Arduino IDE, chọn đúng board và cổng
  • Sao chép code trên và mở bằng Arduino IDE
  • Click nút Upload trên Arduino IDE để tải code lên ESP32
Arduino ide - how to upload code
  • Xem kết quả: Servo motor xoay chậm từ 0 đến 180° rồi xoay ngược chậm từ 180 về 0°

Giải Thích Code

Đọc phần giải thích từng dòng trong các dòng comment của code!

Cách Điều Khiển Tốc Độ Servo Motor

Bằng cách sử dụng các hàm map()millis(), chúng ta có thể điều khiển tốc độ servo motor một cách mượt mà mà không làm chặn code khác

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-mg996r */ #include <ESP32Servo.h> Servo myServo; unsigned long MOVING_TIME = 3000; // moving time is 3 seconds unsigned long moveStartTime; int startAngle = 30; // 30° int stopAngle = 90; // 90° void setup() { myServo.attach(9); moveStartTime = millis(); // start moving // TODO: other code } void loop() { unsigned long progress = millis() - moveStartTime; if (progress <= MOVING_TIME) { long angle = map(progress, 0, MOVING_TIME, startAngle, stopAngle); myServo.write(angle); } // TODO: other code }

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Bình Luận