ลองเล่นกับ Stepper Motor 28BYJ-48
บทความสอนวิธีการต่อและการใช้งาน Step motor รุ่น 28BYJ-48
19 October, 2019 by
ลองเล่นกับ Stepper Motor 28BYJ-48
Liew Wuttipat
| No comments yet

 ในบทความนี้ผมจะมาสอนการควบคุม 28BYJ-48 Stepper motor ด้วยบอร์ดขับ ULN2003 กับ Arduino กัน ผมจะแนบไฟล์ datasheet กับวิธีการต่อสายและตัวอย่างโปรแกรมเอาไว้

        28BYJ-48 เป็นสเต็ปมอเตอร์ที่มีราคาถูกที่หาซื้อได้ตามร้านทั่วไป เนื่องจากมันมีราคาถูกมันจึงอาจจะไม่ค่อยแม่นยำ แต่ก็เป็นมอเตอร์ที่เหมาะสำหรับทำกับโปรเจคเล็กๆ หรือคนที่ต้องการศึกษาเกี่ยวกับสเต็ปมอเตอร์ได้เป็นอย่างดี

        มอเตอร์ตัวนี้ส่วนใหญ่แล้วจะใช้ในการปรับขึ้นลงของแอร์ ซึ่งข้างในมอเตอร์ได้มีการทดเกียร์ไว้ เพื่อเพิ่มแรงบิด (Torque) และลดความเร็วการหมุนลง ต่อไปเรามาดูสเป็ค มอเตอร์ที่ใช้ในบทความนี้กัน

2BYJ-48 Stepper Motor Specifications
- Rated voltage (แรงดันที่ใช้): 5V
- Coil Resistance (ความต้านทานขดลวด) : 50 Ohms
- Coil Type (ชนิดขดลวด) : Unipolar
- Shaft Diameter (ขนาดเพลา) : 5 mm
- Gear reduction (อัตราเกียร์ทด) : 1/64 (ดูโน๊ต)
- Step per revolution (สเต็ปในการหมุน 1 รอบ) : Half (4096), Full (2048)
- Number of phases (จำนวนเฟส) : 4

คนผลิตส่วนใหญ่จะบอกไว้ว่ามอเตอร์นั้นมีอัตราทด 64:1 แต่มีคนในกลุ่ม Arduino Forums บอกว่าไม่ถูกต้อง เค้านั่งแกะเกียร์ออกมานับได้อัตราทดเป็น 63.68395:1 ซึ่งนั่นส่งผลให้ 1 รอบการหมุนนั้นจะใช้ 4076 สเต็ป (ในโหมด half step) จากเดิม 4096 ดังนั้นเราควรจะต้องเช็คดูว่าของเรานั้นเป็นเท่าไหร่

สำหรับใครที่ต้องการข้อมูลเพิ่มเติมสามารถอ่านจาก Datasheet นี้ได้ :
สำหรับบอร์ดไดรว์ที่เอามาใช้นั้นเป็น IC ULN2003 :
และนำ IC นั้นมาทำเป็น PCB 4 Phases Stepper Driver :

สำหรับบางคนอาจจะยังไม่รู้จักว่า Step Motor นั้นมีการวางขดลวดแบบไหนบ้าง ก็ให้ดูจากในรูปนี้ ซึ่งน่าจะช่วยอธิบายได้


การต่อสายระหว่าง 28BYJ-48 Stepper motor กับบอร์ด ULN2003 Driver เข้ากับ Arduino UNO ให้เราต่อตามภาพที่แสดงอยู่ด้านล่างนี้


ในการต่อนั้นเราสามารถใช้ Breadboard ด้วยก็ได้ ซึ่งจะทำให้การต่อกับแหล่งจ่ายไฟนอกได้ง่ายขึ้น

บอร์ด ULN2003 Driver
Connection
IN1
Pin 8 Arduino
IN2
Pin 9 Arduino
IN3
Pin 10 Arduino
IN4
Pin 11 Arduino
-
GND Arduino
-
GND Power supply
+
5V Power supply

เราสามารถต่อ 5V เข้ากับ Arduino ได้ แต่ไม่แนะนำ เนื่องจากถ้าหากมอเตอร์ดึงกระแสมากๆ อาจจะทำให้ Arduino พังหรือเสียหายได้

แนะนำให้ใช้แหล่งจ่ายไฟจากที่อื่น แล้วต่อผ่านสายจั้มเปอร์เข้ามาแทนจะดีกว่า แต่อย่าลืมหากใช้แหล่งจ่ายไฟนอกนั้น จะต้องต่อ GND ร่วมกันด้วย

บอร์ดไดรว์ ULN2003 นั้นทนได้แค่ 5V เท่านั้น แม้ในบอร์ดจะเขียน 5V ~ 12V

หลังจากต่อเสร็จเรียบร้อยแล้ว มาดูในส่วนของโปรแกรม ในตัวอย่างนี้จะใช้ Library Stepper.h ซึ่งมาพร้อมกับที่เราลง Arduino IDE เลย โดยตัวโปรแกรมนี้จะสั่งให้มอเตอร์ของเราหมุนไปทางทิศนึง 1 รอบ และหยุดรอ 1 วินาที แล้วหมุนกลับไปยังอีกทิศทางนึงอีก 1 รอบ แล้วหยุดรอ 1 วินาที ทำซ้ำวนไปเรื่อยๆ


#include <Stepper.h>

const int stepsPerRevolution = 2048;

// Wiring:
// Pin 8 to IN1 on the ULN2003 driver
// Pin 9 to IN2 on the ULN2003 driver
// Pin 10 to IN3 on the ULN2003 driver
// Pin 11 to IN4 on the ULN2003 driver

Stepper myStepper = Stepper(stepsPerRevolution, 810911);

void setup() {
  myStepper.setSpeed(5); // rpm
}

void loop() {
  myStepper.step(stepsPerRevolution);
  delay(1000);
  
  myStepper.step(-stepsPerRevolution);
  delay(1000);
}


โปรแกรมเริ่มจาก Include ไฟล์ Library Stepper.h เข้ามาก่อน สำหรับคนที่ต้องการศึกษาเพิ่มเติมสามารถเข้าไปอ่านได้ที่ Arduino Stepper


#include <Stepper.h>


ถัดไปจะเป็นการประกาศว่า มอเตอร์หมุน 1 รอบจะต้องใช้กี่สเต็ป ในตัวอย่างนี้ใช้การไดรว์แบบ Full step ดังนั้นหมายความว่าจะต้องใช้ 2048 สเต็ปในการหมุน 360 องศา


const int stepsPerRevolution = 2048;


หลังจากนั้นก็จะใช้ Stepper class ซึ่งจะเป็นการบอกว่ามีเชื่อมต่อที่ขาไหนของ Arduino บ้าง แต่การที่จะทำให้ลำดับขั้นตอนการหมุนถูกต้องนั้นจะต้องใช้เป็น 8, 10, 9, 11


Stepper myStepper = Stepper(stepsPerRevolution, 810911);


ในที่นี้เป็นการประกาศออปเจ็คชื่อว่า "myStepper" แต่ว่าเราสามารถเปลี่ยนชื่อเป็นอะไรก็ได้เช่น "z_motor", "lift_stepper" หรืออะไรก็แล้วแต่ เราสามารถที่จะประกาศตัวออปเจ็คนี้หลายๆตัวได้ แต่ชื่อกับขาพินจะต้องต่างกัน ซึ่งทำให้เราสามารถที่จะควบคุมมอเตอร์หลายๆตัวพร้อมกันได้

ต่อไปในฟังก์ชั่น setup จะมีการสั่งความเร็วของการหมุนของมอเตอร์ว่าจะให้มีความเร็วเป็นเท่าไหร่ หน่วยเป็น RPM (รอบต่อนาที) โดยที่ความเร็วสูงสุดของสเต็ปมอเตอร์นี้จะอยู่ที่ 10-15 rpm


void setup()
{
  myStepper.setSpeed(5); // rpm
}


ในฟังก์ชั่น loop จะมีการเรียกใช้ฟังก์ชั่น step ซึ่งจะเป็นการสั่งหมุนมอเตอร์ให้หมุนไปด้วยความเร็วที่เราเซ็ทเอาไว้แล้ว โดยหากใส่ค่าเป็นลบจะทำให้หมุนกลับทิศทาง


void loop()
{
  myStepper.step(stepsPerRevolution);
  delay(1000);

  myStepper.step(-stepsPerRevolution);
  delay(1000);
}


เพียงเท่านี้เราก็พอที่จะเข้าใจ และควบคุมการหมุนของสเต็ปมอเตอร์ได้แล้ว หลังจากนี้เราก็สามารถที่จะนำไปใช้ทำโปรเจคต่างๆได้แล้ว อย่างเช่น ทำแบบจำลองการปิดเปิดที่กันประตู หรืออื่นๆ

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License .
Sign in to leave a comment