กลับไปหน้ารวมไฟล์
color-following-car-6bb768.md

ฉันสงสัยมาตลอดว่าการสร้างรถยนต์ไร้คนขับนั้นต้องทำอย่างไร ดังนั้นสำหรับโปรแกรมแรกของฉัน ฉันจึงตัดสินใจลองทำดู รถจะวิ่งตามเส้นสีน้ำเงิน และเมื่อเซ็นเซอร์ตัวใดตัวหนึ่งตรวจจับสีแดงได้ รถก็จะเลี้ยวไปในทิศทางตรงกันข้าม

แผ่นด้านหลังรถเป็นที่ที่ฉันติดตั้งแบตเตอรี่พร้อมกับวงจรป้องกันแบตเตอรี่

ตัวถัง (Chassis) ซื้อมาจากอินเทอร์เน็ต แต่ไม่จำเป็นต้องเป็นรุ่นนี้

คำอธิบายโปรแกรม:

1. การกำหนดค่า:

1.1 มอเตอร์:

#include<AFMotor.h>
AF_DCMotormotor1(1, MOTOR12_1KHZ);
AF_DCMotormotor2(3, MOTOR34_1KHZ);
AF_DCMotormotor3(2, MOTOR12_1KHZ);
AF_DCMotormotor4(4, MOTOR34_1KHZ);

บรรทัดแรกคือการ Include ไลบรารี AFMotor บรรทัดที่ 2-4 คือการกำหนดค่ามอเตอร์ต่าง ๆ

1.2 เซ็นเซอร์สี:

const int s0 = A8; //Conection for Sensor
const int s1 = A9;
const int s2L = A11; //Left Sensor
const int s3L = A10;
const int outL = A12;
int redL =0;
int greenL= 0;
int blueL =0;
const int s2R = A14; //Right Sensor
const int s3R = A13;
const int outR = A15;
int redR =0;
int greenR= 0;
int blueR =0;

"A9" และ "A8" เป็นเอาต์พุตสำหรับแสงทั่วไปของ Color Sensor

"s2" และ "s3" คืออินพุตของเซ็นเซอร์ โดยแต่ละเซ็นเซอร์จะมีพอร์ตดังกล่าว ตัวอักษรที่อยู่ท้ายสุดใช้ระบุตำแหน่ง โดย L คือ Left (ซ้าย) และ R คือ Right (ขวา)

out คือเอาต์พุตความถี่ของเซ็นเซอร์เช่นกัน โดยมีทั้ง Left และ Right ดูข้อมูลเพิ่มเติม ที่นี่.

ตัวแปรสำหรับสี Red (แดง), Blue (น้ำเงิน) และ Green (เขียว) ก็มีสองชุดเช่นกัน โดยความแตกต่างคือตัวอักษรสุดท้าย L และ R

1.3 การตรวจจับ:

int sensor_left = 0;
int sensor_right = 0;

ตัวแปรสองตัวนี้ใช้สำหรับกรณีที่รถตรวจจับสีที่ควรติดตามได้ รายละเอียดเพิ่มเติมจะกล่าวถึงภายหลัง

2. การตั้งค่า:

ต่อไปคือ `void Setup()`

2.1 การสื่อสารแบบ Serial

สิ่งแรกคือเราเปิดใช้งานการสื่อสารแบบ Serial

Serial.begin(9600); //Serielle Kommunikation 

2.2 เซ็นเซอร์สี:

Color Sensor มีเอาต์พุตหลายตัว เอาต์พุตทั่วไปคือ "s0" และ "s1"

pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);

สองบรรทัดแรกตั้งค่าขา "s1" และ "s0" เป็นโหมดเอาต์พุต (OUTPUT)

สองบรรทัดสุดท้ายตั้งค่าเอาต์พุตเป็น HIGH เพื่อให้ LED เปิดอยู่ตลอดเวลา

pinMode(s2L, OUTPUT);
pinMode(s3L, OUTPUT);
pinMode(outL, INPUT);
pinMode(s2R, OUTPUT);
pinMode(s3R, OUTPUT);
pinMode(outR, INPUT);

ตอนนี้เราตั้งค่าขาอื่น ๆ โดยขา "s2" และ "s3" ต้องตั้งค่าเป็นโหมดเอาต์พุต (OUTPUT) และขา "out" ต้องตั้งค่าเป็นโหมดอินพุต (INPUT)

3. โปรแกรมหลัก

ตอนนี้มาถึงส่วนหลักแล้ว

3.1 การเรียกใช้ฟังก์ชัน Color

สิ่งแรกคือการเรียกใช้ฟังก์ชัน `color()` ฟังก์ชันนี้จะถูกกำหนดไว้ท้ายโปรแกรม

color();

3.2 การตรวจจับถนน

ในส่วนนี้ เราจะเขียนโปรแกรมสำหรับการตรวจจับถนน เป็นส่วนที่ตรวจสอบว่าถนนอยู่ใต้รถหรือไม่ เราจะทำสิ่งนี้ด้วยฟังก์ชัน `If` ง่ายๆ

if(blueL <= 10 && redL >=11 && greenL >= 11 && blueL < redL && blueL <greenL)
{
sensor_left = 1;
}
else
{
sensor_left = 0;
}
}

เพื่อให้ตัวแปร "sensor_left" เปลี่ยนเป็นสัญญาณ HIGH เงื่อนไขต่อไปนี้ต้องเป็นจริง:

  • ตัวแปร "blueL" ต้องมีค่าน้อยกว่าหรือเท่ากับ 10
  • ตัวแปร "redL" และ "greenL" ต้องมีค่ามากกว่าหรือเท่ากับ 11
  • และ "blueL" ต้องมีค่าน้อยกว่า "redL" และ "greenL"

มิฉะนั้น ตัวแปร "sensor_left" จะมีค่าเป็น 0

โค้ดสำหรับเซ็นเซอร์ Right (ขวา) เหมือนกันทุกประการ ความแตกต่างเพียงอย่างเดียวคือตัว "L" และ "left" จะต้องเปลี่ยนเป็น "R" และ "right" สำหรับเซ็นเซอร์อีกตัวหนึ่ง

3.3 การขับเคลื่อน

ตอนนี้มาถึงส่วนที่สำคัญที่สุดของโปรแกรม นั่นคือส่วนของการขับเคลื่อน

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

รายละเอียดทางเทคนิคเพิ่มเติม

ระบบการกำหนดเป้าหมายด้วยภาพ

หุ่นยนต์นี้ใช้สีเป็นสัญญาณนำทางหลัก

  • เซ็นเซอร์ตรวจจับ: โดยทั่วไปจะใช้ TCS3200 หรือ TCS34725 Color Sensor เซ็นเซอร์จะแปลงแสงเป็นความถี่ ทำให้ Arduino สามารถระบุสีที่โดดเด่นที่อยู่หน้ารถได้
  • ตรรกะการไล่ตาม: Arduino จะคำนวณความแตกต่างระหว่าง "สีเป้าหมาย" (เช่น Red) กับค่าที่อ่านได้ในปัจจุบัน หากตรงกัน รถจะเคลื่อนที่ไปข้างหน้าโดยใช้ L298N motor driver

อัลกอริทึมการนำทาง

  • โหมดค้นหา: หากสีเป้าหมายหายไป รถจะทำการหมุน 360 องศา จนกว่าเซ็นเซอร์จะตรวจจับสัญญาณได้อีกครั้ง
  • การสอบเทียบ (Calibration): เมื่อเริ่มต้น ผู้ใช้จะ "สอน" รถว่าควรติดตามสีใดโดยการวางการ์ดสีไว้หน้าเซ็นเซอร์ ซึ่งทำให้โปรเจกต์นี้มีการโต้ตอบสูงและแสดงให้เห็นถึงพื้นฐานของการติดตามเป้าหมายในวิทยาการหุ่นยนต์

ข้อมูล Frontmatter ดั้งเดิม

title: "Color Following Car"
description: "Ever wanted a car the drives semi-autonomously? There you have it! You only need two diffrent colored lines and it easy to programm it."
author: "Maxconnor"
category: "Motors & Robotics"
tags:
  - "fuduino"
  - "arduino"
  - "cars"
  - "color"
  - "selfdriving"
  - "tesla"
views: 15114
likes: 11
price: 2450
difficulty: "Intermediate"
components:
  - "1x Breadboard (generic)"
  - "1x Soldering iron (generic)"
  - "3x Color Sensor"
  - "1x Motor Shield V1"
  - "1x 9V battery (generic)"
  - "4x DC motor (generic)"
tools: []
apps:
  - "1x Arduino Web Editor"
  - "1x Arduino IDE"
downloadableFiles:
  - "https://create.arduino.cc/editor/Maxconnor/5b944983-ab2a-4210-b757-f8f09ac12d19/preview"
  - "https://create.arduino.cc/editor/Maxconnor/5b944983-ab2a-4210-b757-f8f09ac12d19/preview"
documentationLinks: []
passwordHash: "c5f4db3f5225befd8f1725cb675fe9deb3cd553a676f99a22fcf6c115af79198"
encryptedPayload: "U2FsdGVkX1+lIGk7C2fZhYHmrPuS5z5mN4MqQ4EM0b0jnwnQCUNmFvauCwnhQv/O4071TeltmoGKNR0NKRzWOUe5J6tUTuKJ/MZPBJYofEdy3CUhnVmc0faec95Ynehx"
seoDescription: "Build a semi-autonomous Color Following Car using two colored lines. Easy to program and perfect for Arduino beginners."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/color-following-car-6bb768_cover.jpg"
lang: "th"