บทเรียน 24/31: รถอัจฉริยะ ตอนที่ 2: การเคลื่อนที่ไปข้างหน้า ถอยหลัง ซ้ายและขวา และการควบคุมความเร็วของรถ
บทเรียนนี้เน้นไปที่ขั้นตอนที่สองของการสร้างรถอัจฉริยะของคุณ: การควบคุมการเคลื่อนที่โดยใช้โค้ด Arduino แม้ว่าโปรเจกต์แรกอาจทำให้รถเคลื่อนที่ได้ในแบบพื้นฐาน แต่คู่มือนี้จะสอนวิธีสั่งให้รถเคลื่อนที่ไปข้างหน้า ถอยหลัง เลี้ยวซ้าย เลี้ยวขวา และหยุดได้อย่างแม่นยำ คุณจะได้เรียนรู้วิธีควบคุมความเร็วของรถ ทำให้สามารถเร่งความเร็วและลดความเร็วได้อย่างนุ่มนวล นี่เป็นขั้นตอนพื้นฐานสำหรับโปรเจกต์หุ่นยนต์ใดๆ เนื่องจากเป็นการให้ตรรกะพื้นฐานแก่คุณเพื่อสร้างพฤติกรรมอัตโนมัติที่ซับซ้อนมากขึ้น
การเชี่ยวชาญการควบคุมการเคลื่อนที่เหล่านี้เปิดโลกแห่งความเป็นไปได้ ต่อไปนี้คือการประยุกต์ใช้ความรู้ในทางปฏิบัติบางประการ:
- หุ่นยนต์เดินตามเส้น: ใช้ฟังก์ชันเลี้ยวซ้ายและเลี้ยวขวาเพื่อให้หุ่นยนต์อยู่บนราง
- ยานพาหนะหลบหลีกสิ่งกีดขวาง: เขียนโปรแกรมให้รถเคลื่อนที่ไปข้างหน้า หยุด และเลี้ยวเมื่อตรวจพบวัตถุในเส้นทาง
- การสำรวจด้วยรีโมทคอนโทรล: รวมคำสั่งเหล่านี้เข้ากับโมดูลไร้สายเพื่อขับรถไปรอบๆ บ้านหรือสนามของคุณ
- ระบบจัดส่งอัตโนมัติ: สร้างหุ่นยนต์ขนาดเล็กที่สามารถเคลื่อนที่ระหว่างจุดที่กำหนด โดยหยุดและเริ่มต้นตามความจำเป็น
ฮาร์ดแวร์และส่วนประกอบ
โปรเจกต์นี้สร้างต่อจากชุด Arduino 3-in-1 ของ SunFounder ไม่จำเป็นต้องมีส่วนประกอบเพิ่มเติมนอกเหนือจากชุดพื้นฐาน แต่คุณจะต้องเชื่อมต่อสายไฟเพิ่มเติมสี่เส้นเข้ากับ Arduino เพื่อควบคุมไดรเวอร์มอเตอร์ ส่วนประกอบที่จำเป็นคือ:
- Arduino Uno (หรือบอร์ดที่เข้ากันได้)
- โครงรถอัจฉริยะ SunFounder พร้อมมอเตอร์
- บอร์ดไดรเวอร์มอเตอร์ (รวมอยู่ในชุด)
- สายจัมเปอร์
- ชุดแบตเตอรี่สำหรับรถ
- สาย USB สำหรับการเขียนโปรแกรม
คู่มือการเดินสายไฟ
การเดินสายไฟสำหรับโปรเจกต์นี้มีความสำคัญอย่างยิ่งต่อการควบคุมทิศทางของมอเตอร์แต่ละตัว วิดีโออธิบายว่าสายควบคุมมอเตอร์สี่เส้นจากบอร์ดไดรเวอร์เชื่อมต่อกับพิน 5, 6, 9 และ 10 ของ Arduino พินเหล่านี้มีความพิเศษเพราะรองรับ Pulse Width Modulation (PWM) ซึ่งจำเป็นสำหรับการควบคุมความเร็ว
ในวิดีโอ ผู้สอนเชื่อมต่อสายไฟตามลำดับเฉพาะโดยใช้สายสีเหลืองและสีน้ำเงิน ดังแสดงในแผนภาพด้านล่าง
หมายเหตุด้านความปลอดภัยที่สำคัญที่กล่าวถึงในวิดีโอคือ ให้ถอดแหล่งจ่ายไฟของรถออก (สายสีแดงไปยัง 5V และสายสีดำไปยัง GND) ขณะเขียนโปรแกรม Arduino ผ่าน USB เพื่อป้องกันไม่ให้พอร์ต USB รับภาระเกินและอาจปิดระบบ
คำอธิบายโค้ด
โค้ดสำหรับบทเรียนนี้ถูกจัดโครงสร้างให้ง่ายต่อการแก้ไขและทำความเข้าใจ กุญแจสำคัญในการควบคุมรถอยู่ที่การกำหนดพินที่ด้านบนของสเก็ตช์ คุณสามารถเปลี่ยนค่าเหล่านี้ได้หากคุณตัดสินใจใช้พินอื่นบน Arduino ของคุณ
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
บรรทัดเหล่านี้กำหนดพิน Arduino ที่เชื่อมต่อกับอินพุตของไดรเวอร์มอเตอร์ in1 และ in2 ควบคุมมอเตอร์หนึ่งตัว ในขณะที่ in3 และ in4 ควบคุมมอเตอร์อีกตัวหนึ่ง โดยการตั้งค่าพินเหล่านี้เป็น HIGH หรือ LOW คุณจะควบคุมทิศทางการหมุนของมอเตอร์แต่ละตัว
เพื่อควบคุมความเร็วของรถ โค้ดใช้ฟังก์ชันที่กำหนดเองสองฟังก์ชัน: moveForward(int speed) และ moveBackwards(int speed) ฟังก์ชันเหล่านี้รับค่าจำนวนเต็มระหว่าง 0 ถึง 255 เป็นอาร์กิวเมนต์ ค่า 0 จะหยุดมอเตอร์ ในขณะที่ 255 คือความเร็วสูงสุด ตัวอย่างเช่น หากต้องการให้รถเคลื่อนที่ไปข้างหน้าด้วยความเร็วเต็มที่ คุณจะเรียกใช้ moveForward(255) หากต้องการให้เคลื่อนที่ถอยหลังช้าๆ คุณจะใช้ moveBackwards(100)
วิดีโอยังสาธิตลำดับ "การเร่งความเร็ว" และ "การลดความเร็ว" โดยใช้ลูป for นี่เป็นเทคนิคที่มีประสิทธิภาพสำหรับการเร่งความเร็วอย่างนุ่มนวล
for(int i=0;i<=255;i+=5){
moveForward(i);
delay(100);
}
ลูปนี้เริ่มต้นด้วย i ที่ 0 และเพิ่มขึ้นทีละ 5 ในแต่ละรอบจนถึง 255 ในแต่ละครั้ง จะเรียกใช้ moveForward(i) ซึ่งจะค่อยๆ เพิ่มความเร็วของรถ delay(100) ให้การหยุดชั่วคราว 100 มิลลิวินาทีในแต่ละขั้นความเร็ว ทำให้การเร่งความเร็วมองเห็นได้ชัดเจน ลูปที่คล้ายกันโดยมีค่า i ลดลงใช้เพื่อลดความเร็วของรถ
การสาธิตโปรเจกต์สด
ในวิดีโอ ผู้สอนสาธิตโปรเจกต์ในสองขั้นตอนหลัก ขั้นแรก เขาแสดงการเคลื่อนที่พื้นฐานของรถ โดยการโหลดโค้ด "move" รถจะดำเนินลำดับที่ตั้งโปรแกรมไว้ล่วงหน้า: เคลื่อนที่ไปข้างหน้าเป็นเวลาสองวินาที หยุด ถอยหลังเป็นเวลาสองวินาที หยุด เลี้ยวซ้าย และจากนั้นเลี้ยวขวา ซึ่งเป็นการยืนยันด้วยสายตาว่าการเดินสายไฟและตรรกะถูกต้อง
การสาธิตครั้งที่สองเน้นไปที่การควบคุมความเร็ว ผู้สอนโหลดโค้ด "เพิ่มความเร็ว" ซึ่งจะค่อยๆ เร่งความเร็วของรถไปข้างหน้าจนถึงความเร็วสูงสุด จากนั้นค่อยๆ ลดความเร็วลงจนหยุดนิ่ง จากนั้นเขาจะสาธิตเวอร์ชันที่มีความเร็วคงที่ โดยรถจะเคลื่อนที่ไปข้างหน้าที่ความเร็ว 255 หยุด แล้วถอยหลังด้วยความเร็วที่ช้าลงที่ 100 โดยค่าต่างๆ จะถูกพิมพ์ไปยัง Serial Monitor เพื่อตรวจสอบ
บทต่างๆ
- [00:00] แนะนำการควบคุมการเคลื่อนที่ของรถ
- [01:44] การเตรียมการเดินสายไฟสำหรับการควบคุมด้วยโค้ด
- [02:07] สาธิตการเคลื่อนที่ไปข้างหน้าและถอยหลัง
- [03:18] สาธิตการเลี้ยวซ้ายและขวา
- [05:05] การเชื่อมต่อสายไฟเข้ากับพินของ Arduino
- [07:00] คำอธิบายโค้ดสำหรับการควบคุมทิศทาง
- [11:44] แนะนำการควบคุมความเร็ว
- [12:16] คำอธิบายโค้ดสำหรับการเพิ่มความเร็วแบบค่อยเป็นค่อยไป
- [14:45] การใช้ Serial Monitor เพื่อการดีบัก
- [17:10] การสาธิตการควบคุมความเร็วแบบสด
- [19:45] การทดสอบกลางแจ้งครั้งสุดท้ายและบทสรุป
/*
Lesson 24/31: Smart code speeds up
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM
*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
Serial.println("SunFounder Arduino Course");
Serial.println("Lesson 3: Speed up");
Serial.println("www.Robojax.com");
}
void loop() {
moveForward(255);
Serial.print("Forward at: ");
Serial.println(255);
delay(5000);//for 5 seconds
Serial.println("Stopped ");
moveForward(0);//stop the car
delay(2000);//for 2 seconds
moveBackwards(100);
Serial.print("Reverse at: ");
Serial.println(100);
delay(5000);//for 5 seconds
Serial.println("Stopped ");
moveForward(0);//stop the car
delay(2000);//for 2 seconds
}
void moveForward(int speed) {
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
void moveBackwards(int speed) {
analogWrite(in1, speed);
analogWrite(in2, 0);
analogWrite(in3, 0);
analogWrite(in4, speed);
}
/*
Lesson 24/31: Smart code speeds up (custom code)
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM
*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
Serial.println("SunFounder Arduino Course");
Serial.println("Lesson 3: Speed up");
Serial.println("www.Robojax.com");
}
void loop() {
Serial.println("Loop 1: Speeding Up");
for(int i=0;i<=255;i+=5){
moveForward(i);
Serial.print("i= ");
Serial.println(i);
delay(100);
}
Serial.println("Loop 2: Slowing down ");
for(int i=255;i>=0;i-=5){
moveForward(i);
Serial.print("i= ");
Serial.println(i);
delay(100);
}
}
void moveForward(int speed) {
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
Common Course Links
Common Course Files
สิ่งที่คุณอาจต้องการ
-
อเมซอน5V DC motor on Amazonamzn.to
-
อเมซอน5V DC motor on eBayebay.us
-
อเมซอนSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
อเมซอน
-
อเมซอน
-
อเมซอน
-
อเมซอน
-
อาลีเอ็กซ์เพรส5V DC motor on AliExpresss.click.aliexpress.com
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ภายนอกPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
ไฟล์📁
ไลบรารี Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB