การใช้ Arduino UNO R3 กับ L298N ควบคุมมอเตอร์ อุปกรณ์ที่ต้องใช้ก็คือ
1. Arduino UNO R3 - Made in italy
2. Motor Drive Module L298N
3. Jumper (M2M) cable wire 40pcs 2.54mm 20cm Male to Male
H-Bridge เป็นโมดูลที่ใช้ในการควบคุมความเร็วและทิศทางของมอเตอร์ และยังสามารถนำไปประยุกต์ใช้กับ Project อื่นได้อีกด้วย เช่น ตัวหรี่ไฟในบ้าน หรือที่หรี่ไฟในไฟฉายตีกบ แต่การใช้หลอดใส้ทำให้เราเห็นการกระพริบน้อยมากกว่าใน Led
H-Bridge เป็นวงจรที่สามารถใช้ควบคุมกระแสได้ทั้งขั้วบวกและลบด้วยการควบคุม pulse width modulation (PWM) เป็นการควบคุมแบบ digital ที่มีการนำมาใช้กันมาก โดยส่วนมากเพื่อเป็นการประหยัดพลังงานและ สามารถควบคุม Out Put ได้ โดยมีการกระตุ้นอย่างต่อเนื่อง ซึ่งทำให้เกิดการสูญเสียพลังงานน้อยมาก กล่าวคือวงจรพวกนี้จะมีการปล่อยการสูญเสียพลังงานน้อยกว่าวงจรรุ่นเก่าๆ มาก โดยเฉพาะการควบคุมโวลต์หลอดกระแส out put
PWM(Pulse Width Modulation) คืออะไร
PWM คือเทคนิดการส่งสัญญาณแบบสวิต หรือ ส่งค่าดิจิตอล 0-1 โดยให้สัญญาณความถี่คงที่ การควบคุมระยะเวลาสัญญาณสูงและสัญญาณต่ำ ที่ต่างกัน ก็จะทำให้ค่าแรงดันเฉลี่ยของสัญญาณสวิต ต่างกันด้วย
สำหรับโมดุล PWM ของ Arduino มีความละเอียด 8 bit หรือ ปรับได้ 255 ระดับ ดังนั้นค่าสัญญาณ 0 โวลต์ถึง 5 โวลต์ จะถูกแสดงเป็นสัญญาณแบบดิจิตอล จะได้ 0 ถึง 255 ซึ่งเราสามารถเทียบสัดส่วนคำนวนจากเลขจริง เป็น เลขทางดิจิตอลได้
ตัวอย่าง
ถ้า 5V = 255
1.0v จะเท่ากับค่าเท่าไร
= 255/5.0V*1.0V
= 51
L298N Dual Full-bridge motor driver module (Red PCB) และการต่อวงจร กับ Arduino UNO R3 (ขา ENA และ ENB ถ้ามี Jumper ต่ออยู่ให้ถอดออก)
ภาพรวมการต่อวงจร
หมายเหตุ : จากการทดลองการต่อวงจร ตามรูปด้านล่าง ทดสอบ กับ บอร์ด Arduino UNO R3 ต่อกับ คอมพิวเตอร์ ผ่านทางสาย USB มอเตอร์ ทั้ง 2 ตัว สามารถ ทำงานได้ โดยไม่ต้อง ต่อ แบตเตอรี่ 9 V และ เมื่อทดลองถอดสาย USB จากคอมพิวเตอร์ออก แล้ว ป้อนไฟเข้าทางพอร์ต Power Supply ของ บอร์ด Arduino UNO R3 ก็สามารถทำงานได้ตามปรกติเช่นเดียวกัน
เปิดโปรแกรม Arduino (IDE) เขียน โค้ด และ Upload ไปยังบอร์ด Arduino UNO ดังนี้
// Motor A
int dir1PinA = 2;
int dir2PinA = 3;
int speedPinA = 6; // เพื่อให้ PWM สามารถควบคุมความเร็วมอเตอร์
// Motor B
int dir1PinB = 4;
int dir2PinB = 5;
int speedPinB = 7; // เพื่อให้ PWM สามารถควบคุมความเร็วมอเตอร์
void setup()
{
Serial.begin(9600);
//กำหนด ขา เพื่อใช้ในการควบคุมการทำงานของ Motor ผ่านทาง L298N
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
pinMode(dir1PinB,OUTPUT);
pinMode(dir2PinB,OUTPUT);
pinMode(speedPinB,OUTPUT);
}
void loop()
{
// Motor A
analogWrite(speedPinA, 255); //ตั้งค่าความเร็ว PWM ผ่านตัวแปร ค่าต่ำลง มอเตอร์จะหมุนช้าลง
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
// Motor B
analogWrite(speedPinB, 255); //ตั้งค่าความเร็ว PWM ผ่านตัวแปร ค่าต่ำลง มอเตอร์จะหมุนช้าลง
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
ผลการทำงานของโปรแกรม มอเตอร์ ทั้ง A และ B จะหมุนเดินหน้า (Forward) แสดงว่าการต่อวงจร และ การเขียนโปรแกรมของเรานั้นถูกต้อง