Hướng dẫn này là một phần của: Bài học 107 28BYJ-48 Dự án Stepper 8
Video này có 8 dự án. Mỗi dự án có mã nguồn riêng biệt. Các liên kết đến các video khác nằm bên dưới bài viết này.
Bài 107-5: Gửi động cơ 28BYJ-48 quay một vòng theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ, STPB-3
Dự án 5: Một Vòng Quay Được Kích Hoạt Bằng Nút Nhấn STPB-3 – Động Cơ Bước 28BYJ-48
Bài viết này thuộc chuỗi 8 dự án giáo dục về động cơ bước 28BYJ-48 sử dụng Arduino. Trong Dự án 5, chúng ta sử dụng một nút nhấn mới, có nhãn STPB-3, để kích hoạt một vòng quay đầy đủ duy nhất của động cơ mỗi lần nhấn. Phương pháp này thường được sử dụng trong các hệ thống chuyển động theo chỉ số, nơi cần điều khiển chính xác một chu kỳ.
Mã nguồn hoàn chỉnh và sơ đồ đấu dây cho dự án này được cung cấp bên dưới bài viết này.
📘 Giới thiệu
Dự án này mở rộng các điều khiển dựa trên nút nhấn trước đó bằng cách giới thiệu hành vi chốt: nhấn nút một lần sẽ bắt đầu và hoàn thành chính xác một vòng quay đầy đủ của động cơ. Hệ thống bỏ qua trạng thái nút trong quá trình động cơ hoạt động để đảm bảo chuyển động chính xác và lặp lại được.
⚙️ Sơ đồ đấu dây
Ngoài các kết nối động cơ bước và driver ULN2003, dự án này kết nối nút STPB-3 như sau:
-
Một đầu của nút nhấn STPB-3 → Chân Arduino 2
-
Đầu còn lại → GND
-
Sử dụng cấu hình kéo lên nội bộ
Chú thích: Sơ đồ đấu dây Dự án 5: nhấn STPB-3 một lần để kích hoạt một vòng quay đầy đủ của động cơ.
💻 Giải thích mã
Mã này sử dụng phát hiện cạnh để xác định một sự kiện nhấn duy nhất và thực hiện một vòng quay đầy đủ của động cơ bước.
-
Khởi tạo Hằng số và Đối tượng:
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
const int buttonPin = 2;
int lastButtonState = HIGH;
-
Hàm Thiết lập:
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
myStepper.setSpeed(10);
Serial.begin(9600);
}
-
Hàm Vòng lặp với Phát hiện Cạnh:
void loop() {
int currentState = digitalRead(buttonPin);
if (lastButtonState == HIGH && currentState == LOW) {
myStepper.step(stepsPerRevolution);
}
lastButtonState = currentState;
}
-
Điều này đảm bảo động cơ quay một lần chỉ khi bắt đầu nhấn nút (cạnh xuống).
-
Nó tránh kích hoạt lặp lại khi nút được giữ.
🎬 Mốc thời gian từ Video đầy đủ
Để tham khảo trực quan, hãy xem các điểm này trong hướng dẫn đầy đủ:
-
51:20 – Dự án 5: Giới thiệu
-
52:15 – Dự án 5: Đấu dây
-
55:40 – Dự án 5: Mã
-
1:03:30 – Dự án 5: Trình diễn
📁 Phần Tải xuống
Bạn có thể tải xuống mã hoàn chỉnh và sơ đồ đấu dây cho dự án này bên dưới. Cách tiếp cận này lý tưởng khi một hệ thống cơ khí yêu cầu định vị chính xác với mỗi lần nhấn nút.
Tiếp theo là [Dự án 6: Góc và Tốc độ Thay đổi với STPB-4].
Hướng dẫn này là một phần của: Bài học 107 28BYJ-48 Dự án Stepper 8
- Bài 107-1: Khởi động và Dừng Động cơ Bước 28BYJ-48 với Hướng được Thiết lập trong Mã
- Bài 107-2: Điều khiển động cơ bước 28BYJ-48 qua Serial Monitor
- Bài 107-3: Điều khiển động cơ bước 28BYJ-48 bằng ba nút nhấn: CW, CCW và Dừng (STPB-1)
- Bài 107-4: Điều khiển động cơ bước 28BYJ-48 bằng hai nút nhấn, CW, CCW (giữ nút), STPB-2
- Bài 107-6: Điều khiển động cơ bước 28BYJ-48 bằng ba nút nhấn, với góc quay và tốc độ STPB-4
- Bài 107-7: Gửi động cơ bước 28BYJ-48 đến bất kỳ góc nào với các nút nhấn STPB-5 được xác định
- Bài 107-8: Điều khiển tốc độ của động cơ bước 28BYJ-48 bằng chiết áp
/*
* Lesson 107-5: Controlling stepper motor using 2 push buttons STPB-2.
STPB-2: We control the stepper motor using two push buttons. One push button rotates the motor clockwise (CW), and the other rotates it counter-clockwise (CCW). Keys must be kept pressed.
In this lesson, we learn how to use a mini stepper motor 28BYJ-48 for our project. I am presenting 8 projects so you can use it in almost any application. In the video, I have explained the code, shown the full wiring diagram, and how to connect the wires, push buttons, and breadboard.
Project 2: We will push different keys on the keyboard and control the motor
Project 1: Running motor
Project 2: Controlling stepper motor from Serial Monitor
Project 3: Controlling stepper motor using push button STPB-1
Project 4: Controlling using push button STPB-2, keep pressing
Project 5: One Revolution using push button STPB-3 (this code)
Project 6: Push button: Any Angle and speed STPB-4
Project 7: Using multiple buttons for any angle: STPB-5 (angle, speed, and direction)
Project 8: Controlling stepper motor using potentiometer
* Watch Video instruction for this code: https://youtu.be/TQ7R2bY-MWU
*
* This code is part of the Arduino Step by Step Course, which starts here: https://youtu.be/-6qSrDUA5a8
*
* For the library for this code, visit http://robojax.com/
*
If you found this tutorial helpful, please support me so I can continue creating
content like this. Make a donation using PayPal or a credit card: https://bit.ly/donate-robojax
* Written by Ahmad Shamshiri for Robojax Robojax.com
* on Feb 20, 2019, at 19:34 in Ajax, Ontario, Canada
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int Pin1 = 10;//IN1 is connected to 10
int Pin2 = 11;//IN2 is connected to 11
int Pin3 = 12;//IN3 is connected to 12
int Pin4 = 13;//IN4 is connected to 13
int switchCW =2;//define input pin for CW push button
int switchCCW =3;//define input pin for CCW push button
int speedFactor =1;//1=fastest, 2=slower or 3 more slower
int correction_CW = 150;
int correction_CCW = 150;
const int CW =1;
const int CCW =2;
const int STOP =3;
int poleStep = 0;
const int SPR=64*64;
int pole1[] ={0,0,0,0, 0,1,1,1, 0};//pole1, 8 step values
int pole2[] ={0,0,0,1, 1,1,0,0, 0};//pole2, 8 step values
int pole3[] ={0,1,1,1, 0,0,0,0, 0};//pole3, 8 step values
int pole4[] ={1,1,0,0, 0,0,0,1, 0};//pole4, 8 step values
int count=0;
int dirStatus = STOP;// stores direction status 3= stop (do not change)
void setup()
{
//Robojax.com Stepper Push button One Revolution STPB-3
Serial.begin(9600);
Serial.print("Robojax Video for Stepper Motor STPB-2");
pinMode(Pin1, OUTPUT);//define pin for ULN2003 in1
pinMode(Pin2, OUTPUT);//define pin for ULN2003 in2
pinMode(Pin3, OUTPUT);//define pin for ULN2003 in3
pinMode(Pin4, OUTPUT);//define pin for ULN2003 in4
pinMode(switchCW,INPUT_PULLUP);
pinMode(switchCCW,INPUT_PULLUP);
}
void loop()
{
//Robojax.com Stepper Push button One Revolution STPB-3
if(digitalRead(switchCCW) == LOW)
{
dirStatus =CCW;
count =0;
}else if(digitalRead(switchCW) == LOW)
{
dirStatus = CW;
count =0;
}
if(digitalRead(switchCW) == LOW && digitalRead(switchCCW) == LOW)
{
dirStatus = STOP;
delay(200);
}
if(dirStatus ==CW){
poleStep++;
count++;
if(count+correction_CCW <= SPR)
{
driveStepper(poleStep);
}else{
driveStepper(8);
}
}else if(dirStatus ==CCW){
poleStep--;
count++;
if(count+correction_CW <=SPR)
{
driveStepper(poleStep);
}else{
driveStepper(8);
}
}else{
driveStepper(8);
}
if(poleStep>7){
poleStep=0;
}
if(poleStep<0){
poleStep=7;
}
delay(speedFactor);
//Robojax.com Stepper Push button One Revolution STPB-3
}// loop
/*
* @brief moves motor to specific angle
* @param "angle" is an integer representing the angle
* @return does not return anything
*
* www.Robojax.com code April 19, 2020, at 01:22 in Ajax, Ontario, Canada
*/
void driveStepper(int c)
{
digitalWrite(Pin1, pole1[c]);
digitalWrite(Pin2, pole2[c]);
digitalWrite(Pin3, pole3[c]);
digitalWrite(Pin4, pole4[c]);
if(c ==8)
{
digitalWrite(switchCW, HIGH);
digitalWrite(switchCCW, HIGH);
}
}//driveStepper ends here
Nghĩ bạn có thể cần
-
Amazon
-
Amazon
-
AliExpressPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
Tài nguyên & tài liệu tham khảo
-
Bên ngoài
-
Bên ngoài
-
Bên ngoài
Tập tin📁
Tập tin Fritzing
-
28BYJ-48 Stepper Motor
28BYJ-48 Stepper Motor.fzpz0.01 MB