สร้าง Line Follower Robot for Science Fair Project

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





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

โดย navneet sajwan



Line Follower Robot คืออะไร

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

ผู้ติดตามไลน์ (LFRs) ยังเป็นรถหุ่นยนต์อิสระที่นำทางโดยเซ็นเซอร์ตั้งแต่หนึ่งตัวขึ้นไปและเส้นทางเส้นสีดำหรือสีขาว เป็นพื้นฐานของรถยนต์ขับเคลื่อนด้วยตนเองสมัยใหม่



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

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

ส่วนประกอบที่ต้องการ:

Arduino uno

แชสซี

มอเตอร์ที่ใช้แบตเตอรี่ (b.o.) สองตัวและยางที่เข้ากันได้

ลูกละหุ่ง

เซ็นเซอร์อินฟราเรดสองตัว

โมดูลไดรเวอร์มอเตอร์

พาวเวอร์ซัพพลาย

ซอฟต์แวร์ Arduino IDE

ตอนนี้เรามาดูส่วนประกอบของเรา:

ARDUINO ONE : ลองนึกภาพว่ามันเป็นห้องควบคุมของหุ่นยนต์ของเราตอนนี้มีบอร์ดพัฒนาจำนวนมากที่ได้รับการพิจารณาสำหรับโครงการนี้ แต่ Arduino UNO นั้นไม่ตรงกับตัวอื่น ไม่ใช่ว่าตัวเอกของเราจะเหนือกว่าในแง่ของคุณสมบัติหลายมิติ

หากเป็นเช่นนั้น Raspberry Pi และ Intel Edison จะตีกันระหว่างดวงตา ข้อโต้แย้งที่น่าสนใจที่สุดที่นำไปสู่การเลือก Arduino UNO เกิดจากการรวมกันของคุณสมบัติราคาขนาดและข้อกำหนดสำหรับโครงการ

สาเหตุที่เกี่ยวข้องบางประการ ได้แก่ :

ขนาด : มันค่อนข้างเล็กเมื่อเทียบกับบอร์ดพัฒนาที่ใช้ Atmega16 หรือ Atmega8 กินพื้นที่บนแชสซีเพียงเล็กน้อยคุณจึงได้บอทที่กะทัดรัดและสะดวกสบาย

สิ่งนี้มีความสำคัญอย่างยิ่งในการแข่งขันหุ่นยนต์ เชื่อฉันว่าคุณคงเกลียดการโรมมิ่งไปรอบ ๆ กับบอทตัวใหญ่ที่น่าเกลียดเปลี่ยนสถานที่ทั้งวัน

ขนาดที่เล็กลงหุ่นยนต์เร็วขึ้นและการหมุนมีประสิทธิภาพมากขึ้น

คณะกรรมการการป้องกันที่ดีที่สุด : ไม่ต้องสงสัยเลยว่า Arduino UNO มีคุณสมบัติที่ดีที่สุดสำหรับ การสร้างต้นแบบ . เมื่อวงจรของคุณเข้าที่และโครงการของคุณทำงานได้อย่างสมบูรณ์คุณสามารถแทนที่ด้วยสิ่งที่เล็กกว่าและถูกกว่าเช่น Arduino Nano และ Attiny85 ic

สำหรับผู้ที่สร้างผู้ติดตามโครงการในวิทยาลัยฉันขอแนะนำให้เปลี่ยน UNO ด้วย Nano ในตอนท้าย

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

ควรมีน้ำหนักเบาและแข็งแรง

สำหรับโครงการจะดีกว่าถ้าคุณซื้อจากตลาด แต่หากคุณกำลังเตรียมพร้อมสำหรับการแข่งขันฉันขอแนะนำให้คุณปรับแต่งของคุณเองโดยคำนึงถึงขนาดและข้อกำหนดของการแข่งขัน

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

ทำให้แชสซีของคุณต่ำที่สุดเท่าที่จะทำได้ซึ่งจะช่วยให้บอทมีเสถียรภาพ

มอเตอร์ : ใช้แบตเตอรี่น้ำหนักเบา (B.O. ) d.c. มอเตอร์

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

เหตุผลที่เลือกใช้ระบบขับเคลื่อนสามล้อมากกว่า 4 ล้อเนื่องจากมีการเลี้ยวที่เร็วกว่า คุณอาจสังเกตเห็นรถลากที่วิ่งผ่านการจราจรเหมือนสัตว์เลื้อยคลาน เช่นเดียวกับกรณีของหุ่นยนต์ของเรา

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

เซนเซอร์เป็นพื้นฐานอย่างยิ่งสำหรับหุ่นยนต์ทุกตัว ถ้า arduino เป็นสมองของบอทเซ็นเซอร์ก็อาจมีบทบาทเป็นดวงตาเช่นกัน ข้อมูลบางส่วนเกี่ยวกับเซ็นเซอร์มีดังนี้

เซ็นเซอร์จะต้องวางในลักษณะที่นำหน้าไปที่พื้น

ควรวางไว้ที่ส่วนหน้าสุดของบอทของคุณ

ระยะห่างขั้นต่ำระหว่างพวกเขาต้องมากกว่าความกว้างของเส้นสีดำ

คณะกรรมการขับมอเตอร์ : ตัวขับมอเตอร์เป็นวงจรบัฟเฟอร์ที่รับสัญญาณแรงดันไฟฟ้าต่ำเพื่อเปิดเครื่องมอเตอร์ที่ต้องการแรงดันไฟฟ้าสูงขึ้น

ในกรณีของเรา Arduino สามารถให้แรงดันไฟฟ้าเพียงพอที่จะขับเคลื่อนมอเตอร์ แต่ไม่สามารถจ่ายกระแสไฟได้เพียงพอ หมุด 5v และ GND ของ Arduino UNO มีพิกัดกระแส 200mA ในขณะที่พิน GPIO ใด ๆ มีพิกัด 40 mA นี่เป็นวิธีที่ต่ำกว่ามอเตอร์สตาร์ทและมอเตอร์กระแสไฟฟ้าที่เราต้องการ

มีไดรเวอร์มอเตอร์สองตัวที่ฉันชอบสำหรับโครงการนี้: L298N และ L293D ทั้งสองคนเหมาะสมกับการทำโปรเจ็กต์นี้ไม่แพ้กัน

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

แหล่งจ่ายไฟ :

ใช้อะแดปเตอร์ 12 โวลต์หรือแบตเตอรี่ (ไม่เกิน 12 โวลต์)

ตำแหน่งของส่วนประกอบ (จากด้านหน้าไปด้านหลัง):

เซ็นเซอร์ที่ส่วนหัวของบอทของคุณ

ลูกล้ออยู่ตรงกลาง

มอเตอร์และยางเป็นเส้นเดียวที่ด้านหลัง

การเชื่อมต่อ:

SENSORS ถึง ARDUINO :

เชื่อมต่อขาเซ็นเซอร์เข้ากับขา Arduino ตามที่แสดง

ขาเซนเซอร์ขา Arduino
VCC (5 โวลต์)5V
GND (G)GND
เซ็นเซอร์ซ้ายออก (DO)พิน 6
เซ็นเซอร์ออกขวา (ทำ)พิน 7

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

มอเตอร์เป็นตัวขับมอเตอร์:

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

เครื่องยนต์L298NL293D
มอเตอร์ซ้ายPIN 1 และ 2PIN 7 และ 8
มอเตอร์ขวาPIN 13 และ 14PIN 9 และ 10

MOTOR DRIVER ไปยัง ARDUINO UNO:

ตัวขับมอเตอร์ (L298N)ARDUINO ONE
PIN 4ไวน์
PIN 5GND
PIN 65V
PIN 8 และ PIN 9PIN 3 และ PIN 9
PIN 10 และ PIN 11PIN 5 และ PIN 10
PIN 7 และ PIN 125V
ตัวขับมอเตอร์ (L293D)ARDUINO ONE
PIN 3ไวน์
PIN 2GND
PIN 15V
PIN 5 และ PIN 6PIN 3 และ PIN 9
PIN 11 และ PIN 12PIN 5 และ PIN 10
PIN 4 และ PIN 55V

หมายเหตุ: หมุด 8 และ 9 ของ l298n ใช้เพื่อควบคุมมอเตอร์ที่เชื่อมต่อกับ 1 และ 2 และมอเตอร์ควบคุม 10 และ 11 ที่เชื่อมต่อกับพิน 13 และ 14 ในทำนองเดียวกันหมุด 5 และ 6 ของ l293d ใช้เพื่อควบคุมมอเตอร์ที่เชื่อมต่อกับ 7 และ 8 และมอเตอร์ควบคุม 12 และ 11 ที่เชื่อมต่อกับหมุด 9 และ 10

พวกเรามาถึงจุดสิ้นสุดของส่วนการออกแบบแล้ว เรายังมีการเข้ารหัสที่ต้องทำ แต่ก่อนหน้านั้นเราจะผ่านหลักการที่อนุญาตให้มีการติดตามบรรทัด

เซ็นเซอร์อินฟาเรดทำงานอย่างไร:

เซ็นเซอร์อินฟาเรด (เซ็นเซอร์ IR) สามารถใช้เพื่อตรวจจับความแตกต่างของสีและความใกล้เคียงของวัตถุกับมัน หลักการที่อยู่เบื้องหลังการทำงานของเซ็นเซอร์ IR นั้นค่อนข้างพื้นฐาน

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

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

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

หุ่นยนต์ผู้ติดตามสายทำงานอย่างไร:

LINE FOLLOWER LAYOUT

ในสภาพปกติหุ่นยนต์จะเคลื่อนที่ในลักษณะที่เซ็นเซอร์ทั้งสองอยู่เหนือสีขาวและเส้นสีดำอยู่ท่ามกลางเซ็นเซอร์ทั้งสอง

มันถูกตั้งโปรแกรมให้หมุนมอเตอร์ทั้งสองตัวเพื่อให้บอทเคลื่อนที่ไปข้างหน้า

ค่อนข้างเป็นธรรมชาติเมื่อเวลาผ่านไปเซ็นเซอร์ตัวใดตัวหนึ่งในสองตัวมาทับเส้นสีดำ

หากเซ็นเซอร์ด้านซ้ายมาทับเส้นมอเตอร์ด้านซ้ายจะหยุดนิ่งและผลลัพธ์ที่ได้บอทจะเริ่มหมุนไปทางซ้ายเว้นแต่เซ็นเซอร์ด้านซ้ายจะกลับมาอยู่บนพื้นผิวสีขาวและอยู่ในสภาพปกติ

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

แผนภูมิวงจรรวม:

รายละเอียดสายไฟ:

การเขียนโปรแกรมและแนวคิด:

เมื่อทำกับส่วนของวงจรแล้วเราจะไปยังส่วนการเขียนโปรแกรม ในส่วนนี้เราจะทำความเข้าใจกับโปรแกรมที่ควบคุมหุ่นยนต์ของเรา นี่คือรหัส: / *
Created and tested by Navneet Singh Sajwan
*Based on digital output of two sensors
*Speed control added
*/
int left, right
int value=250
void setup()
{
pinMode(6,INPUT)//left sensor
pinMode(7,INPUT)//right sensor
pinMode(9,OUTPUT)//left motor
pinMode(3,OUTPUT)//left motor
pinMode(10,OUTPUT)//right motor
pinMode(5,OUTPUT)//right motor
// Serial.begin(9600)
}
void read_sensors()
{
left=digitalRead(6)
right= digitalRead(7)
}
void move_forward()
{
analogWrite(9,value)//3,9 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_left()
{
digitalWrite(9,LOW)//9,3 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_right()
{
analogWrite(9,value)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void halt()
{
digitalWrite(9,LOW)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void print_readings()
{
Serial.print(' leftsensor')
Serial.print(' ')
Serial.print(left)
Serial.print('rightsensor')
Serial.print(' ')
Serial.print(right)
Serial.println()
}
void loop()
{
read_sensors()
while((left==0)&&(right==1)) // left sensor is over black line
{
turn_left()
read_sensors()
print_readings()
}
while((left==1)&&(right==0)) // right sensor is over black line
{
turn_right()
read_sensors()
print_readings()
}
while((left==0)&&(right==0)) // both sensors over the back line
{
halt()
read_sensors()
print_readings()
}
while((left==1)&&(right==1))// no sensor over black line
{
move_forward()
read_sensors()
print_readings()
}
}

คำอธิบายของฟังก์ชันที่ใช้:

read_sensors (): ใช้เวลาในการอ่านทั้งเซ็นเซอร์และเก็บไว้ในตัวแปรทางซ้ายและขวา

move_forward (): เมื่อ arduino เรียกใช้ฟังก์ชันนี้มอเตอร์ทั้งสองจะเคลื่อนที่ไปในทิศทางไปข้างหน้า

turn_left (): มอเตอร์ด้านซ้ายหยุด บอทเลี้ยวซ้าย

turn_right (): มอเตอร์ด้านขวาหยุด บอทเลี้ยวขวา

halt (): บอทหยุด

print_readings (): แสดงการอ่านของเซ็นเซอร์บนจอภาพอนุกรม สำหรับสิ่งนี้คุณต้องยกเลิกการใส่ข้อคิดเห็น“ Serial.begin (9600)” ในการตั้งค่าเป็นโมฆะ

การอ่านเซ็นเซอร์:

เซ็นเซอร์ผ่านสายการอ่านเซ็นเซอร์
ซ้ายขวา
เซ็นเซอร์ซ้าย01
เซ็นเซอร์ขวา10
ไม่มี11
ทั้งสอง00

ควบคุมความเร็ว:

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

เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าวเราลดความเร็วของบอทโดยใช้เทคนิค PWM ในโค้ดด้านบนมีตัวแปรชื่อ value

เพียงแค่ลดค่าตัวเลขในฟังก์ชันเพื่อลดความเร็ว ใน Arduino UNO คุณสามารถมีค่า pwm ระหว่าง 0 ถึง 255 เท่านั้น

analogWrite (พินค่า)

0<= value <=255

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




คู่ของ: รถหุ่นยนต์ควบคุมโทรศัพท์มือถือโดยใช้โมดูล DTMF ถัดไป: สวิตช์เปิด / ปิดไฟ AC ที่ควบคุมด้วยรหัสผ่าน