Tìm kiếm mã

Hướng dẫn ESP32 26/55 - Sử dụng Joystick với Arduino để Thực hiện Hành động | Bộ kit IoT ESP32 của SunFounder

Hướng dẫn ESP32 26/55 - Sử dụng Joystick với Arduino để Thực hiện Hành động | Bộ kit IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ học cách kết nối cần điều khiển XY với vi điều khiển ESP32 từ SunFounder, cho phép chúng ta phát hiện vị trí của nó và thực hiện hành động dựa trên đầu vào của nó. Chúng ta cũng sẽ tích hợp một còi báo động kích hoạt khi cần điều khiển được di chuyển đến một vị trí cụ thể. Sự kết hợp này sẽ cho phép chúng ta tạo ra các dự án tương tác phản hồi đầu vào của người dùng theo thời gian thực.

ESP32-26-xy-joystick-main

Cần điều khiển XY cung cấp hai đầu ra tương tự tương ứng với vị trí X và Y và một công tắc có thể được nhấn để kích hoạt hành động. Bằng cách đọc các giá trị từ cần điều khiển, chúng ta có thể điều khiển các thành phần khác nhau trong dự án của mình, chẳng hạn như kích hoạt còi báo động hoặc hiển thị giá trị trên màn hình. Để hiểu đầy đủ quy trình, hãy xem video để có thêm thông tin chi tiết (trong video tại 00:00).

Phần cứng được giải thích

Các thành phần chính cho dự án này bao gồm vi điều khiển ESP32, cần điều khiển XY và còi báo động. ESP32 là một bo mạch đa năng hỗ trợ Wi-Fi và Bluetooth, lý tưởng cho các dự án IoT. Cần điều khiển XY bao gồm hai điện trở biến đổi cho trục X và Y, và một công tắc nút nhấn để có thêm đầu vào.

joystick_schematic
ESP32-26-xy-joystick-schematic

Cần điều khiển xuất ra các tín hiệu tương tự tương ứng với vị trí của nó, được đọc bởi các chân tương tự của ESP32. Nút nhấn cung cấp tín hiệu kỹ thuật số khi được nhấn. Còi báo động được kết nối với một chân đầu ra kỹ thuật số trên ESP32, cho phép nó được kích hoạt hoặc hủy kích hoạt dựa trên vị trí của cần điều khiển.

Chi tiết bảng dữ liệu

Nhà sản xuất SunFounder
Số bộ phận Mô-đun cần điều khiển XY
Điện áp hoạt động 3,3 V – 5 V
Giá trị điện trở 10 kΩ (mỗi trục)
Dòng điện tối đa 20 mA
Loại công tắc Nút nhấn tạm thời
Kích thước Xấp xỉ 50 mm x 50 mm

 

  • Đảm bảo cần điều khiển được cấp nguồn 3,3 V để tương thích với ESP32.
  • Sử dụng điện trở kéo lên cho công tắc để tránh đầu vào trôi nổi.
  • Kết nối đầu ra tương tự với các chân ADC của ESP32 (34 cho X, 35 cho Y).
  • Sử dụng cơ chế chống nhiễu cho công tắc để tránh kích hoạt sai.
  • Theo dõi mức điện áp để đảm bảo chúng nằm trong giới hạn hoạt động an toàn.

Hướng dẫn nối dây

ESP32-26-xy-joystick-wiring

Để nối cần điều khiển với ESP32, bắt đầu bằng cách kết nối chân nối đất từ cần điều khiển với chân nối đất trên ESP32. Tiếp theo, kết nối chân VCC của cần điều khiển với chân 3,3 V trên ESP32. Cần điều khiển có hai chân đầu ra tương tự: kết nối đầu ra trục X (được đánh dấu là VRX) với chân 34 trên ESP32 và đầu ra trục Y (được đánh dấu là VRY) với chân 35.

Đối với đầu ra công tắc, kết nối chân công tắc với chân 33 trên ESP32. Chân này sẽ đọc lần nhấn nút như một đầu vào kỹ thuật số. Đảm bảo các kết nối được chắc chắn để tránh các sự cố ngắt quãng. Nếu cách nối dây của bạn khác với video (trong video tại 02:30), hãy điều chỉnh cho phù hợp trong khi vẫn tuân theo các nguyên tắc tương tự cho kết nối tương tự và kỹ thuật số.

Ví dụ mã & hướng dẫn chi tiết

Trong mã, chúng ta bắt đầu bằng cách định nghĩa các hằng số cho các chân của cần điều khiển. Các định danh xAxis, yAxisbtn được đặt lần lượt là 34, 3533. Điều này giúp dễ dàng tham chiếu các chân này trong suốt chương trình.

#define xAxis 34
#define yAxis 35
#define btn 33

Trong hàm setup(), chúng ta khởi tạo giao tiếp nối tiếp và đặt chế độ chân nút thành đầu vào. Điều này chuẩn bị cho ESP32 đọc dữ liệu từ cần điều khiển và gửi nó đến màn hình nối tiếp.

void setup() {
  Serial.begin(115200);
  pinMode(btn, INPUT);  
}

Bên trong loop(), chúng ta đọc các giá trị tương tự cho trục X và Y của cần điều khiển bằng analogRead() và lưu chúng vào xValueyValue. Trạng thái nút được đọc bằng digitalRead() và lưu vào btnValue. Cuối cùng, chúng ta in các giá trị này ra màn hình nối tiếp.

void loop() {
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis); 
  int btnValue = digitalRead(btn);
  
  Serial.printf("Giá trị cần điều khiển là %d , %d , %d \n",xValue,yValue,btnValue);
  delay(300);  // Độ trễ giữa các lần đọc
}

Vòng lặp này liên tục cập nhật các giá trị, cung cấp phản hồi theo thời gian thực về chuyển động của cần điều khiển và các lần nhấn nút. Để có mã hoàn chỉnh, vui lòng tham khảo mã đầy đủ được tải bên dưới bài viết.

Trình diễn / Điều gì sẽ xảy ra

Khi thiết lập hoàn tất và mã được tải lên, màn hình nối tiếp sẽ hiển thị các giá trị X và Y cùng với trạng thái nút. Khi bạn di chuyển cần điều khiển, các giá trị sẽ thay đổi tương ứng, phản ánh vị trí của nó. Nhấn nút sẽ chuyển đổi trạng thái của nó giữa cao và thấp.

Các lỗi thường gặp bao gồm đấu dây sai, có thể dẫn đến đầu vào trôi nổi hoặc cần điều khiển không phản hồi. Đảm bảo sử dụng đúng chân và triển khai điện trở kéo lên cho công tắc. Xem video để có các minh họa thực tế về những hành vi này (trong video tại 13:00).

Mốc thời gian trong video

  • 00:00 Bắt đầu
  • 1:47 Giới thiệu về cần điều khiển XY
  • 7:32 Đo giá trị cần điều khiển
  • 8:40 Giải thích cách đấu dây
  • 11:06 Giải thích mã Arduino cho cần điều khiển với ESP32
  • 14:43 Chọn bo mạch ESP32 và cổng COM trong Arduino IDE
  • 16:24 Trình diễn cách sử dụng cần điều khiển đơn giản
  • 19:20 Mã phát hiện vị trí cần điều khiển với còi
  • 21:16 Trình diễn phát hiện vị trí

Hình ảnh

joystick_schematic
joystick_schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-main
ESP32-26-xy-joystick-main
826-ESP32 Tutorial 26/55- Arduino code for XY Joystick
Ngôn ngữ: C++
// Define constants for the x and y axis and the button pins
#define xAxis 34
#define yAxis 35
#define btn 33


void setup() {
  // Initialize serial communication at 115200 bits per second:
  Serial.begin(115200);

  // Set the mode of the button pin to input
  pinMode(btn, INPUT);  
}

void loop() {
  // Read the analog value for x,y axis
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis); 

  // Read the digital value from the button pin
  int btnValue = digitalRead(btn);
  
  // print out the values
  Serial.printf("Joystick value is %d , %d , %d \n",xValue,yValue,btnValue);
  
  delay(300);  // Delay between reads
}

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

Tập tin📁

Không có tệp nào khả dụng.