ภาพรวมบทเรียน
บทที่ 9 Arduino และ Motor เป็นบทเรียนเกี่ยวกับการควบคุมการเคลื่อนที่ในระบบ IoT โดยมอเตอร์แต่ละประเภทมีลักษณะการใช้งานต่างกัน เช่น DC Motor เหมาะกับงานหมุนต่อเนื่อง, Servo Motor เหมาะกับงานควบคุมตำแหน่งหรือทิศทาง และ Stepper Motor เหมาะกับงานควบคุมตำแหน่งอย่างละเอียด
จากสไลด์ บทนี้แบ่งเป็น 4 หัวข้อหลัก ได้แก่ อุปกรณ์ที่ต้องใช้, โปรแกรมมอเตอร์ DC หมุนซ้าย-ขวา, โปรแกรมมอเตอร์ Servo หมุน 360 องศา และโปรแกรมควบคุมการหมุนด้วยสเต็ปมอเตอร์
Learning Objectives
หลังเรียนบทนี้ ผู้เรียนควรสามารถเลือกชนิดมอเตอร์และเขียนโปรแกรมควบคุมการหมุนได้อย่างเหมาะสม
ภาพรวมการควบคุมมอเตอร์ด้วย Arduino
9.1 อุปกรณ์ที่ต้องใช้
สไลด์เริ่มจากการทบทวนอุปกรณ์พื้นฐาน เช่น Arduino Uno R3, Breadboard และสาย Jumper จากนั้นเพิ่มอุปกรณ์เฉพาะสำหรับการควบคุมมอเตอร์ ได้แก่ L298N Motor Drive Module, DC Motor, SG90 Micro Servo Motor, ULN2003 Driver Board และ 5V 4-phase Stepper Motor
Arduino Uno R3
บอร์ดควบคุมหลัก ใช้ส่งสัญญาณไปยัง Driver หรือมอเตอร์
Breadboard
ใช้ทดลองวงจรเบื้องต้นโดยไม่ต้องบัดกรี
Jumper Wire
ใช้เชื่อมต่อ Arduino, Motor Driver และอุปกรณ์ต่าง ๆ
L298N Motor Drive Module
รับคำสั่งจาก Arduino เพื่อควบคุมทิศทางและความเร็วของ DC Motor
DC Motor
มอเตอร์ที่หมุนได้ทั้งซ้ายและขวา ควบคุมความเร็วด้วยค่าสัญญาณ 0–255
SG90 Micro Servo Motor
ใช้ควบคุมทิศทางการหมุนซ้าย ขวา หยุด และปรับความเร็วด้วย Pulse Width
ULN2003 Driver Board
บอร์ดขับ Stepper Motor สำหรับควบคุมการจ่ายไฟไปยังขดลวดแต่ละเฟส
5V 4-phase Stepper Motor
มอเตอร์ที่หมุนเป็น Step เหมาะกับงานควบคุมตำแหน่งและมุมอย่างแม่นยำ
9.2 ประเภทมอเตอร์และแนวคิดการควบคุม
มอเตอร์ในบทนี้แบ่งได้เป็น 3 กลุ่มหลัก โดยแต่ละกลุ่มเหมาะกับงานที่แตกต่างกัน
| ชนิดมอเตอร์ | ลักษณะเด่น | อุปกรณ์ขับ | ตัวอย่างงาน |
|---|---|---|---|
| DC Motor | หมุนต่อเนื่อง ควบคุมทิศทางซ้าย/ขวาและความเร็วได้ | L298N | พัดลม รถหุ่นยนต์ สายพาน |
| Servo Motor | ควบคุมทิศทางหรือการหมุนด้วยสัญญาณ Pulse | ต่อกับ Arduino โดยตรงในงานขนาดเล็ก | แขนกล ฝาถังขยะ ประตูสัตว์เลี้ยง |
| Stepper Motor | ควบคุมตำแหน่งและมุมได้ละเอียด หมุนเป็น Step | ULN2003 | เครื่องพิมพ์ สแกนเนอร์ งานควบคุมตำแหน่ง |
9.3 โปรแกรม DC Motor หมุนซ้าย–ขวา
สไลด์ตัวอย่าง 9.1 ใช้ Arduino UNO R3 ควบคุม DC Motor ผ่าน L298N Motor Drive Module โดยต่อขา Arduino 2 ไปยัง IN3 และขา 3 ไปยัง IN4 ของ Motor Driver จากนั้นต่อ OUT3/OUT4 ไปยังสายของ DC Motor
อุปกรณ์ที่ต้องใช้
- Arduino UNO R3
- บอร์ดทดลอง
- สายไฟ Jumper ผู้–ผู้ และ ผู้–เมีย
- L298N Motor Drive Module
- DC Motor พร้อมใบพัด 80 mm
ภาพประกอบการต่อ Arduino + L298N + DC Motor
9.4 Code โปรแกรม DC Motor
โค้ดจากสไลด์กำหนดให้ขา 2 และ 3 ของ Arduino ควบคุมทิศทางมอเตอร์ เมื่อขา 2 เป็น HIGH และขา 3 เป็น LOW มอเตอร์จะหมุนทิศหนึ่ง จากนั้นหยุด และสลับทิศทางโดยให้ขา 2 เป็น LOW และขา 3 เป็น HIGH
int Motor_Pin2 = 2;
int Motor_Pin3 = 3;
void setup() {
pinMode(Motor_Pin2, OUTPUT);
pinMode(Motor_Pin3, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(Motor_Pin2, HIGH);
digitalWrite(Motor_Pin3, LOW);
delay(3000);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, LOW);
delay(3000);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, HIGH);
delay(3000);
}9.5 โปรแกรม Servo Motor หมุน 360 องศา
สไลด์ตัวอย่าง 9.2 ใช้ SG90 Micro Servo Motor แบบหมุนต่อเนื่อง 360 องศา โดยควบคุมด้วยคำสั่ง writeMicroseconds() ซึ่งช่วงค่าประมาณ 1500 microseconds จะหยุดหมุน ค่าน้อยกว่า 1500 จะหมุนทิศหนึ่ง และค่ามากกว่า 1500 จะหมุนอีกทิศหนึ่ง
| ค่า Pulse โดยประมาณ | ผลลัพธ์ |
|---|---|
| 0–1500 microseconds | หมุนทิศทางหนึ่ง ค่ายิ่งน้อยยิ่งหมุนเร็ว |
| ประมาณ 1500 microseconds | หยุดหมุน |
| 1500–3000 microseconds | หมุนอีกทิศทางหนึ่ง ค่ายิ่งมากยิ่งหมุนเร็ว |
วิธีการต่อวงจรตามสไลด์
- ต่อขา 3 ของ Arduino เข้ากับสายสีส้มของ Servo
- ต่อขา A5 เข้ากับสายสีแดง
- ต่อขา GND เข้ากับสายสีน้ำตาล
ภาพประกอบการต่อ Arduino + SG90 Servo
9.6 Code โปรแกรม Servo
#include <Servo.h>
Servo servo_pin;
void setup() {
servo_pin.attach(3);
}
void loop() {
servo_pin.writeMicroseconds(0);
delay(3000);
servo_pin.writeMicroseconds(1450);
delay(3000);
servo_pin.writeMicroseconds(3000);
delay(3000);
}9.7 โปรแกรมควบคุมการหมุนด้วย Stepper Motor
Stepper Motor เป็นมอเตอร์ที่เหมาะกับการควบคุมตำแหน่งและมุมอย่างแม่นยำ เพราะหมุนเป็นจังหวะหรือ Step โดยหลักการคือจ่ายไฟให้ขดลวดทีละชุดเพื่อสร้างสนามแม่เหล็กผลักแกนกลางให้หมุน
สไลด์อธิบายว่าการจ่ายไฟให้ขดลวดทั้ง 4 มุมอย่างถูกลำดับจะทำให้มอเตอร์หมุนได้ และหากเปลี่ยนวิธีจ่ายไฟสามารถเพิ่มความละเอียดของการหมุนได้ เช่น จาก 90 องศาเป็น 45 องศา
อุปกรณ์ที่ต้องใช้
- Arduino UNO R3
- สายไฟ Jumper ผู้–เมีย
- Driver Board ULN2003
- 5V 4-phase Stepper Motor
ภาพประกอบการต่อ Arduino + ULN2003 + Stepper Motor
9.8 Code โปรแกรม Stepper Motor
โค้ดจากสไลด์ใช้ Serial Monitor รับคำสั่งจากผู้ใช้ โดยกำหนดให้พิมพ์ 0 เพื่อหยุดหมุน, 1 เพื่อหมุนขวา และ 2 เพื่อหมุนซ้าย
int Motor_Pin1 = 8;
int Motor_Pin2 = 9;
int Motor_Pin3 = 10;
int Motor_Pin4 = 11;
int Motor_Speed = 4;
char val = '0';
void setup() {
pinMode(Motor_Pin1, OUTPUT);
pinMode(Motor_Pin2, OUTPUT);
pinMode(Motor_Pin3, OUTPUT);
pinMode(Motor_Pin4, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
val = Serial.read();
Serial.println(val);
}
if (val == '1') {
rightspin(); // หมุนวนขวา
}
if (val == '2') {
leftspin(); // หมุนวนซ้าย
}
if (val == '0') {
digitalWrite(Motor_Pin1, LOW);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, LOW);
digitalWrite(Motor_Pin4, LOW);
}
}
void rightspin() {
digitalWrite(Motor_Pin1, HIGH);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, LOW);
digitalWrite(Motor_Pin4, LOW);
delay(Motor_Speed);
digitalWrite(Motor_Pin1, LOW);
digitalWrite(Motor_Pin2, HIGH);
digitalWrite(Motor_Pin3, LOW);
digitalWrite(Motor_Pin4, LOW);
delay(Motor_Speed);
digitalWrite(Motor_Pin1, LOW);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, HIGH);
digitalWrite(Motor_Pin4, LOW);
delay(Motor_Speed);
digitalWrite(Motor_Pin1, LOW);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, LOW);
digitalWrite(Motor_Pin4, HIGH);
delay(Motor_Speed);
}
void leftspin() {
digitalWrite(Motor_Pin1, LOW);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, LOW);
digitalWrite(Motor_Pin4, HIGH);
delay(Motor_Speed);
digitalWrite(Motor_Pin1, LOW);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, HIGH);
digitalWrite(Motor_Pin4, LOW);
delay(Motor_Speed);
digitalWrite(Motor_Pin1, LOW);
digitalWrite(Motor_Pin2, HIGH);
digitalWrite(Motor_Pin3, LOW);
digitalWrite(Motor_Pin4, LOW);
delay(Motor_Speed);
digitalWrite(Motor_Pin1, HIGH);
digitalWrite(Motor_Pin2, LOW);
digitalWrite(Motor_Pin3, LOW);
digitalWrite(Motor_Pin4, LOW);
delay(Motor_Speed);
}ภาพประกอบ: คำสั่งผ่าน Serial Monitor
9.9 ตัวอย่างการประยุกต์ใช้ Motor ในโครงงาน IoT
ช่วงท้ายสไลด์มีตัวอย่างการนำมอเตอร์ไปประยุกต์ใช้ในโครงงานจริง เช่น ถังขยะอัตโนมัติ และ บ้านแมว โดยใช้ Sensor ตรวจจับสถานะ แล้วใช้ Servo Motor ควบคุมการเปิด–ปิด พร้อมแจ้งเตือนผ่าน LINE Notify หรือระบบแจ้งเตือนอื่น
ภาพประกอบ: ถังขยะอัตโนมัติ
ภาพประกอบ: บ้านแมวอัจฉริยะ
ต้องการทำโครงงาน IoT ที่มี Motor ใช้งานจริง?
Siam2Dev ช่วยออกแบบระบบควบคุม Motor, Servo, Stepper, Relay, Sensor, Dashboard และระบบแจ้งเตือน สำหรับ Smart Home, Smart Farm, หุ่นยนต์ และงานวิจัยเชิงประยุกต์
สรุปบทเรียน
บทที่ 9 ช่วยให้ผู้เรียนเข้าใจการควบคุมมอเตอร์ไฟฟ้าหลายชนิดด้วย Arduino ตั้งแต่ DC Motor ที่ต้องใช้ L298N เพื่อควบคุมทิศทาง, Servo Motor ที่ควบคุมด้วย Pulse และ Stepper Motor ที่ควบคุมตำแหน่งด้วยลำดับการจ่ายไฟให้ขดลวด ซึ่งเป็นพื้นฐานสำคัญของหุ่นยนต์ ระบบอัตโนมัติ และโครงงาน IoT ที่มีการเคลื่อนไหว
แบบฝึกหัดท้ายบท
- อธิบายหน้าที่ของ L298N Motor Drive Module ในการควบคุม DC Motor
- เขียนตารางการต่อขา Arduino กับ L298N และ DC Motor ตามตัวอย่างในบทเรียน
- ปรับโค้ด DC Motor ให้หมุนซ้าย 5 วินาที หยุด 2 วินาที แล้วหมุนขวา 5 วินาที
- อธิบายความหมายของค่า
writeMicroseconds(0),1450และ3000ในโปรแกรม Servo - อธิบายหลักการทำงานของ Stepper Motor และเหตุผลที่ควบคุมตำแหน่งได้แม่นยำ
- แก้โค้ด Stepper Motor ให้รับคำสั่งจาก Serial Monitor เป็นตัวอักษร R, L และ S แทน 1, 2 และ 0
- ออกแบบโครงงานถังขยะอัตโนมัติ โดยระบุ Sensor, Motor, Output และระบบแจ้งเตือนที่ต้องใช้
- เปรียบเทียบว่า DC Motor, Servo Motor และ Stepper Motor เหมาะกับงานแบบใดบ้าง