ESP32 Joystick Servo Motor
Trong hướng dẫn này, chúng ta sẽ học cách sử dụng ESP32 và joystick để điều khiển hai servo motor hoặc một bộ kit xoay nghiêng (pan-tilt) với servo.
Joystick có hai potentiometer tích hợp vuông góc với nhau (gọi là trục X và trục Y). Các potentiometer này xuất ra giá trị analog (gọi là X-value và Y-value) trên các chân VRX và VRY. Chúng ta sẽ sử dụng các giá trị analog này để điều khiển hai servo motor độc lập: X-value điều khiển servo #1 và Y-value điều khiển servo #2. Trong trường hợp của bộ kit xoay nghiêng, chuyển động của hai servo motor tạo ra chuyển động 3 chiều.
Có hai trường hợp ứng dụng:
- Trường hợp 1: Servo motor xoay theo chuyển động của cần điều khiển joystick:
- Góc của servo motor tỷ lệ thuận với giá trị X-value và Y-value của joystick.
- Khi chúng ta thả cần điều khiển ⇒ tất cả giá trị trở về giá trị trung tâm ⇒ servo motor tự động trở về vị trí trung tâm
- Trường hợp 2: sử dụng joystick để ra lệnh cho servo motor (lệnh lên/xuống/trái/phải)
- Khi cần điều khiển joystick được đẩy sang trái, di chuyển servo motor #1 theo chiều kim đồng hồ từng bước
- Khi cần điều khiển joystick được đẩy sang phải, di chuyển servo motor #1 ngược chiều kim đồng hồ từng bước
- Khi cần điều khiển joystick được đẩy lên, di chuyển servo motor #2 theo chiều kim đồng hồ từng bước
- Khi cần điều khiển joystick được đẩy xuống, di chuyển servo motor #2 ngược chiều kim đồng hồ từng bước
- Khi chúng ta thả cần điều khiển joystick ⇒ servo motor sẽ không trở về vị trí trung tâm
- Nếu joystick được nhấn (nút nhấn), servo motor sẽ trở về vị trí trung tâm
- Cách kết nối ESP32 với joystick và servo motor bằng breadboard
- Cách kết nối ESP32 với joystick và servo motor bằng bo mạch chia chân terminal
- 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.
- Kết nối joystick và servo motor với bo mạch ESP32 theo sơ đồ đấu dây phía trên.
- Kết nối bo mạch 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 bo mạch 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.
- Gõ ESP32Servo trong ô 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.
- Sao chép code phía trên và mở bằng Arduino IDE
- Click nút Upload trên Arduino IDE để upload code lên ESP32
- Mở Serial Monitor
- đẩy joystick theo một hướng nào đó
- Quan sát chuyển động của servo motor
- Xem kết quả trên Serial Monitor
- Click vào biểu tượng Libraries trên thanh bên trái của Arduino IDE.
- Tìm kiếm "ezButton", sau đó tìm thư viện button của ArduinoGetStarted.com
- Click nút Install để cài đặt thư viện ezButton.
- Sao chép code phía trên và mở bằng Arduino IDE
- Click nút Upload trên Arduino IDE để upload code lên ESP32
- Mở Serial Monitor
- đẩy joystick theo một hướng nào đó
- Quan sát chuyển động của servo motor
- Xem kết quả trên Serial Monitor
- ADC của ESP32 không hoàn toàn chính xác và có thể cần hiệu chuẩn để có kết quả đúng. Mỗi bo mạch ESP32 có thể khác nhau một chút, vì vậy bạn cần hiệu chuẩn ADC cho từng bo mạch riêng lẻ.
- Việc hiệu chuẩn có thể khó khăn, đặc biệt đối với người mới bắt đầu, và có thể không luôn cho kết quả chính xác như mong muốn.
Chúng ta sẽ khám phá code cho cả hai trường hợp trong các phần tiếp theo.
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 | × | Joystick | ||
| 2 | × | động cơ servo | ||
| 2 | × | (Tùy chọn) Bộ kit xoay nghiêng với servo motor | ||
| 1 | × | breadboard | ||
| 1 | × | Dây Jumper | ||
| 1 | × | (Tùy chọn) Jack Nguồn DC | ||
| 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ề Joystick và Servo Motor
Nếu bạn chưa biết về joystick và servo motor (sơ đồ chân, cách hoạt động, cách lập trình ...), hãy tìm hiểu về chúng trong các hướng dẫn sau:
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
Code ESP32 - Servo motor xoay theo chuyển động của cần điều khiển joystick
Các Bước Thực Hiện


Bạn có thể nhận thấy rằng servo motor không di chuyển tỷ lệ thuận với chuyển động của joystick. Vấn đề này không phải do joystick hay chính servo motor, mà là do ADC của ESP32. Cuối hướng dẫn này sẽ giải thích tại sao điều này xảy ra.
Code ESP32 - Sử dụng joystick để ra lệnh cho servo motor
Các Bước Thực Hiện

Giải Thích Code
Đọc giải thích từng dòng trong các comment của source code!
※ Lưu ý:
Hướng dẫn này sử dụng hàm analogRead() để đọc giá trị từ ADC (Analog-to-Digital Converter) kết nối với joystick. ADC của ESP32 phù hợp cho các dự án KHÔNG cần độ chính xác cao. Tuy nhiên, đối với các dự án cần phép đo chính xác, xin lưu ý:
Đối với các dự án cần độ chính xác cao, hãy cân nhắc sử dụng ADC ngoài (ví dụ ADS1115) với ESP32 hoặc sử dụng Arduino, có ADC đáng tin cậy hơn. Nếu bạn vẫn muốn hiệu chuẩn ADC của ESP32, tham khảo ESP32 ADC Calibration Driver
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.