Search Code

Hướng dẫn ESP32 17/55 - Điều khiển động cơ Servo bằng ESP32 và chiết áp - Bộ học IoT ESP32

Hướng dẫn ESP32 17/55 - Điều khiển động cơ Servo bằng ESP32 và chiết áp - Bộ học IoT ESP32

Trong hướng dẫn này, chúng ta sẽ học cách điều khiển động cơ servo bằng vi điều khiển ESP32 và chiết áp từ bộ kit học tập IoT ESP32 của SunFounder. Kết thúc dự án này, bạn sẽ có thể điều chỉnh góc của động cơ servo một cách mượt mà bằng chiết áp, cho phép điều khiển chính xác. Đây là cách tuyệt vời để khám phá khả năng của ESP32 và cách nó giao tiếp với động cơ.

Khi đi sâu vào chi tiết, chúng ta sẽ đề cập đến các linh kiện phần cứng cần thiết, hướng dẫn đấu dây và các ví dụ mã để mọi thứ hoạt động. Để có hình ảnh trực quan hơn, hãy xem video liên quan đến hướng dẫn này (trong video ở phút 0:30).

Giải thích phần cứng

Các thành phần chính cho dự án này bao gồm vi điều khiển ESP32, động cơ servo (SG90) và chiết áp. ESP32 là một vi điều khiển mạnh mẽ có Wi-Fi và Bluetooth tích hợp, phù hợp cho các dự án IoT. Nó có khả năng điều khiển nhiều thiết bị khác nhau, bao gồm cả động cơ, với độ chính xác cao.

Động cơ servo SG90 là một linh kiện được sử dụng rộng rãi có thể xoay khoảng 270 độ. Nó hoạt động dựa trên tín hiệu điều chế độ rộng xung (PWM), trong đó góc quay được xác định bởi độ rộng của xung gửi đến. Chiết áp hoạt động như một điện trở biến đổi, cho phép bạn điều chỉnh điện áp gửi đến ESP32, từ đó điều khiển vị trí của servo.

Chi tiết datasheet

Nhà sản xuất SG
Số hiệu linh kiện SG90
Điện áp logic/IO 3,3 V (ESP32)
Điện áp cấp nguồn 5 V
Dòng điện đầu ra (mỗi kênh) 1,2 A
Dòng điện đỉnh (mỗi kênh) 2,5 A
Hướng dẫn tần số PWM 50 Hz
Ngưỡng logic đầu vào 0,2 V (thấp), 2,5 V (cao)
Sụt áp / RDS(on) / bão hòa 0,5 V
Giới hạn nhiệt 85 °C tối đa
Kiểu đóng gói Nhựa
Ghi chú / biến thể Có sẵn với các loại bánh răng khác nhau

 

  • Đảm bảo servo được cấp nguồn với điện áp phù hợp (5V).
  • Kết nối chân mass của servo với mass của ESP32 để có chung tham chiếu.
  • Sử dụng tín hiệu PWM phù hợp để điều khiển vị trí của servo.
  • Lưu ý đến yêu cầu dòng điện của servo; sử dụng nguồn ngoài nếu cần thiết.
  • Kiểm tra gán chân chính xác khi đấu dây để tránh cấu hình sai.

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

ESP32-17-Sevo_motor-wiring

Để đấu dây động cơ servo và chiết áp với ESP32, bắt đầu bằng cách kết nối dây mass của servo (thường màu đen hoặc nâu) với một trong các chân mass trên ESP32. Tiếp theo, kết nối dây nguồn (thường màu đỏ) của servo với chân 5V trên ESP32. Cuối cùng, kết nối dây tín hiệu (thường màu cam hoặc trắng) từ servo với chân 25 trên ESP32.

Đối với chiết áp, kết nối một chân ngoài với chân 3.3V trên ESP32 và chân ngoài còn lại với mass. Chân giữa của chiết áp nên được kết nối với chân 34 trên ESP32. Cách thiết lập này cho phép ESP32 đọc điện áp thay đổi từ chiết áp, được sử dụng để điều khiển vị trí của servo.

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

Đoạn mã sau khởi tạo servo và đặt các tham số để điều khiển chuyển động của nó:

#include 

Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0,5 ms
const int maxPulseWidth = 2500; // 2,5 ms

void setup() {
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
  myServo.setPeriodHertz(50); // Servo tiêu chuẩn 50Hz
}

Trong mã này, chúng ta bao gồm thư viện ESP32Servo và tạo một đối tượng servo với tên myServo. Chúng ta định nghĩa số chân cho servo và đặt độ rộng xung tối thiểu và tối đa tương ứng với giới hạn góc của servo.

ESP32_servo_lib

Tiếp theo, hãy xem vòng lặp liên tục di chuyển servo qua lại:

void loop() {
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

Vòng lặp này dần dần thay đổi góc từ 0 đến 180 độ và quay lại, sử dụng hàm map để chuyển đổi góc thành độ rộng xung tương ứng cho servo. Mỗi thay đổi được theo sau bởi một độ trễ ngắn để cho phép servo đạt đến vị trí mới một cách mượt mà.

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

Khi mọi thứ đã được đấu dây và mã được tải lên, bạn sẽ thấy động cơ servo di chuyển mượt mà từ 0 đến 180 độ và quay lại. Nếu bạn điều chỉnh chiết áp, servo sẽ phản ánh vị trí mới dựa trên điện áp cung cấp từ chiết áp. Hãy cẩn thận với việc đảo cực khi đấu dây, vì nó có thể làm hỏng linh kiện của bạn (trong video ở phút 3:45).

Mốc thời gian video

  • 00:00 Bắt đầu
  • 1:56 Động cơ servo là gì
  • 5:00 Trang tài liệu
  • 6:33 Giải thích cách đấu dây cho servo
  • 7:45 Chọn cổng COMP cho ESP32 trong Arduino IDE
  • 9:27 Giải thích mã Arduino
  • 14:31 Trình diễn điều khiển servo bằng ESP32
  • 16:04 Cấp nguồn cho servo khác với 5V
  • 18:47 Điều khiển Servo không dùng vòng lặp
  • 20:15 Điều khiển Servo bằng chiết áp
  • 21:37 Giải thích mã Arduino servo với chiết áp

Hình ảnh

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
Ngôn ngữ: C++
#include <ESP32Servo.h>

// Define the servo and the pin it is connected to
Servo myServo;
const int servoPin = 25;

// Define the minimum and maximum pulse widths for the servo
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms

void setup() {
  // Attach the servo to the specified pin and set its pulse width range
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);

  // Set the PWM frequency for the servo
  myServo.setPeriodHertz(50); // Standard 50Hz servo
}

void loop() {
  // Rotate the servo from 0 to 180 degrees
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }

  // Rotate the servo from 180 to 0 degrees
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

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

Tập tin📁

Bảng dữ liệu (pdf)

Các tập tin khác