งานที่ 18

 ESP8266 NodeMCU พร้อมสเต็ปเปอร์มอเตอร์ (28BYJ-48 และไดรเวอร์มอเตอร์ ULN2003)

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

ESP8266 NodeMCU พร้อมสเต็ปเปอร์มอเตอร์ 28BYJ-48 และ ULN2003 ไดรเวอร์มอเตอร์ Arduino IDE

เรามีบทช่วยสอนที่คล้ายกันสำหรับบอร์ด ESP32: ESP32 พร้อม Stepper Motor (28BYJ-48 และ ULN2003 Motor Driver)

อะไหล่ที่จำเป็น

ในการทำตามบทช่วยสอนนี้ คุณต้องมีชิ้นส่วนต่อไปนี้:

คุณสามารถใช้ลิงก์ก่อนหน้าหรือไปที่MakerAdvisor.com/toolsโดยตรงเพื่อค้นหาชิ้นส่วนทั้งหมดสำหรับโครงการของคุณในราคาที่ดีที่สุด!

ขอแนะนำสเต็ปเปอร์มอเตอร์

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

ภาพต่อไปนี้แสดงสเต็ปเปอร์มอเตอร์ 28BYJ-48 สองตัว

28BYJ-48 สเต็ปเปอร์มอเตอร์

สเต็ปเปอร์มอเตอร์ทำจากคอยล์ภายในที่ทำให้เพลามอเตอร์เคลื่อนที่เป็นขั้นๆ ในทิศทางเดียวหรืออีกทางหนึ่งเมื่อใช้กระแสกับคอยส์ในลักษณะเฉพาะ

สเต็ปเปอร์มอเตอร์มีสองประเภท: สเต็ปปิ้งมอเตอร์แบบ unipolar และ bipolar

ในบทความนี้ เราจะไม่ให้รายละเอียดเกี่ยวกับวิธีการสร้างสเต็ปเปอร์มอเตอร์และการทำงานภายใน ต้องการเรียนรู้ในรายละเอียดวิธีการทำงานและความแตกต่างระหว่างแต่ละประเภทมอเตอร์เราขอแนะนำให้อ่านบทความนี้โดยบล็อก DroneBotWorkshop

28BYJ-48 สเต็ปเปอร์มอเตอร์

มีสเต็ปเปอร์มอเตอร์หลายตัวที่มีคุณสมบัติแตกต่างกัน กวดวิชานี้จะครอบคลุมใช้กันอย่างแพร่หลาย28BYJ-48 มอเตอร์ unipolarกับคนขับมอเตอร์ ULN2003

28BYJ-48 เชื่อมต่อกับโมดูล ULN2003 Motor Driver 01

คุณสมบัติ 28BYJ-48 Stepper Motor

คุณสมบัติของสเต็ปเปอร์มอเตอร์ (สำหรับรายละเอียดเพิ่มเติม ศึกษาแผ่นข้อมูล):

  • แรงดันไฟฟ้า: 5V DC
  • จำนวนเฟส: 4
  • อัตราการเปลี่ยนแปลงความเร็ว: 1/64
  • มุมก้าว: 5.625º/64
  • ความถี่: 100Hz

สเต็ปเปอร์มอเตอร์ 28BYJ-48 มีทั้งหมดสี่คอยส์ ปลายด้านหนึ่งของขดลวดเชื่อมต่อกับ 5V ซึ่งสอดคล้องกับสายสีแดงของมอเตอร์ ปลายอีกด้านของขดลวดสอดคล้องกับสายไฟที่มีสีน้ำเงิน ชมพู เหลือง และส้ม การเพิ่มพลังให้กับขดลวดในลำดับเชิงตรรกะทำให้มอเตอร์เคลื่อนที่หนึ่งขั้นในทิศทางเดียวหรืออีกทางหนึ่ง

ขดลวดสเต็ปมอเตอร์ 28BYJ-48

สเต็ปเปอร์มอเตอร์ 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

ULN2003 Motor Driver 01 โมดูลบอร์ด

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

ULN2003 ฉลากไดรเวอร์มอเตอร์

มีหมุดให้เชื่อมต่อ VCC และ จีเอ็นดี,และฝาครอบจัมเปอร์ที่ทำหน้าที่เป็นสวิตช์เปิด/ปิดเพื่อจ่ายไฟให้กับสเต็ปเปอร์มอเตอร์—หากคุณถอดจัมเปอร์ออก จะไม่มีกระแสไฟไปถึงมอเตอร์ คุณสามารถใช้หมุดเหล่านั้นเพื่อต่อสายสวิตช์ทางกายภาพ

Pinout ไดรเวอร์มอเตอร์ ULN2003

ตารางต่อไปนี้แสดง pinout ของโมดูล:

IN1ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล
IN2ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล
IN3ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล
IN4ควบคุมมอเตอร์: เชื่อมต่อกับไมโครคอนโทรลเลอร์พินดิจิตอล
VCCขับเคลื่อนมอเตอร์
GNDGND ทั่วไป
ขั้วต่อมอเตอร์ต่อขั้วต่อมอเตอร์

ลวดสเต็ปเปอร์มอเตอร์เข้ากับบอร์ด ESP8266

ในส่วนนี้ เราจะเชื่อมต่อสเต็ปเปอร์มอเตอร์กับ ESP8266 ผ่านไดรเวอร์มอเตอร์ ULN2003

เราจะเชื่อมต่อ IN1, IN2, IN3 และ IN4 กับ GPIO 5414, และ 12คุณสามารถใช้หมุดดิจิทัลอื่น ๆ ที่เหมาะสมได้ (ตรวจสอบคู่มืออ้างอิง pinoutของESP8266ของเรา)

คุณสามารถทำตามแผนผังไดอะแกรมถัดไป

ESP8266 พร้อมสเต็ปเปอร์มอเตอร์ 28BYJ-48 และ ULN2003A Schematic Diagram Wiring

หมายเหตุ:คุณควรจ่ายไฟให้ไดรเวอร์มอเตอร์โดยใช้แหล่งจ่ายไฟ 5V ภายนอก

ตัวขับมอเตอร์ESP8266
IN1GPIO 5
IN2GPIO 4
IN3GPIO14
IN4GPIO 12

การติดตั้ง AccelStepper Library

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

ห้องสมุดมีเอกสารที่ดีที่อธิบายวิธีการใช้วิธีการต่างๆ คุณสามารถตรวจสอบได้ที่นี่

ทำตามขั้นตอนถัดไปเพื่อติดตั้งไลบรารี่ใน Arduino IDE ของคุณ

  1. ไปที่Sketch > รวมไลบรารี > จัดการไลบรารี...
  2. ค้นหา "accelstepper"
  3. ติดตั้งห้องสมุด AccelStepper โดย Mike McCauley เรากำลังใช้เวอร์ชัน 1.61.0
ติดตั้ง AccelStepper Library Arduino IDE

ควบคุมสเต็ปเปอร์มอเตอร์ด้วย 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();
}

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

งานที่ 16