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:

Arduino UNO R4 và joystick

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.
sơ Đồ chân joystick

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

sơ Đồ kết nối Arduino UNO R4 joystick

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.
int xValue = analogRead(A1); int yValue = analogRead(A0);
  • Đố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

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 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/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.println(yValue); delay(200); }

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.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 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

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 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/arduino-uno-r4/arduino-uno-r4-joystick */ #include <ezButton.h> #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define SW_PIN 2 // The Arduino UNO R4 pin connected to SW pin ezButton button(SW_PIN); int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis int bValue = 0; // To store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.print(yValue); Serial.print(" : button = "); Serial.println(bValue); }

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.
thư viện nút nhấn Arduino UNO R4
  • 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.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Chuyển đổi giá trị analog thành các lệnh DI CHUYỂN TRÁI/PHẢI/LÊN/XUỐNG

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 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/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int xValue = 0 ; // To store value of the X axis int yValue = 0 ; // To store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (xValue < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (xValue > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (yValue < UP_THRESHOLD) command = command | COMMAND_UP; else if (yValue > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

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.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ 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.

Bài hướng dẫn liên quan