บทเรียนนี้เป็นส่วนหนึ่งของ: บทเรียนที่ 107 28BYJ-48 โปรเจกต์สำหรับเครื่องสเต็ปเปอร์ 8
วิดีโอนี้มี 8 โปรเจ็กต์ แต่ละโปรเจ็กต์มีโค้ดแยกกัน ลิงก์ไปยังวิดีโออื่นๆ อยู่ด้านล่างบทความนี้
บทเรียน 107-3: การควบคุมมอเตอร์สเต็ปเปอร์ 28BYJ-48 โดยใช้ปุ่มกดสามปุ่ม: หมุนตามเข็มนาฬิกา (CW), หมุนทวนเข็มนาฬิกา (CCW), และหยุด (STPB-1)
โปรเจกต์ 3: การควบคุมมอเตอร์สเต็ปเปอร์โดยใช้ปุ่มกด STPB-1 – มอเตอร์สเต็ปเปอร์ 28BYJ-48
บทความนี้เป็นส่วนหนึ่งของชุดบทช่วยสอน 8 โปรเจกต์ที่สาธิตวิธีการควบคุมมอเตอร์สเต็ปเปอร์ 28BYJ-48 ร่วมกับ Arduino ในโปรเจกต์ 3 เราจะแนะนำการควบคุมโดยใช้ปุ่มกดเป็นครั้งแรกด้วยปุ่มกดชั่วขณะที่ชื่อว่า STPB-1 ปุ่มนี้ใช้เพื่อสั่งให้มอเตอร์หมุนด้วยการกดเพียงครั้งเดียว
ซอร์สโค้ดทั้งหมดและแผนผังการเดินสายไฟสำหรับโปรเจกต์นี้สามารถพบได้ด้านล่างของบทความ
📘 บทนำ
โปรเจกต์นี้ต่อยอดจากโปรเจกต์ก่อนหน้าโดยเพิ่มอินพุตทางกายภาพผ่านปุ่มกด เมื่อผู้ใช้กดปุ่มหนึ่งครั้ง มอเตอร์จะหมุนครบหนึ่งรอบ เทคนิคนี้จำเป็นในสถานการณ์ที่ต้องมีการเปิดใช้งานกระบวนการเคลื่อนที่ด้วยมือ เช่น การเคลื่อนย้ายแท่น การป้อนชิ้นส่วน หรือการเลื่อนขั้นกลไก
⚙️ แผนผังการเดินสายไฟ
นอกเหนือจากการเดินสายไฟของ ULN2003 และมอเตอร์สเต็ปเปอร์จากโปรเจกต์ 1 และ 2 แล้ว ยังมีการเพิ่มการเชื่อมต่อใหม่ดังนี้:
-
ขาหนึ่งของปุ่มกด (STPB-1) เชื่อมต่อกับขา 2 ของ Arduino
-
อีกขาหนึ่งเชื่อมต่อกับGND
-
ตัวต้านทานแบบดึงขึ้น (pull-up resistor) ถูกกำหนดค่าไว้ภายในโค้ด
คำอธิบายภาพ: แผนผังการเดินสายไฟแสดงการควบคุมมอเตอร์ด้วย ULN2003 และอินพุตปุ่มกด STPB-1 ไปยังขา 2
💻 คำอธิบายโค้ด
โค้ดใช้อินพุตดิจิทัลเพื่อตรวจจับการกดปุ่มและสั่งให้มอเตอร์เคลื่อนที่:
-
การตั้งค่ามอเตอร์สเต็ปเปอร์และขา:
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
const int buttonPin = 2;
-
ฟังก์ชัน Setup:
void setup() {
myStepper.setSpeed(10);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
-
ใช้
INPUT_PULLUPเพื่อลดความซับซ้อนของการเดินสายไฟ (ไม่ต้องใช้ตัวต้านทานภายนอก)
-
ฟังก์ชัน Loop:
void loop() {
if (digitalRead(buttonPin) == LOW) {
myStepper.step(stepsPerRevolution);
delay(1000); // ป้องกันการกดซ้ำโดยไม่ตั้งใจ
}
}
-
ตรวจจับการกดปุ่ม (สถานะ LOW เนื่องจากลอจิกแบบดึงขึ้น)
-
หมุนมอเตอร์ไปข้างหน้าครบหนึ่งรอบต่อการกดหนึ่งครั้ง
🎬 ไทม์สแตมป์จากวิดีโอเต็ม
หากต้องการชมโปรเจกต์นี้ในวิดีโอบทช่วยสอน ให้ใช้ไทม์สแตมป์ด้านล่าง:
-
35:48 – โปรเจกต์ 3: อธิบายการเดินสายไฟ
-
37:45 – โปรเจกต์ 3: อธิบายโค้ด
-
39:59 – โปรเจกต์ 3: การสาธิต
📁 ส่วนดาวน์โหลด
คุณจะพบซอร์สโค้ดและแผนผังการเดินสายไฟสำหรับโปรเจกต์นี้ได้ด้านล่างของบทความ การตั้งค่านี้เป็นจุดเริ่มต้นที่ดีสำหรับการสั่งให้เกิดการเคลื่อนที่ในแอปพลิเคชันที่ผู้ใช้ควบคุม
โปรเจกต์ถัดไปคือ [โปรเจกต์ 4: ปุ่มกด STPB-2 – โหมดกดค้างเพื่อหมุน]
บทเรียนนี้เป็นส่วนหนึ่งของ: บทเรียนที่ 107 28BYJ-48 โปรเจกต์สำหรับเครื่องสเต็ปเปอร์ 8
- บทเรียน 107-1: เริ่มและหยุดมอเตอร์สเต็ปเปอร์ 28BYJ-48 พร้อมกำหนดทิศทางในโค้ด
- บทเรียน 107-2: การควบคุมมอเตอร์สเต็ปเปอร์ 28BYJ-48 ผ่าน Serial Monitor
- บทเรียนที่ 107-4: การควบคุมมอเตอร์สเต็ปเปอร์ 28BYJ-48 โดยใช้ปุ่มกดสองปุ่ม ตามเข็มนาฬิกา ทวนเข็มนาฬิกา (กดค้างไว้) STPB-2
- บทเรียน 107-5: ส่งมอเตอร์ 28BYJ-48 หมุนหนึ่งรอบในทิศทางตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา, STPB-3
- บทเรียน 107-6: การควบคุมมอเตอร์สเต็ปเปอร์ 28BYJ-48 โดยใช้ปุ่มกดสามปุ่ม พร้อมด้วยมุมและความเร็ว STPB-4
- บทเรียน 107-7: การส่งสเต็ปเปอร์มอเตอร์ 28BYJ-48 ไปยังมุมใดๆ ด้วยปุ่มกด STPB-5 ที่กำหนดไว้
- บทเรียน 107-8: การควบคุมความเร็วของสเต็ปเปอร์มอเตอร์ 28BYJ-48 โดยใช้โพเทนชิโอมิเตอร์
++
/*
* Lesson 107-3: Controlling a stepper motor using 3 push buttons.
We have 3 push buttons: one for clockwise (CW), the second for counter-clockwise (CCW), and one for stopping the motor.
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 1: Running motor
Project 2: Controlling stepper motor from Serial Monitor
Project 3: Controlling stepper motor using push button STPB-1 (this code)
Project 4: Controlling using push button STPB-2 keep pressing
Project 5: One Revolution using push button STPB-3
Project 6: Push button: Any Angle and speed STPB-4
Project 7: Using multiple buttons to control 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 via 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 switchStop=3;//define input pin for Stop push button
int switchCCW =4;//define input pin for CCW push button
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 poleStep = 0;
int dirStatus = 3;// stores direction status 3= stop (do not change)
void setup()
{
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);// CW push button pin as input
pinMode(switchStop,INPUT_PULLUP);//Stop push button pin as input
pinMode(switchCCW,INPUT_PULLUP);//CCW push button pin as input
}
void loop()
{
if(digitalRead(switchCCW) == LOW)
{
dirStatus =1;
}else if(digitalRead(switchCW) == LOW)
{
dirStatus = 2;
}else if(digitalRead(switchStop) == LOW)
{
dirStatus =3;
}
if(dirStatus ==1){
poleStep++;
driveStepper(poleStep);
}else if(dirStatus ==2){
poleStep--;
driveStepper(poleStep);
}else{
driveStepper(8);
}
if(poleStep>7){
poleStep=0;
}
if(poleStep<0){
poleStep=7;
}
delay(1);
}// loop
void driveStepper(int c)
{
digitalWrite(Pin1, pole1[c]);
digitalWrite(Pin2, pole2[c]);
digitalWrite(Pin3, pole3[c]);
digitalWrite(Pin4, pole4[c]);
}
สิ่งที่คุณอาจต้องการ
-
อเมซอน
-
อเมซอน
-
อาลีเอ็กซ์เพรสPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
แหล่งข้อมูลและเอกสารอ้างอิง
-
ภายนอก
-
ภายนอก
-
ภายนอก
ไฟล์📁
ไฟล์ Fritzing
-
28BYJ-48 Stepper Motor
28BYJ-48 Stepper Motor.fzpz0.01 MB