Tìm kiếm mã

Bài 13/31: Sử dụng XY Joystick với Arduino và bật buzzer bằng chuyển động của joystick | Robojax

Bài 13/31: Sử dụng XY Joystick với Arduino và bật buzzer bằng chuyển động của joystick | Robojax

Trong bài học này, chúng ta khám phá mô-đun cần điều khiển XY và cách kết nối nó với Arduino để phát hiện chuyển động theo hướng và các lần nhấn nút. Thiết bị đầu vào đa năng này chứa hai chiết áp (một cho trục X và một cho trục Y) và một nút nhấn, cho phép bạn thu được phạm vi chuyển động 360 độ đầy đủ cùng với hành động nhấp. Ngoài việc chỉ đọc các giá trị thô, chúng ta sẽ trình bày cách kích hoạt các hành động—như bật còi—khi cần điều khiển được di chuyển đến một vị trí cụ thể. Nguyên tắc này tạo nền tảng cho vô số dự án tương tác.

sunfounder-13-JoyStick-2

Hướng dẫn này hoàn hảo để xây dựng:

  • Một bộ điều khiển từ xa hai trục cho xe robot hoặc giá đỡ camera nghiêng-xoay.
  • Một bộ điều khiển trò chơi tùy chỉnh cho PC hoặc thiết bị di động.
  • Một hệ thống điều hướng menu cho màn hình LCD hoặc OLED.
  • Một bộ điều khiển tốc độ và hướng động cơ chính xác cho các ứng dụng công nghiệp hoặc sở thích.
  • Một hệ thống báo động tương tác trong đó một vị trí cần điều khiển cụ thể kích hoạt còi báo động hoặc cảnh báo.

Phần cứng và Linh kiện

Để thực hiện theo dự án này, bạn sẽ cần các linh kiện sau. Bộ kit cụ thể được sử dụng trong video là bộ kit Arduino 3-trong-1 SunFounder, nhưng các bộ phận này được bán rộng rãi riêng lẻ.

  • Arduino Uno (hoặc bất kỳ bo mạch tương thích nào)
  • Mô-đun cần điều khiển XY
  • Còi thụ động
  • Dây nhảy
  • Cáp USB để lập trình và cấp nguồn
LB-LR0001_Dual-axis_XY_Joystick_Module

Hiểu về Mô-đun cần điều khiển XY

Cần điều khiển XY là một thiết bị đầu vào độc lập. Như được giải thích trong video (tại 01:20), nó kết hợp hai chiết áp 10k ohm được bố trí vuông góc với nhau. Di chuyển cần dọc theo trục X sẽ xoay một chiết áp, trong khi di chuyển dọc theo trục Y sẽ xoay chiết áp còn lại. Điều này cho phép Arduino đọc điện áp tương tự cho mỗi trục, đại diện cho vị trí chính xác của cần. Mô-đun cũng bao gồm một nút nhấn tạm thời được kích hoạt khi cần được nhấn thẳng xuống.

Joystick-Module-Internal-Structure

Dưới đây là phân tích các chân của nó:

  • GND: Kết nối với đất (0V) của Arduino.
  • VCC: Kết nối với nguồn điện 5V của Arduino.
  • VRX: Đầu ra tương tự cho vị trí trục X.
  • VRY: Đầu ra tương tự cho vị trí trục Y.
  • SW: Đầu ra kỹ thuật số cho nút nhấn (tích cực ở mức thấp).

Video cũng trình bày rằng hai chiết áp bên trong được nối song song giữa VCC và GND, dẫn đến tổng điện trở khoảng 5k ohm, đây là chỉ số bình thường cho mô-đun này (tại 04:30).

Hướng dẫn Đấu dây

sunfounder-13_xy_joystick_wiring_bb

Việc đấu dây cho dự án này rất đơn giản. Video hiển thị sơ đồ đấu dây từ tài liệu SunFounder, nhưng chúng ta sẽ kết nối cần điều khiển trực tiếp với các chân Arduino như được mô tả. Còi được thêm vào cho phần hành động của dự án.

Dưới đây là các kết nối được thiết lập trong video (tại 06:24):

  • Cần điều khiển GNDArduino GND (Dây đen)
  • Cần điều khiển VCCArduino 5V (Dây đỏ)
  • Cần điều khiển VRXArduino A0 (Dây vàng)
  • Cần điều khiển VRYArduino A1 (Dây xanh lá)
  • Cần điều khiển SWArduino Chân 8 (Dây xanh dương)
  • Còi Dương (Chân dài)Arduino Chân 2
  • Còi Âm (Chân ngắn)Arduino GND

Giải thích Mã

Mã được cung cấp được thiết kế để đọc vị trí của cần điều khiển và kích hoạt còi khi một điều kiện cụ thể được đáp ứng. Các phần chính bạn có thể cấu hình nằm ở đầu của sketch.

Đầu tiên, các định nghĩa chân được thiết lập. Bạn có thể thay đổi chúng để phù hợp với cách đấu dây cụ thể của mình:

const int xPin = A0;  //VRX kết nối đến
const int yPin = A1;  //VRY kết nối đến
const int swPin = 8;  //SW kết nối đến
const int alarmPin=2;//đến còi

Tiếp theo, các biến toàn cục được khai báo để lưu trữ trạng thái của cần điều khiển. Chúng được cập nhật mỗi khi hàm readJoystick() được gọi.

int xValue;//để lưu trữ giá trị x
int yValue;//để lưu trữ giá trị y
int swValue;//để lưu trữ giá trị của công tắc

Trong hàm setup(), chân công tắc được cấu hình với điện trở kéo lên nội bộ. Đây là một bước quan trọng vì nó loại bỏ nhu cầu sử dụng điện trở ngoài. Bằng cách đặt nó thành INPUT_PULLUP, chân sẽ đọc HIGH theo mặc định và chuyển sang LOW khi nút được nhấn.

pinMode(swPin, INPUT_PULLUP);  //đặt chân SW thành INPUT

Logic cốt lõi nằm trong loop(). Nó gọi hàm tùy chỉnh readJoystick() để lấy dữ liệu mới. Sau đó, nó kiểm tra một điều kiện: nếu giá trị trục X lớn hơn 600 và giá trị trục Y nhỏ hơn 300, còi sẽ được bật. Bạn có thể sửa đổi các giá trị ngưỡng này để xác định một "vùng kích hoạt" khác cho cần điều khiển. Chân alarmPin được đặt ở mức HIGH để kích hoạt còi và một thông báo được in ra Serial Monitor.

if(xValue >600 && yValue <300)
{
  digitalWrite(alarmPin, HIGH);
  Serial.print("Alarm X:");
  Serial.print(xValue);
  Serial.print(" Y:");
  Serial.println(yValue);
}else{
  digitalWrite(alarmPin, LOW);
  // ... code to print values when alarm is off
}

Cuối cùng, hàm tùy chỉnh readJoystick() được định nghĩa. Hàm này đọc các giá trị analog từ chân X và Y cũng như trạng thái số của công tắc, lưu chúng vào các biến toàn cục. Cách tiếp cận mô-đun này giúp vòng lặp chính luôn gọn gàng và có tổ chức.

void readJoystick()
{
  xValue =analogRead(xPin);//read xPin value
  yValue =analogRead(yPin);//read yPin
  swValue =digitalRead(swPin);//read switch 
}

Dự án Trực tiếp và Trình diễn

Sau khi mã được tải lên, có thể mở Serial Monitor để quan sát các giá trị thô. Ban đầu, với cần điều khiển ở vị trí trung tâm, giá trị X và Y sẽ vào khoảng 512, là điểm giữa của dải 0-1023. Nhấn cần điều khiển xuống sẽ làm giá trị công tắc thay đổi từ 1 sang 0 (trong video tại 10:15).

Di chuyển cần điều khiển đến các vị trí cực hạn sẽ hiển thị toàn bộ dải giá trị: di chuyển hoàn toàn sang phải sẽ cho giá trị X là 1023, và hoàn toàn sang trái sẽ cho giá trị 0. Tương tự, di chuyển lên và xuống sẽ làm giá trị Y thay đổi trong khoảng 0 đến 1023 (trong video tại 10:37).

Phần trình diễn sau đó cho thấy phần hành động của dự án. Khi cần điều khiển được di chuyển đến góc trên bên phải (nơi X > 600 và Y < 300), còi sẽ kêu và Serial Monitor sẽ in thông báo "Alarm". Di chuyển nó ra khỏi vùng đó sẽ tắt còi. Điều này chứng minh rằng bạn có thể dùng vị trí của cần điều khiển để điều khiển một thiết bị đầu ra, có thể mở rộng để điều khiển rơ-le, đèn LED hoặc động cơ cho nhiều ứng dụng khác nhau.

Các Chương

  • [00:00] Giới thiệu về Dự án Cần điều khiển XY
  • [01:20] Hiểu về Phần cứng và Các Linh kiện Bên trong
  • [03:33] Sơ đồ Mạch của Mô-đun và Đo Điện trở
  • [05:51] Kết nối Cần điều khiển với Arduino
  • [07:00] Thiết lập Mã và Bật Điện trở Kéo lên
  • [09:23] Tải Mã lên và Kiểm tra Giá trị Thô
  • [12:21] Thực hiện Hành động: Điều khiển Còi bằng Vị trí Cần điều khiển
  • [16:02] Trình diễn Trực tiếp Hệ thống Báo động

Hình ảnh

Sunfounder car assembled
Sunfounder car assembled
LB-LR0001_Dual-axis_XY_Joystick_Module
LB-LR0001_Dual-axis_XY_Joystick_Module
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-2
sunfounder-13-JoyStick-2
Joystick-Module-Internal-Structure
Joystick-Module-Internal-Structure
sunfounder-13_xy_joystick_wiring_bb
sunfounder-13_xy_joystick_wiring_bb
922-Lesson 13/31: How to read position and values of X-Y Joystick
Ngôn ngữ: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Tài nguyên & tài liệu tham khảo

Tập tin📁

Thư viện Arduino (tệp nén)

Hướng dẫn Sử dụng