การใช้มอเตอร์สเต็ปเปอร์ 28BYJ-48 กับไดรเวอร์ ULN2003 และ Arduino
ในบทแนะนำนี้ เราจะเรียนรู้วิธีควบคุมมอเตอร์สเต็ป 28BYJ-48 โดยใช้ไดรเวอร์ ULN2003 ร่วมกับ Arduino การตั้งค่านี้ช่วยให้สามารถควบคุมตำแหน่งและความเร็วของมอเตอร์ได้อย่างแม่นยำ เมื่อสิ้นสุดโครงการนี้ คุณจะสามารถหมุนมอเตอร์ในทั้งสองทิศทางและควบคุมจำนวนขั้นตอนของมันได้อย่างมีประสิทธิภาพ
เราจะใช้มอเตอร์สเต็ป 28BYJ-48 ซึ่งเป็นตัวเลือกที่ได้รับความนิยมสำหรับโครงการหุ่นยนต์และอัตโนมัติหลายประเภทเนื่องจากมีต้นทุนต่ำและใช้งานง่าย แผงควบคุม ULN2003 เชื่อมต่อมอเตอร์สเต็ปกับ Arduino ทำให้เราสามารถส่งสัญญาณสเต็ปที่ควบคุมการเคลื่อนไหวของมอเตอร์ได้ บทแนะนำนี้จะพาคุณไปยังการเดินสายและโค้ดที่จำเป็นเพื่อให้มอเตอร์ของคุณหมุนได้
สำหรับข้อมูลเพิ่มเติม โปรดดูวิดีโอที่เกี่ยวข้องกับบทแนะนำนี้ (ในวิดีโอที่ 0:45)
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักของโครงการนี้ประกอบด้วยมอเตอร์สเต็ปเปอร์ 28BYJ-48 และบอร์ดไดรเวอร์ ULN2003 มอเตอร์สเต็ปเปอร์ประกอบด้วยขดลวดหลายตัวที่สามารถถูกกระตุ้นในลำดับที่เฉพาะเจาะจงเพื่อสร้างการหมุน บอร์ดไดรเวอร์ ULN2003 ทำหน้าที่เป็นสวิตช์ ช่วยให้ Arduino สามารถควบคุมพลังงานที่ส่งไปยังแต่ละขดลวดได้
ไดรเวอร์ ULN2003 ใช้ชุดทรานซิสเตอร์ดาร์ลิงตันเพื่อจัดการกับกระแสที่สูงขึ้นที่จำเป็นสำหรับมอเตอร์สเต็ปเปอร์ เมื่อพินจาก Arduino ส่งสัญญาณ HIGH จะทำให้กระแสไหลไปยังขดลวดที่สอดคล้องกันในมอเตอร์ ทำให้มันเคลื่อนที่ได้ ซึ่งช่วยให้ควบคุมมุมการหมุนและความเร็วของมอเตอร์ได้อย่างแม่นยำ
รายละเอียดแผ่นข้อมูล
| ผู้ผลิต | ULN2003 |
|---|---|
| หมายเลขชิ้นส่วน | ULN2003 |
| แรงดันไฟฟ้า Logic/IO | 5 โวลต์ |
| แรงดันไฟฟ้าจ่าย | 5-30 โวลต์ (สูงสุด) |
| กระแสไฟฟ้าเอาต์พุต (ต่อช่อง) | 500 mA สูงสุด |
| กระแสสูงสุด (ต่อช่อง) | 2 A สูงสุด |
| แนวทางความถี่ PWM | N/A |
| เกณฑ์ตรรกะนำเข้า | 0.8 โวลต์ (ต่ำ), 2.4 โวลต์ (สูง) |
| แรงดันไฟฟ้าตก / RDS(on)/ ความอิ่มตัว | 1.5 โวลต์ สูงสุด |
| ขีดจำกัดความร้อน | 70 °C สูงสุด |
| แพ็คเกจ | DIP-16 |
| หมายเหตุ / ตัวแปร | มักใช้กับมอเตอร์สเต็ปเปอร์ 5V |
- ตรวจสอบให้แน่ใจว่าผู้ขับขี่สามารถจัดการกับความต้องการปัจจุบันของมอเตอร์ของคุณได้
- ใช้ฮีตซิงค์หากจำเป็นเพื่อจัดการกับขีดจำกัดความร้อน
- ตรวจสอบให้แน่ใจว่าการเชื่อมต่อทั้งหมดแน่นหนาเพื่อหลีกเลี่ยงการมีสัญญาณลอย.
- ทดสอบมอเตอร์โดยการรันลำดับขั้นตอนง่าย ๆ ก่อนที่จะรวมเข้ากับโครงการขนาดใหญ่กว่า
- ตรวจสอบให้แน่ใจว่าได้จ่ายไฟให้มอเตอร์ด้วยแรงดันไฟฟ้าที่เพียงพอ
คำแนะนำการเดินสาย


ในการต่อสายมอเตอร์สเต็ป 28BYJ-48 กับไดรเวอร์ ULN2003 และ Arduino ให้ทำตามขั้นตอนเหล่านี้:
ก่อนอื่นให้เชื่อมต่อมอเตอร์กับไดรเวอร์ ULN2003 มอเตอร์มีสายสี่เส้น โดยปกติจะมีการระบุสีเป็นสีส้ม สีเหลือง สีชมพู และสีน้ำเงิน เชื่อมต่อสายเหล่านี้เข้ากับขาเอาต์พุตที่ตรงกันบนไดรเวอร์ ULN2003 การเชื่อมต่อมีดังนี้:
OrangeสายไปยังOUT1YellowสายไปยังOUT2PinkสายไปยังOUT3BlueสายไปยังOUT4
ถัดไป เชื่อมต่อไดรเวอร์ ULN2003 กับ Arduino ขาอินพุตบนไดรเวอร์จะตรงกับขาดิจิตอลสี่ขาใน Arduino ตัวอย่างเช่น:
IN1ถึงPin 10IN2ถึงPin 11IN3ถึงPin 12IN4ถึงPin 13
สุดท้าย เชื่อมต่อขาไฟฟ้าและขากลับของไดรเวอร์ ULN2003 เข้ากับ Arduino เชื่อมต่อVCCเชื่อมต่อกับขา 5V ของ Arduino และGNDเชื่อมต่อกับกราวด์ของ Arduino ให้แน่ใจว่าการเชื่อมต่อทั้งหมดแน่นหนาก่อนที่จะเปิดระบบ.
ตัวอย่างโค้ดและการเดินทาง
ในส่วนการตั้งค่าของโค้ด Arduino เราจะกำหนดพินที่เชื่อมต่อกับไดรเวอร์ ULN2003:
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
ที่นี่ เราประกาศตัวแปรจำนวนเต็มสี่ตัว:Pin1,Pin2,Pin3, และPin4ซึ่งตรงกับขาดิจิตอลบน Arduino ขาเหล่านี้จะควบคุมการเคลื่อนไหวของมอเตอร์สเต็ปเปอร์
ในsetup()ฟังก์ชัน เรากำหนดพินเหล่านี้เป็นเอาต์พุต:
void setup() {
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
}
การตั้งค่านี้ทำให้แน่ใจว่า Arduino สามารถส่งสัญญาณไปยังตัวขับ ULN2003 เพื่อควบคุมมอเตอร์ได้pinModeฟังก์ชันตั้งค่าขาแต่ละขาเป็นโหมด OUTPUT ทำให้สามารถส่งสัญญาณได้
สุดท้าย ในลูปหลัก เราสร้างสวิตช์เคสเพื่อควบคุมจำนวนขั้นตอนของมอเตอร์ตามตัวแปร_step:
switch(_step){
case 0:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
// Additional cases follow
}
ในตอนนี้ เราใช้digitalWriteเพื่อส่งสัญญาณสูงหรือต่ำไปยังแต่ละขาโดยอิงจากกระแสปัจจุบัน_step. นี่ควบคุมว่าไหนที่มีการจ่ายไฟ ทำให้มอเตอร์หมุนได้ โค้ดทั้งหมดที่รวมส่วนนี้จะถูกโหลดด้านล่างบทความ
การสาธิต / สิ่งที่คาดหวัง
เมื่อทุกอย่างถูกเชื่อมต่ออย่างถูกต้องและโค้ดถูกอัปโหลด มอเตอร์สเต็ปเปอร์ควรหมุนตามสัญญาณจาก Arduino คุณสามารถทดสอบมอเตอร์โดยการปรับเปลี่ยนการหน่วงเวลาในลูปหรือเปลี่ยนจำนวนขั้นตอนเพื่อดูว่ามันตอบสนองอย่างไร โปรดทราบว่าหากมอเตอร์ไม่ได้รับพลังงานอย่างถูกต้อง มันอาจไม่เคลื่อนที่หรืออาจทำงานผิดปกติ
บทที่
- บทนำ - 0:00
- อธิบายฮาร์ดแวร์ - 1:30
- คำแนะนำการเดินสาย - 3:15
- ตัวอย่างโค้ดและการสาธิต - 5:00
- การสาธิต / สิ่งที่คาดหวัง - 7:45
// Original source is http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
// Update by Ahmad Shamshiri for RoboJax.com
// Published on March 27, 2017 in Ajax, ON, Canada.
/*
*
Need wiring diagram from this code: https://youtu.be/0glBk917HPg
Purchase My Arduino course on Udemy.com http://robojax.com/L/?id=62
*
* Get this code and other Arduino codes from RoboJax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* * 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;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
int _step = 0;
boolean dir = true;// false=clockwise, true=counter clockwise
int count=0;
void setup()
{
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
}
void loop()
{
switch(_step){
case 0:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
case 1:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, HIGH);
break;
case 2:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 3:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 4:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 5:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 6:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 7:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
default:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
}
if(dir){
_step++;
}else{
_step--;
}
if(_step>7){
_step=0;
}
if(_step<0){
_step=7;
}
delay(1);
}
สิ่งที่คุณอาจต้องการ
-
อเมซอน
-
อเมซอน
-
อาลีเอ็กซ์เพรสPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
-
อาลีเอ็กซ์เพรส
แหล่งข้อมูลและเอกสารอ้างอิง
-
ภายนอก
-
ภายนอก
-
ภายนอก
-
ภายนอก
-
ภายนอก
ไฟล์📁
ไม่มีไฟล์ที่พร้อมใช้งาน