การใช้ Arduino UNO R3 กับ L298N ควบคุมมอเตอร์
การใช้ 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 ต่ออยู่ให้ถอดออก)
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 ก็สามารถทำงานได้ตามปรกติเช่นเดียวกัน
โปรแกรมที่จะเขียนต่อไปนี้ แสดงการสั่งให้ Motor A และ Motor B หมุนขึ้นหน้า (Forward) เพื่อทดสอบการต่อวงจร และ เข้าใจคำสั่งในการควบคุม Motor โดย บอร์ด Arduino UNO ขา 2 , 3 , 6 จะควบคุมมอเตอร์ A และ ขา 4 , 5 , 7 จะควบคุมมอเตอร์ B
เปิดโปรแกรม 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);
}
เปิดโปรแกรม 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) แสดงว่าการต่อวงจร และ การเขียนโปรแกรมของเรานั้นถูกต้อง
มาดูคำสั่งอื่นๆกันบ้างครับ
//ให้ Motor A ถอยหลัง (Reverse)
analogWrite(speedPinA, 255);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
//ให้ Motor B ถอยหลัง (Reverse)
analogWrite(speedPinB, 255);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
//ให้ Motor A หยุด (Freespin)
analogWrite(speedPinA, 0);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
//ให้ Motor B หยุด (Freespin)
analogWrite(speedPinB, 0);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
นาย สุธรรม แสงทรง
อ้างอิง
http://www.robotsiam.com/article/7/การใช้-arduino-uno-r3-กับ-l298n-ควบคุมมอเตอร์
ไม่มีความคิดเห็น:
แสดงความคิดเห็น