ค้นหาโค้ด

บทเรียน 24/31: รถอัจฉริยะ ตอนที่ 2: การเคลื่อนที่ไปข้างหน้า ถอยหลัง ซ้ายและขวา และการควบคุมความเร็วของรถ

บทเรียนนี้เป็นส่วนหนึ่งของ: หลักสูตร Arduino ที่ใช้ชุดการเรียนรู้ 3-in-1 ของ SunFounder

บทเรียน 24/31: รถอัจฉริยะ ตอนที่ 2: การเคลื่อนที่ไปข้างหน้า ถอยหลัง ซ้ายและขวา และการควบคุมความเร็วของรถ

24-SunFounder-Car-Speed บนพื้นถนน

บทเรียนนี้เน้นไปที่ขั้นตอนที่สองของการสร้างรถอัจฉริยะของคุณ: การควบคุมการเคลื่อนที่โดยใช้โค้ด Arduino แม้ว่าโปรเจกต์แรกอาจทำให้รถเคลื่อนที่ได้ในแบบพื้นฐาน แต่คู่มือนี้จะสอนวิธีสั่งให้รถเคลื่อนที่ไปข้างหน้า ถอยหลัง เลี้ยวซ้าย เลี้ยวขวา และหยุดได้อย่างแม่นยำ คุณจะได้เรียนรู้วิธีควบคุมความเร็วของรถ ทำให้สามารถเร่งความเร็วและลดความเร็วได้อย่างนุ่มนวล นี่เป็นขั้นตอนพื้นฐานสำหรับโปรเจกต์หุ่นยนต์ใดๆ เนื่องจากเป็นการให้ตรรกะพื้นฐานแก่คุณเพื่อสร้างพฤติกรรมอัตโนมัติที่ซับซ้อนมากขึ้น

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000

การเชี่ยวชาญการควบคุมการเคลื่อนที่เหล่านี้เปิดโลกแห่งความเป็นไปได้ ต่อไปนี้คือการประยุกต์ใช้ความรู้ในทางปฏิบัติบางประการ:

  • หุ่นยนต์เดินตามเส้น: ใช้ฟังก์ชันเลี้ยวซ้ายและเลี้ยวขวาเพื่อให้หุ่นยนต์อยู่บนราง
  • ยานพาหนะหลบหลีกสิ่งกีดขวาง: เขียนโปรแกรมให้รถเคลื่อนที่ไปข้างหน้า หยุด และเลี้ยวเมื่อตรวจพบวัตถุในเส้นทาง
  • การสำรวจด้วยรีโมทคอนโทรล: รวมคำสั่งเหล่านี้เข้ากับโมดูลไร้สายเพื่อขับรถไปรอบๆ บ้านหรือสนามของคุณ
  • ระบบจัดส่งอัตโนมัติ: สร้างหุ่นยนต์ขนาดเล็กที่สามารถเคลื่อนที่ระหว่างจุดที่กำหนด โดยหยุดและเริ่มต้นตามความจำเป็น

ฮาร์ดแวร์และส่วนประกอบ

โปรเจกต์นี้สร้างต่อจากชุด Arduino 3-in-1 ของ SunFounder ไม่จำเป็นต้องมีส่วนประกอบเพิ่มเติมนอกเหนือจากชุดพื้นฐาน แต่คุณจะต้องเชื่อมต่อสายไฟเพิ่มเติมสี่เส้นเข้ากับ Arduino เพื่อควบคุมไดรเวอร์มอเตอร์ ส่วนประกอบที่จำเป็นคือ:

  • Arduino Uno (หรือบอร์ดที่เข้ากันได้)
  • โครงรถอัจฉริยะ SunFounder พร้อมมอเตอร์
  • บอร์ดไดรเวอร์มอเตอร์ (รวมอยู่ในชุด)
  • สายจัมเปอร์
  • ชุดแบตเตอรี่สำหรับรถ
  • สาย USB สำหรับการเขียนโปรแกรม
smarcar_turning_right  ด้านบน
smartcar_turning_left ด้านบน

คู่มือการเดินสายไฟ

การเดินสายไฟสำหรับโปรเจกต์นี้มีความสำคัญอย่างยิ่งต่อการควบคุมทิศทางของมอเตอร์แต่ละตัว วิดีโออธิบายว่าสายควบคุมมอเตอร์สี่เส้นจากบอร์ดไดรเวอร์เชื่อมต่อกับพิน 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] การทดสอบกลางแจ้งครั้งสุดท้ายและบทสรุป

ภาพ

26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
Smartcar turning left
Smartcar turning left
Smartcar turning right
Smartcar turning right
24 SunFounder Car speed on the pavement
24 SunFounder Car speed on the pavement
900-Lesson 24/31: Smart code speeds up
ภาษา: C++
/*
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);
}
901-Lesson 24/31: Smart code speeds up (Custome code)
ภาษา: C++
/*
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);
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไลบรารี Arduino (zip)