Raspberry Pi Joystick
Hướng dẫn này sẽ chỉ bạn cách sử dụng joystick với Raspberry Pi. Chúng ta sẽ tìm hiểu:
- Nguyên lý cơ bản về cách joystick hoạt động
- Kết nối joystick với Raspberry Pi và lập trình cho nó
- Chuyển đổi các giá trị từ joystick thành các giá trị có thể điều khiển như tọa độ XY, hướng lên/xuống/trái/phải của động cơ...

Phần Cứng Cần Thiết
| 1 | × | Raspberry Pi 5 | ||
| 1 | × | mô-đun ADC ADS1115 | ||
| 1 | × | Joystick | ||
| 1 | × | dây jumper (dây nối jumper) | ||
| 1 | × | (Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi | ||
| 1 | × | (Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit | ||
| 1 | × | (Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi |
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Joystick 2 trục
Bạn có thể đã gặp Joystick ở nhiều nơi khác nhau, chẳng hạn như trong tay cầm game, điều khiển đồ chơi, hoặc thậm chí trong các máy móc lớn như máy xúc.
Joystick được tạo thành từ hai biến trở (potentiometer) được bố trí theo hình vuông, và một nút nhấn. Nó cung cấp các đầu ra sau:
- Một giá trị analog từ 0 đến 1023 tương ứng với vị trí ngang (được gọi là tọa độ X)
- Một giá trị analog từ 0 đến 1023 tương ứng với vị trí dọc (được gọi là tọa độ Y)
- Một giá trị digital của nút nhấn (HIGH hoặc LOW)
Sự kết hợp của hai giá trị analog có thể tạo ra tọa độ 2-D với tâm là các giá trị khi joystick ở vị trí nghỉ. Để xác định hướng thực tế của tọa độ, bạn có thể chạy một đoạn code thử nghiệm (sẽ được trình bày 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 đó.
Sơ Đồ Chân Joystick
Một Joystick có 5 chân:
- Chân GND: Phải được kết nối với GND (0V).
- Chân VCC: Phải được kết nối với VCC (5V).
- Chân VRX: Đầu ra analog tương ứng với vị trí ngang (tọa độ X).
- Chân VRY: Đầu ra analog tương ứng với vị trí dọc (tọa độ Y).
- Chân SW: Đây là đầu ra từ nút nhấn bên trong joystick. Nó thường ở trạng thái mở. Nếu sử dụng điện trở pull-up ở chân này, chân SW sẽ là HIGH khi không được nhấn, và LOW khi được nhấn.

Cách Hoạt Động
- Khi bạn di chuyển cần joystick sang trái hoặc phải, điện áp ở chân VRX sẽ thay đổi. Phạm vi điện áp này là từ 0V đến 5V, với 0V ở bên trái và 5V ở bên phải, dẫn đến giá trị đọc được trên chân analog của Raspberry Pi từ 0 đến 1023.
- Tương tự, khi bạn di chuyển cần joystick lên hoặc xuống, điện áp ở chân VRY sẽ thay đổi. Phạm vi điện áp này là từ 0V đến 5V, với 0V ở trên và 5V ở dưới, dẫn đến giá trị đọc được trên chân analog của Raspberry Pi từ 0 đến 1023.
- Khi bạn di chuyển cần joystick theo bất kỳ hướng nào, điện áp ở cả hai chân VRX và VRY sẽ thay đổi tỷ lệ với hình chiếu của vị trí trên mỗi trục.
- Khi bạn nhấn cần joystick từ trên xuống dưới, nút nhấn bên trong joystick sẽ đóng. Nếu chúng ta sử dụng điện trở pull-up ở chân SW, đầu ra từ chân SW sẽ thay đổi từ 5V xuống 0V, dẫn đến giá trị đọc được trên chân digital của Raspberry Pi thay đổi từ HIGH sang LOW.
Sơ Đồ Kết Nối

This image is created using Fritzing. Click to enlarge image
Code Raspberry Pi
Phần này sẽ trình bày các code ví dụ sau cho Raspberry Pi:
- Code ví dụ: Đọc giá trị analog từ joystick
- Code ví dụ: Đọc giá trị analog và trạng thái nút nhấn từ joystick
- Code ví dụ: Chuyển đổi giá trị analog thành các lệnh MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
- Code ví dụ: Chuyển đổi giá trị analog thành góc để điều khiển hai servo motor (ví dụ: trong camera pan-tilt)
Đọc giá trị analog từ joystick
Các Bước Nhanh
- Đảm bảo bạn đã cài đặt Raspbian hoặc bất kỳ hệ điều hành tương thích Raspberry Pi nào khác trên Pi của bạn.
- Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng nội bộ với PC của bạn.
- Đảm bảo Raspberry Pi của bạn được kết nối internet nếu cần cài đặt một số thư viện.
- Nếu đây là lần đầu bạn sử dụng Raspberry Pi, hãy xem Raspberry Pi - Cài Đặt Phần Mềm
- Kết nối PC của bạn với Raspberry Pi qua SSH sử dụng SSH client tích hợp sẵn trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
- Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, hãy cài đặt nó bằng lệnh sau:
- Cài đặt thư viện Adafruit_ADS1x15 bằng cách chạy các lệnh sau trên terminal Raspberry Pi:
- Tạo file script Python joystick.py và thêm code sau:
- Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
- Đẩy cần joystick đến vị trí tối đa rồi xoay nó theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ.
- Kiểm tra kết quả trên Terminal.
Trong khi xoay cần joystick, hãy quan sát Terminal.
Nếu giá trị X là 0, hãy ghi nhớ vị trí hiện tại là trái, với hướng ngược lại là phải.
Nếu giá trị Y là 0, hãy ghi nhớ vị trí hiện tại là lên, với hướng ngược lại là xuống.
Script sẽ chạy trong vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.
Đọc giá trị analog và đọc trạng thái nút nhấn từ joystick
Các Bước Nhanh
- Tạo file script Python joystick_sw.py và thêm code sau:
- Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
- Di chuyển cần joystick sang trái, phải, lên hoặc xuống.
- Nhấn cần joystick từ trên xuống.
- Kiểm tra kết quả trên Terminal.
Chuyển đổi giá trị analog thành các lệnh MOVE LEFT/RIGHT/UP/DOWN
Các Bước Nhanh
- Tạo file script Python joystick_cmd.py và thêm code sau:
- Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
- Di chuyển joystick theo bất kỳ hướng nào.
- Kiểm tra kết quả trong Terminal.
※ Lưu ý:
Tại một thời điểm nhất định, có thể không có lệnh nào, một lệnh, hoặc hai lệnh đồng thời (ví dụ: UP và LEFT).
Chuyển đổi giá trị analog thành góc để điều khiển hai servo motor
Chi tiết có thể được tìm thấy trong hướng dẫn có tiêu đề Raspberry Pi - Joystick điều khiển 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.