Arduino điều khiển động cơ bước 28BYJ-48 – Sử dụng ESP32 và ULN2003
Trong bài này, mình sẽ hướng dẫn bạn cách sử dụng Arduino điều khiển động cơ bước 28BYJ-48, với mạch ESP32 và module điều khiển động cơ ULN2003. Ở từng phần code, mình sẽ giải thích chi tiết cho bạn dễ theo dõi nhé!
Chuẩn bị
- Động cơ bước 28BYJ-48
- Module điều khiển động cơ ULN2003
- ESP32
- Dây Jumper
- Nguồn điện áp 5V
Giới thiệu linh kiện cần dùng
Giới thiệu chung về động cơ bước
Động cơ bước (Stepper motor) là một động cơ đồng bộ, có thể chuyển động theo các bước rời rạc nhau. Đây cũng được gọi là động cơ DC, giúp đổi vòng quay thành các bước.
Động cơ bước di chuyển từng bước, mỗi bước sẽ có cùng kích thước với nhau. Do đó, chúng ta có thể dễ dàng xoay động cơ bước đến một góc chính xác nào đó mà mình muốn. Bạn có thể dùng Arduino điều khiển động cơ bước cùng chiều kim đồng hồ hoặc ngược chiều kim đồng hồ đều được.
Dưới đây là hình ảnh minh họa về động cơ bước 28BYJ-48:
Bên trong động cơ bước là các cuộn dây giúp cho động cơ chuyển động theo từng bước khi có dòng điện chạy qua. Có 2 loại động cơ bước khác nhau là động cơ bước đơn cực và động cơ bước lưỡng cực.
Giới thiệu về động cơ bước 28BYJ-48
Hiện nay trên thị trường có rất nhiều loại động cơ bước khác nhau. Trong hướng dẫn này, IoTZone sẽ sử dụng động cơ bước 28BYJ-48 để minh họa cho bạn nhé! 28BYJ-48 được sử dụng phổ biến với module điều khiển động cơ ULN2003.
Thông số kỹ thuật của động cơ bước 28BYJ-48:
- Điện áp: 5V
- Số pha: 4
- Tần số: 100Hz
- Tỷ lệ thay đổi tốc độ: 1/64
- Góc sải chân: 5,625°/64
Bên trong động cơ bước 28BYJ-48 có đến 4 cuộn dây. Trong đó, mỗi cuộn dây sẽ có 2 đầu được kết nối như sau:
- Một đầu nối với nguồn điện áp 5V (dây màu đỏ)
- Một đầu nối với các dây có màu xanh, hồng, vàng và cam. Khi bạn cung cấp điện cho cuộn dây theo thứ tự hợp lý, Arduino điều khiển động cơ bước theo hướng này hoặc hướng khác.
Ở chế độ nửa bước, động cơ bước 28BYJ-48 có góc sải là 5,625°/64. Bạn có thể hiểu đơn giản, động cơ này có góc bước 5,625° => chúng cần 360° / 5,625° = 64 bước để hoàn thành 1 vòng quay (ở chế độ nửa bước). Còn với chế độ đầy đủ bước thì chúng cần 64 / 2 = 32 bước để đi xong 1 vòng.
Tuy nhiên, tỷ lệ của động cơ là 1/64. Điều này có nghĩa là trục bên ngoài của động cơ mà chúng ta nhìn thấy được, sẽ đi xong 1 vòng nếu động cơ bên trong quay 64 lần. Do đó, động cơ bên trong phải di chuyển 32 x 64 = 2048 bước để trục có thể quay hết một vòng. Khi đó, chúng ta sẽ có độ chính xác là 360° / 2048 = 0,18° / bước.
Tổng kết lại, động cơ bước 28BYJ-48 có:
- Tổng số bước để hoàn thành 1 vòng quay là 2048
- Góc bước là 0,18° / bước
Giới thiệu về module điều khiển động cơ ULN2003
Mình sẽ hướng dẫn bạn dùng module này để điều khiển động cơ bước 28BYJ-48, qua phần mềm Arduino IDE.
Trên module đã có sẵn các chân cắm để chúng ta kết nối với động cơ. Cụ thể, chúng bao gồm 4 chân đầu vào (Input 1 đến input 4) để điều khiển động cơ bước chuyển động, cùng với 4 đèn LED để chúng ta quan sát về trạng thái của cuộn dây bên trong động cơ bước:
Trên mạch có các chân để chúng ta nối nguồn GND và VCC, cùng với một công tắc jumper bật / tắt để chúng ta cấp nguồn cho động cơ bước. Nếu bạn tháo dây jumper ra thì sẽ không có nguồn điện nào đi qua động cơ. Bạn có thể hiểu nó như một công tắc cầu dao để bật / tắt nguồn điện.
Tòm lại, trên module điều khiển động cơ ULN2003 có các chân sau:
- Input 1 đến Input 4: Kết nối với chân Digital của vi điều khiển để Arduino điều khiển động cơ bước
- VCC: Cấp điện cho động cơ
- GND
- Chân cắm để kết nối với đầu nối của động cơ
Kết nối phần cứng
Bạn kết nối mạch ESP32, module điều khiển động cơ ULN2003 và động cơ bước như hình dưới nhé! Cụ thể thì các chân Input 1 đến Input 4 được ết nối với chân GPIO 19, 18, 5 và 17 trên ESP32:
Chương trình Arduino điều khiển động cơ bước
Ở phần này, mình sẽ sử dụng thư viện Stepper.h để điều khiển động cơ bước nhé. Bạn hãy copy đoạn code sau vào mạch Arduino của bạn:
#include <Stepper.h> const int stepsPerRevolution = 2048; // change this to fit the number of steps per revolution // ULN2003 Motor Driver Pins #define IN1 19 #define IN2 18 #define IN3 5 #define IN4 17 // initialize the stepper library Stepper myStepper(stepsPerRevolution, IN1, IN3, IN2, IN4); void setup() { // set the speed at 5 rpm myStepper.setSpeed(5); // initialize the serial port Serial.begin(115200); } void loop() { // step one revolution in one direction: Serial.println("clockwise"); myStepper.step(stepsPerRevolution); delay(1000); // step one revolution in the other direction: Serial.println("counterclockwise"); myStepper.step(-stepsPerRevolution); delay(1000); } 1
Đây là một trong các chương trình code mẫu được cung cấp sẵn trong thư viện Stepper, bạn có thể click vào File > Examples > Stepper > stepper_oneRevolution để xem nhé!
Giải thích chương trình
Khai báo thư viện Stepper:
#include <Stepper.h>
Xác định số bước mà động cơ bước cần quay. Trong trường hợp của mình, như đã giải thích thì động cơ cần quay 2048 bước:
const int stepsPerRevolution = 2048; // change this to fit the number of steps per revolution
Khai báo chân Input điều khiển động cơ, của mình là các chân GPIO 19, 18, 5 và 17 như đã kết nối phần cứng:
#define IN1 19 #define IN2 18 #define IN3 5 #define IN4 17
Tạo một biến có tên myStepper, với các thông tin gồm số bước của mỗi vòng quay và chân đầu vào. Với động cơ bước 28BYJ-48 của mình, mình cần khai báo chân IN1 (input 1), IN2, IN3 và IN4. Nếu bạn dùng động cơ bước loại khác thì có thể châu đầu vào này sẽ khác nhé!
Stepper myStepper(stepsPerRevolution, IN1, IN3, IN2, IN4);
Tại setup(), xác định tốc độ với đơn vị là số vòng / phút:
myStepper.setSpeed(5);
Mở Serial Monitor ở tốc độ 115200:
Serial.begin(115200);
Tại mục loop(), mình sẽ dùng Arduino điều khiển động cơ bước quay theo chiều kim đồng hồ và ngược chiều kim đồng hồ luôn, để minh họa cho bạn thấy nhé! Bạn hãy dùng câu lệnh step() với đối tượng myStepper đã tạo để điều khiển với số bước bạn cần thực hiện. Để quay hết 1 vòng, chúng ta cần 2048 bước.
myStepper.step(stepsPerRevolution);
Nếu muốn dùng Arduino điều khiển động cơ bước đi ngược chiều kim đồng hồ, bạn chỉ cần thêm dấu “-“ vào code như bên dưới:
myStepper.step(-stepsPerRevolution);
Demo kết quả
Sau khi nạp code trên Arduino vào IDE, bạn hãy quan sát động cơ bước nhé! Arduino điều khiển động cơ bước quay 1 vòng theo chiều kim đồng hồ, sau đó quay ngược chiều kim đồng hồ và lặp lại liên tục.
Thư viện khác trong Arduino điều khiển động cơ bước
Ngoài thư viện Stepper mình hướng dẫn bên trên, thì bạn có thể lựa chọn thư viện AccelStepper để thử điều khiển động cơ bước nhé!
AccelStepper thì có nhiều chức năng hơn, hỗ trợ điều khiển nhiều động cơ bước và chúng cũng tương thích với ESP32. Hiện nay trên Internet cũng có khá nhiều tài liệu về thư viện này.
Lời kết
Trên đây, IoTZone đã hướng dẫn bạn chi tiết cách dùng Arduino điều khiển động cơ bước, thông qua mạch ESP32 và module điều khiển động cơ ULN2003. Cách dễ nhất là sử dụng thư viện Stepper mà mình đã giới thiệu ở trên, chúc các bạn thành công với dự án này!