หน้าแรก ดูโปรเจกต์ทั้งหมด
Intermediate

โปรเจกต์ วิธีการใช้งาน L298N motor driver module

module นี้ช่วยให้คุณสามารถควบคุม motors สองตัวแยกอิสระได้สูงสุด 2A ในทั้งสองทิศทาง ช่วง Supply อาจอยู่ระหว่าง 5V และ 35V ซึ่งเพียงพอสำหรับ DC motor projects ส่วนใหญ่

โปรเจกต์ วิธีการใช้งาน L298N motor driver module
85,758 การดู
10 ถูกใจ

รายการอุปกรณ์และเครื่องมือ

1x [HB] L298N Module
🛒 สั่งซื้อ
1x [HB] Dupont wires
🛒 สั่งซื้อ
1x [HB] Mini Breadboard
🛒 สั่งซื้อ
1x [HB] Arduino Nano
🛒 สั่งซื้อ
2x [HB] DCmotors with wheels
🛒 สั่งซื้อ

แอปพลิเคชันและแพลตฟอร์ม

รายละเอียดและวิธีทำ

บทความหลัก: How to use the L298N motor driver module

L298N Motor Driver เป็นตัวควบคุมที่ใช้ H-Bridge เพื่อควบคุมทิศทางของ Motor ได้อย่างง่ายดาย และใช้ PWM เพื่อควบคุมความเร็ว โมดูลนี้ช่วยให้คุณสามารถจัดการ Motor สองตัวแยกกันได้สูงสุดตัวละ 2A ในทั้งสองทิศทาง ช่วงของแหล่งจ่ายไฟ (Supply range) อาจอยู่ระหว่าง 5V ถึง 35V ซึ่งเพียงพอสำหรับโปรเจกต์ DC motor ส่วนใหญ่

ข้อกำหนดเบื้องต้น

เราขอแนะนำอย่างยิ่งให้อ่านบทความของเราเกี่ยวกับ PWM: What is PWM and how it works

Pinout

อันดับแรก มาทำความเข้าใจความหมายของแต่ละ Pin ที่มีอยู่บนบอร์ด L298N กันก่อน

L298N pinout
คำอธิบาย Pin ต่างๆ ของ L298N

ทิศทางการหมุนของ Motor สามารถควบคุมได้โดยการส่งค่า Logic HIGH หรือ Logic LOW ไปยัง Input IN1/IN2 (Motor A) และ IN3/IN4 (Motor B) ตามที่แสดงในตาราง

ทิศทางการหมุนของ L298N

Pin ควบคุมความเร็ว ENA และ ENB ใช้สำหรับเปิด/ปิด Motor และควบคุมความเร็วด้วย Pulse Width Modulation (PWM) นั่นหมายความว่า Motor จะหมุนด้วยความเร็วสูงสุดเมื่อเป็น HIGH และหยุดเมื่อเป็น LOW โดยปกติแล้วโมดูลจะมาพร้อมกับ Jumper บน Pin เหล่านี้ซึ่งเชื่อมต่อเข้ากับค่า HIGH โดยตรง หากคุณต้องการควบคุมความเร็วของ Motor ให้ถอด Jumper ออกแล้วเชื่อมต่อ Pin ENA และ/หรือ ENB เข้ากับ PWM มิฉะนั้น Motor จะหมุนที่ความเร็วสูงสุดเสมอ

Voltage regulator

โมดูลนี้ประกอบด้วย Regulator 5V ที่สามารถเปิด/ปิดการใช้งานได้โดยใช้ Jumper:

  1. เมื่อใส่ Jumper: Regulator จะถูกเปิดใช้งาน และ Pin +5V จะทำหน้าที่เป็น Output ซึ่งสามารถใช้จ่ายไฟให้กับ Arduino หรือวงจรอื่นๆ ที่ต้องการไฟ 5V ได้ หมายเหตุ: หากแหล่งจ่ายไฟมากกว่า 12V ต้องถอด Jumper ออกเพื่อป้องกันความเสียหายต่อ Regulator บนบอร์ด
  2. เมื่อถอด Jumper: Regulator จะถูกปิดใช้งาน และ Pin +5V จะทำหน้าที่เป็น Input โดยรอรับการจ่ายไฟ 5V เข้ามา

โปรดพิจารณาด้วยว่าโมดูล L298N มีแรงดันตกคร่อม (Voltage drop) ประมาณ 2V ดังนั้นหากใช้แหล่งจ่ายไฟ 12V ตัว Motor จะได้รับแรงดันจริงประมาณ 10V ซึ่งหมายความว่าเราจะไม่สามารถทำความเร็วสูงสุดได้

ผังการต่อวงจร

เมื่อมีความเข้าใจอย่างถ่องแท้เกี่ยวกับแต่ละ Pin และการทำงานของโมดูลแล้ว เราสามารถดำเนินการต่อวงจรได้

ผังการต่อวงจร L298N

ENA และ ENB เชื่อมต่อกับ Pin PWM ของ Arduino Nano และ IN1/IN2/IN3/IN4 เชื่อมต่อกับ Pin Digital ทั่วไป เรากำลังใช้แบตเตอรี่ 9V และใส่ Jumper ไว้ ดังนั้นเราจึงสามารถใช้ Pin +5V เพื่อจ่ายไฟให้กับ Arduino ได้ด้วย

Arduino code

Code นี้ค่อนข้างง่ายและไม่จำเป็นต้องใช้ Library ภายนอกในการทำงาน เราได้กำหนด struct (ชื่อว่า motor) ซึ่งจะใช้แทนค่าความเร็วและทิศทางของ Motor แต่ละตัว

  1. ฟังก์ชัน setup() กำหนด Pin ที่จำเป็นให้เป็น Output และกำหนดค่าเริ่มต้นให้กับ Motor
  2. ฟังก์ชันหลัก loop() ทดสอบความเร็วของ Motor และสลับทิศทาง
  3. ฟังก์ชัน sendToMotorA() รวบรวมข้อมูล Pin สำหรับ Motor A
  4. ฟังก์ชัน sendToMotorB() รวบรวมข้อมูล Pin สำหรับ Motor B
  5. ฟังก์ชัน increaseMotorsSpeed() ค่อยๆ เพิ่มความเร็วของ Motor ทั้งสองตัว
  6. ฟังก์ชัน decreaseMotorsSpeed() ค่อยๆ ลดความเร็วของ Motor ทั้งสองตัว

มีการเพิ่มข้อความอธิบายบางส่วนเพื่อให้สามารถ Debug กระบวนการใน Serial monitor ได้

// Motor A

#define ENA_PIN 10 //PWM

#define IN1_PIN 9

#define IN2_PIN 8

// Motor B

#define ENB_PIN 3 //PWM

#define IN3_PIN 4

#define IN4_PIN 5

struct motor {

byte speed = 0;

struct {

byte input1 = LOW;

byte input2 = LOW;

} direction;

};

motor motorA, motorB;

void setup()

{

Serial.begin(115200);

// ตั้งค่า Pin PWM และทิศทางให้เป็น Output สำหรับ Motor ทั้งสองตัว

pinMode(ENA_PIN, OUTPUT);

pinMode(IN1_PIN, OUTPUT);

pinMode(IN2_PIN, OUTPUT);

pinMode(ENB_PIN, OUTPUT);

pinMode(IN3_PIN, OUTPUT);

pinMode(IN4_PIN, OUTPUT);

// เริ่มต้นด้วยค่าเริ่มต้น

sendToMotorA();

sendToMotorB();

}

void loop()

{

Serial.println("Motors are stopped now");

Serial.println("Set direction FORWARD");

delay(2000);

setMotorDirectionForward(motorA);

setMotorDirectionForward(motorB);

Serial.println("Gradually increase motors speed to max");

increaseMotorsSpeed();

Serial.println("Motors are on full speed now");

delay(2000);

Serial.println("Gradually decrease motors speed to min");

decreaseMotorsSpeed();

Serial.println("Motors are stopped now");

Serial.println("Set direction BACKWARD");

delay(2000);

setMotorDirectionBackward(motorA);

setMotorDirectionBackward(motorB);

Serial.println("Gradually increase motors speed to max");

increaseMotorsSpeed();

Serial.println("Motors are on full speed now");

delay(2000);

Serial.println("Gradually decrease motors speed to min");

decreaseMotorsSpeed();

}

void sendToMotorA()

{

sendToMotor(motorA, ENA_PIN, IN1_PIN, IN2_PIN);

}

void sendToMotorB()

{

sendToMotor(motorB, ENB_PIN, IN3_PIN, IN4_PIN);

}

void increaseMotorsSpeed()

{

for (int speed = 0; speed <= 255; speed++) {

setMotorSpeed(motorA, speed);

setMotorSpeed(motorB, speed);

sendToMotorA();

sendToMotorB();

delay(20); // เพิ่มการหน่วงเวลาเล็กน้อยระหว่างการเปลี่ยนแปลง

}

}

void decreaseMotorsSpeed()

{

for (int speed = 255; speed >= 0; speed--) {

setMotorSpeed(motorA, speed);

setMotorSpeed(motorB, speed);

sendToMotorA();

sendToMotorB();

delay(20); // เพิ่มการหน่วงเวลาเล็กน้อยระหว่างการเปลี่ยนแปลง

}

}

หมายเหตุ: Snippet นี้เป็นส่วนหนึ่งของโปรเจกต์ Arduino ที่อยู่ใน GitHub repository ของเรา โดยมีการแยก Code ออกเป็นไฟล์ต่างๆ ตามความเหมาะสม

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: how-to-use-the-l298n-motor-driver-module-0bb697
450 บาท
PromptPay QR Code