งานที่ 18
ESP8266 NodeMCU พร้อมสเต็ปเปอร์มอเตอร์ (28BYJ-48 และไดรเวอร์มอเตอร์ ULN2003)
ในคู่มือนี้ คุณจะได้เรียนรู้วิธีควบคุมสเต็ปเปอร์มอเตอร์ด้วยบอร์ด ESP8266 NodeMCU เราจะใช้สเต็ปปิ้งมอเตอร์แบบ unipolar 28BYJ-48 กับไดรเวอร์มอเตอร์ ULN2003 เราจะตั้งโปรแกรมบอร์ด ESP8266 โดยใช้ Arduino IDE

เรามีบทช่วยสอนที่คล้ายกันสำหรับบอร์ด ESP32: ESP32 พร้อม Stepper Motor (28BYJ-48 และ ULN2003 Motor Driver)
อะไหล่ที่จำเป็น
ในการทำตามบทช่วยสอนนี้ คุณต้องมีชิ้นส่วนต่อไปนี้:
- 28BYJ-48 สเต็ปเปอร์มอเตอร์
- ULN2003 ตัวขับมอเตอร์
- ESP8266 (อ่านบอร์ดพัฒนา ESP8266 ที่ดีที่สุด )
- สายจัมเปอร์
- พาวเวอร์ซัพพลาย 5V
คุณสามารถใช้ลิงก์ก่อนหน้าหรือไปที่MakerAdvisor.com/toolsโดยตรงเพื่อค้นหาชิ้นส่วนทั้งหมดสำหรับโครงการของคุณในราคาที่ดีที่สุด!
ขอแนะนำสเต็ปเปอร์มอเตอร์
สเต็ปเปอร์มอเตอร์เป็นมอเตอร์ไฟฟ้ากระแสตรงแบบไม่มีแปรงถ่านที่แบ่งการหมุนแบบเต็มออกเป็นหลายขั้นตอน มันเคลื่อนไปทีละขั้น และแต่ละขั้นมีขนาดเท่ากัน ทำให้เราสามารถหมุนมอเตอร์ด้วยมุมที่แม่นยำไปยังตำแหน่งที่แม่นยำ สเต็ปเปอร์มอเตอร์สามารถหมุนตามเข็มนาฬิกาหรือทวนเข็มนาฬิกาได้
ภาพต่อไปนี้แสดงสเต็ปเปอร์มอเตอร์ 28BYJ-48 สองตัว

สเต็ปเปอร์มอเตอร์ทำจากคอยล์ภายในที่ทำให้เพลามอเตอร์เคลื่อนที่เป็นขั้นๆ ในทิศทางเดียวหรืออีกทางหนึ่งเมื่อใช้กระแสกับคอยส์ในลักษณะเฉพาะ
สเต็ปเปอร์มอเตอร์มีสองประเภท: สเต็ปปิ้งมอเตอร์แบบ unipolar และ bipolar
ในบทความนี้ เราจะไม่ให้รายละเอียดเกี่ยวกับวิธีการสร้างสเต็ปเปอร์มอเตอร์และการทำงานภายใน ต้องการเรียนรู้ในรายละเอียดวิธีการทำงานและความแตกต่างระหว่างแต่ละประเภทมอเตอร์เราขอแนะนำให้อ่านบทความนี้โดยบล็อก DroneBotWorkshop
28BYJ-48 สเต็ปเปอร์มอเตอร์
มีสเต็ปเปอร์มอเตอร์หลายตัวที่มีคุณสมบัติแตกต่างกัน กวดวิชานี้จะครอบคลุมใช้กันอย่างแพร่หลาย28BYJ-48 มอเตอร์ unipolarกับคนขับมอเตอร์ ULN2003

คุณสมบัติ 28BYJ-48 Stepper Motor
คุณสมบัติของสเต็ปเปอร์มอเตอร์ (สำหรับรายละเอียดเพิ่มเติม ศึกษาแผ่นข้อมูล):
- แรงดันไฟฟ้า: 5V DC
- จำนวนเฟส: 4
- อัตราการเปลี่ยนแปลงความเร็ว: 1/64
- มุมก้าว: 5.625º/64
- ความถี่: 100Hz
สเต็ปเปอร์มอเตอร์ 28BYJ-48 มีทั้งหมดสี่คอยส์ ปลายด้านหนึ่งของขดลวดเชื่อมต่อกับ 5V ซึ่งสอดคล้องกับสายสีแดงของมอเตอร์ ปลายอีกด้านของขดลวดสอดคล้องกับสายไฟที่มีสีน้ำเงิน ชมพู เหลือง และส้ม การเพิ่มพลังให้กับขดลวดในลำดับเชิงตรรกะทำให้มอเตอร์เคลื่อนที่หนึ่งขั้นในทิศทางเดียวหรืออีกทางหนึ่ง

สเต็ปเปอร์มอเตอร์ 28BYJ-48 มีมุมก้าว 5.625 °/64 ในโหมดครึ่งก้าว ซึ่งหมายความว่ามอเตอร์มีมุมขั้นที่ 5.625º—ดังนั้นจึงต้องใช้ 360º/5.625º = 64 ขั้นในโหมดครึ่งขั้นตอน ในโหมดเต็มขั้นตอน: 64/2 = 32 ขั้นตอนในการหมุนหนึ่งครั้ง
อย่างไรก็ตาม เพลาส่งออกถูกขับเคลื่อนด้วยอัตราทดเกียร์ 64:1 ซึ่งหมายความว่าเพลา (มองเห็นได้ภายนอกมอเตอร์) จะหมุนจนสุดหากมอเตอร์ภายในหมุน 64 ครั้ง ซึ่งหมายความว่ามอเตอร์จะต้องเคลื่อนที่ 32×64 = 2048 ขั้นเพื่อให้เพลาหมุนได้เต็มที่หนึ่งครั้ง ซึ่งหมายความว่า คุณจะมีความแม่นยำ 360º/2048 ขั้น = 0.18º/ขั้น
ดังนั้นโดยสรุป:
- ขั้นตอนทั้งหมดต่อการปฏิวัติ = 2048 ขั้นตอน
- มุมขั้น = 0.18º/ขั้นตอน
หากคุณกำลังใช้สเต็ปเปอร์มอเตอร์อื่น โปรดดูเอกสารข้อมูล
ULN2003 ตัวขับมอเตอร์
เพื่อเชื่อมต่อสเต็ปเปอร์มอเตอร์กับบอร์ด ESP8266 NodeMCU เราจะใช้ไดรเวอร์มอเตอร์ ULN2003 ดังแสดงในรูปด้านล่าง สเต็ปเปอร์มอเตอร์ 28BYJ-48 มีจำหน่ายหลายครั้งพร้อมกับไดรเวอร์มอเตอร์ ULN2003

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

มีหมุดให้เชื่อมต่อ VCC และ จีเอ็นดี,และฝาครอบจัมเปอร์ที่ทำหน้าที่เป็นสวิตช์เปิด/ปิดเพื่อจ่ายไฟให้กับสเต็ปเปอร์มอเตอร์—หากคุณถอดจัมเปอร์ออก จะไม่มีกระแสไฟไปถึงมอเตอร์ คุณสามารถใช้หมุดเหล่านั้นเพื่อต่อสายสวิตช์ทางกายภาพ
Pinout ไดรเวอร์มอเตอร์ ULN2003
ตารางต่อไปนี้แสดง pinout ของโมดูล:
| IN1 | ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล |
| IN2 | ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล |
| IN3 | ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล |
| IN4 | ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล |
| VCC | ขับเคลื่อนมอเตอร์ |
| GND | GND ทั่วไป |
| ขั้วต่อมอเตอร์ | ต่อขั้วต่อมอเตอร์ |
ลวดสเต็ปเปอร์มอเตอร์เข้ากับบอร์ด ESP8266
ในส่วนนี้ เราจะเชื่อมต่อสเต็ปเปอร์มอเตอร์กับ ESP8266 ผ่านไดรเวอร์มอเตอร์ ULN2003
เราจะเชื่อมต่อ IN1, IN2, IN3 และ IN4 กับ GPIO 5, 4, 14, และ 12. คุณสามารถใช้หมุดดิจิทัลอื่น ๆ ที่เหมาะสมได้ (ตรวจสอบคู่มืออ้างอิง pinoutของESP8266ของเรา)
คุณสามารถทำตามแผนผังไดอะแกรมถัดไป

หมายเหตุ:คุณควรจ่ายไฟให้ไดรเวอร์มอเตอร์โดยใช้แหล่งจ่ายไฟ 5V ภายนอก
| ตัวขับมอเตอร์ | ESP8266 |
| IN1 | GPIO 5 |
| IN2 | GPIO 4 |
| IN3 | GPIO14 |
| IN4 | GPIO 12 |
การติดตั้ง AccelStepper Library
มีหลายวิธีในการควบคุมสเต็ปเปอร์มอเตอร์ด้วยไมโครคอนโทรลเลอร์ ในการควบคุมสเต็ปเปอร์มอเตอร์ด้วย ESP8266 เราจะใช้ไลบรารีAccelStepper ไลบรารีนี้ช่วยให้คุณเคลื่อนมอเตอร์ตามจำนวนก้าวที่กำหนด ตั้งค่าความเร็ว ความเร่ง และอื่นๆ อีกมากมายได้อย่างง่ายดาย
ห้องสมุดมีเอกสารที่ดีที่อธิบายวิธีการใช้วิธีการต่างๆ คุณสามารถตรวจสอบได้ที่นี่
ทำตามขั้นตอนถัดไปเพื่อติดตั้งไลบรารี่ใน Arduino IDE ของคุณ
- ไปที่Sketch > รวมไลบรารี > จัดการไลบรารี...
- ค้นหา "accelstepper"
- ติดตั้งห้องสมุด AccelStepper โดย Mike McCauley เรากำลังใช้เวอร์ชัน 1.61.0

ควบคุมสเต็ปเปอร์มอเตอร์ด้วย ESP8266 – Code
คัดลอกรหัสต่อไปนี้ไปยัง Arduino IDE ของคุณ ในตัวอย่างนี้ มอเตอร์จะทำการหมุนตามเข็มนาฬิกาหนึ่งครั้งและหมุนทวนเข็มนาฬิกาซ้ำแล้วซ้ำอีก
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-stepper-motor-28byj-48-uln2003/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Based on Stepper Motor Control - one revolution by Tom Igoe
*/
#include <AccelStepper.h>
const int stepsPerRevolution = 2048; // change this to fit the number of steps per revolution
// ULN2003 Motor Driver Pins
#define IN1 5
#define IN2 4
#define IN3 14
#define IN4 12
// initialize the stepper library
AccelStepper stepper(AccelStepper::HALF4WIRE, IN1, IN3, IN2, IN4);
void setup() {
// initialize the serial port
Serial.begin(115200);
// set the speed and acceleration
stepper.setMaxSpeed(500);
stepper.setAcceleration(100);
// set target position
stepper.moveTo(stepsPerRevolution);
}
void loop() {
// check current stepper motor position to invert direction
if (stepper.distanceToGo() == 0){
stepper.moveTo(-stepper.currentPosition());
Serial.println("Changing direction");
}
// move the stepper motor (one step at a time)
stepper.run();
}
ความคิดเห็น
แสดงความคิดเห็น