Arduino UNO R4 Joystick
Trong hướng dẫn này, chúng ta sẽ học cách sử dụng joystick với Arduino UNO R4. Chúng ta sẽ tìm hiểu:
- Joystick hoạt động như thế nào
- Cách kết nối joystick với Arduino UNO R4
- Cách lập trình Arduino UNO R4 để đọc giá trị từ joystick
- Cách chuyển đổi các giá trị đọc được từ joystick thành các giá trị có thể sử dụng (ví dụ: tọa độ XY hoặc hướng điều khiển động cơ)

Phần Cứng Cần Thiết
| 1 | × | Arduino UNO R4 WiFi hoặc Arduino UNO R4 Minima | ||
| 1 | × | (Tùy chọn) DIYables STEM V4 IoT, tương thích với Arduino Uno R4 WiFi | ||
| 1 | × | Arduino UNO R4 Minima (Thay thế) | ||
| 1 | × | Cáp USB Type-C | ||
| 1 | × | Joystick | ||
| 1 | × | Dây Jumper | ||
| 1 | × | (Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Breadboard Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Enclosure for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Power Splitter for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO |
Or you can buy the following kits:
| 1 | × | DIYables STEM V4 IoT Starter Kit (Arduino included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Joystick
Bạn có thể đã thấy joystick được sử dụng như một tay điều khiển game, điều khiển đồ chơi, hoặc thậm chí trong các máy móc lớn như điều khiển máy đào.
Joystick có hai biến trở được sắp xếp theo hình vuông và một nút nhấn. Nó cung cấp các đầu ra sau:
- Giá trị analog (từ 0 đến 1023) cho vị trí ngang (tọa độ X)
- Giá trị analog (từ 0 đến 1023) cho vị trí dọc (tọa độ Y)
- Trạng thái digital của nút nhấn (HIGH hoặc LOW)
Khi bạn kết hợp hai giá trị analog, chúng tạo thành tọa độ 2-D. Những tọa độ này được căn giữa khi joystick không được di chuyển. Bạn có thể dễ dàng tìm ra hướng thực tế của các tọa độ này bằng cách chạy một đoạn code kiểm tra, chúng ta sẽ đề cập trong phần tiếp theo.
Một số ứng dụng có thể sử dụng cả ba đầu ra, trong khi những ứng dụng khác chỉ sử dụng một số trong chúng.
Sơ Đồ Chân
Một joystick sử dụng năm chân.
- Chân GND: kết nối với GND (0V)
- Chân VCC: kết nối với VCC (5V)
- Chân VRX: cung cấp giá trị analog cho vị trí ngang (tọa độ X).
- Chân VRY: cung cấp giá trị analog cho vị trí dọc (tọa độ Y).
- Chân SW: đến từ nút nhấn của joystick. Thường được để mở. Sử dụng điện trở pull-up làm cho chân này HIGH khi không được nhấn và LOW khi được nhấn.

Cách Hoạt Động
- Chuyển Động Trái/Phải
- Khi bạn di chuyển joystick sang trái hoặc phải, nó thay đổi tín hiệu điện (điện áp) tại chân VRX.
- Di chuyển sang trái làm giảm điện áp xuống 0 volt.
- Di chuyển sang phải tăng điện áp lên 5 volt.
- Arduino đọc điện áp này và chuyển đổi thành một số từ 0 đến 1023. Vậy, 0V tương ứng với 0, và 5V tương ứng với 1023.
- Chuyển Động Lên/Xuống:
- Tương tự, di chuyển joystick lên hoặc xuống thay đổi điện áp tại chân VRY.
- Di chuyển lên làm giảm điện áp xuống 0 volt.
- Di chuyển xuống tăng điện áp lên 5 volt.
- Arduino cũng đọc điện áp này, chuyển đổi thành một số từ 0 đến 1023, giống như với chân VRX.
- Chuyển Động Kết Hợp:
- Khi bạn di chuyển joystick theo bất kỳ hướng nào (không chỉ thuần túy trái/phải hoặc lên/xuống), nó thay đổi điện áp tại cả chân VRX và VRY dựa trên vị trí của nó dọc theo mỗi trục.
- Nhấn Joystick:
- Khi bạn nhấn joystick xuống (như nhấn một nút), nó kích hoạt một nút bên trong joystick.
- Nếu bạn kết nối điện trở pull-up với chân SW, điện áp tại chân này sẽ thay đổi từ 5V xuống 0V khi được nhấn.
- Arduino đọc sự thay đổi này như một tín hiệu digital, hiển thị HIGH (5V) khi không được nhấn và LOW (0V) khi được nhấn.
Tóm lại, di chuyển joystick thay đổi điện áp tại VRX và VRY, mà Arduino đọc như các số từ 0 đến 1023. Nhấn joystick thay đổi điện áp tại chân SW, mà Arduino đọc như HIGH hoặc LOW.
Sơ Đồ Kết Nối

This image is created using Fritzing. Click to enlarge image
Cách Lập Trình Cho Joystick
Joystick bao gồm hai thành phần: phần analog (trục X và Y) và phần digital (một nút nhấn).
- Để đọc các giá trị cho trục X và Y, chỉ cần sử dụng hàm analogRead() trên chân đầu vào analog.
- Đối với phần digital, đó là một nút nhấn: nó chỉ là một nút. Một phương pháp dễ dàng và hiệu quả là sử dụng thư viện ezButton. Thư viện này giúp quản lý tính ổn định của nút và cũng kích hoạt một hệ thống bên trong để giữ nút ổn định. Bạn có thể học thêm trong Arduino UNO R4 - Nút Nhấn. Chúng tôi sẽ chỉ cho bạn cách sử dụng code trong phần tiếp theo của hướng dẫn này.
Sau khi lấy các giá trị đọc từ chân analog, chúng ta có thể cần thay đổi chúng thành các giá trị có thể quản lý được. Phần sau sẽ cung cấp các code mẫu cho việc này.
Code Arduino UNO R4
Dưới đây là các code mẫu cho Arduino UNO R4:
- Code mẫu: lấy giá trị analog từ joystick
- Code mẫu: lấy giá trị analog và kiểm tra trạng thái nút trên joystick
- Code mẫu: thay đổi giá trị analog thành các lệnh: MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
- Code mẫu: chuyển giá trị analog thành góc để quản lý hai servo motor (như trong camera pan-tilt)
Đọc giá trị analog từ joystick
Các Bước Nhanh
Thực hiện theo các hướng dẫn từng bước:
- Nếu đây là lần đầu tiên bạn sử dụng Arduino Uno R4 WiFi/Minima, hãy tham khảo hướng dẫn về Arduino UNO R4 - Cài Đặt Phần Mềm.
- Kết nối joystick với Arduino UNO R4 theo sơ đồ được cung cấp.
- Kết nối board Arduino Uno R4 với máy tính của bạn bằng cáp USB.
- Khởi động Arduino IDE trên máy tính của bạn.
- Chọn board Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
- Sao chép code trên và mở trong Arduino IDE
- Nhấn nút Upload trong Arduino IDE để tải code lên Arduino UNO R4
- Đẩy tay cầm joystick ra tận rìa, sau đó xoay tròn (theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ)
- Kiểm tra kết quả trên Serial Monitor.
- Khi xoay joystick, hãy theo dõi Serial Monitor. Nếu giá trị X hiển thị 0, hãy ghi nhớ vị trí này là trái; ngược lại là phải. Nếu giá trị Y là 0, ghi nhớ vị trí này là lên; ngược lại là xuống.
Đọc giá trị analog và đọc trạng thái nút từ joystick
Các Bước Nhanh
- Vào biểu tượng Libraries ở phía bên trái của Arduino IDE.
- Tìm kiếm "ezButton" và tìm thư viện button của ArduinoGetStarted.com
- Nhấn nút Install để thêm thư viện ezButton.

- Sao chép code và mở trong Arduino IDE.
- Nhấn nút Upload trong Arduino IDE để tải code lên Arduino UNO R4.
- Di chuyển tay cầm joystick sang trái, phải, lên, hoặc xuống.
- Nhấn xuống phần trên cùng của joystick.
- Kiểm tra kết quả trên Serial Monitor.
Chuyển đổi giá trị analog thành các lệnh DI CHUYỂN TRÁI/PHẢI/LÊN/XUỐNG
Các Bước Nhanh
- Sao chép code trên và mở bằng Arduino IDE.
- Nhấn nút Upload trong Arduino IDE để tải code lên Arduino UNO R4.
- Di chuyển tay cầm joystick sang trái, phải, lên, xuống, hoặc bất kỳ hướng nào khác.
- Kiểm tra kết quả trên Serial Monitor.
※ Lưu ý:
Đôi khi, có thể không có lệnh nào, một lệnh, hoặc hai lệnh cùng lúc (ví dụ: UP và LEFT cùng nhau).
Chuyển đổi giá trị analog thành góc để điều khiển hai servo motor
Bạn có thể tìm thông tin trong hướng dẫn Arduino UNO R4 - Joystick - Servo Motor.
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.