ในโพสต์นี้เราได้เรียนรู้วิธีสร้างวงจรหุ่นยนต์ผู้ติดตามเส้นโดยใช้ 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 มองจากด้านหลังบอทของคุณโดยมีมอเตอร์อยู่ใกล้คุณและเซ็นเซอร์อยู่ห่างออกไปให้เชื่อมต่อดังต่อไปนี้:
เครื่องยนต์ | L298N | L293D |
มอเตอร์ซ้าย | PIN 1 และ 2 | PIN 7 และ 8 |
มอเตอร์ขวา | PIN 13 และ 14 | PIN 9 และ 10 |
MOTOR DRIVER ไปยัง ARDUINO UNO:
ตัวขับมอเตอร์ (L298N) | ARDUINO ONE |
PIN 4 | ไวน์ |
PIN 5 | GND |
PIN 6 | 5V |
PIN 8 และ PIN 9 | PIN 3 และ PIN 9 |
PIN 10 และ PIN 11 | PIN 5 และ PIN 10 |
PIN 7 และ PIN 12 | 5V |
ตัวขับมอเตอร์ (L293D) | ARDUINO ONE |
PIN 3 | ไวน์ |
PIN 2 | GND |
PIN 1 | 5V |
PIN 5 และ PIN 6 | PIN 3 และ PIN 9 |
PIN 11 และ PIN 12 | PIN 5 และ PIN 10 |
PIN 4 และ PIN 5 | 5V |
หมายเหตุ: หมุด 8 และ 9 ของ l298n ใช้เพื่อควบคุมมอเตอร์ที่เชื่อมต่อกับ 1 และ 2 และมอเตอร์ควบคุม 10 และ 11 ที่เชื่อมต่อกับพิน 13 และ 14 ในทำนองเดียวกันหมุด 5 และ 6 ของ l293d ใช้เพื่อควบคุมมอเตอร์ที่เชื่อมต่อกับ 7 และ 8 และมอเตอร์ควบคุม 12 และ 11 ที่เชื่อมต่อกับหมุด 9 และ 10
พวกเรามาถึงจุดสิ้นสุดของส่วนการออกแบบแล้ว เรายังมีการเข้ารหัสที่ต้องทำ แต่ก่อนหน้านั้นเราจะผ่านหลักการที่อนุญาตให้มีการติดตามบรรทัด
เซ็นเซอร์อินฟาเรดทำงานอย่างไร:
เซ็นเซอร์อินฟาเรด (เซ็นเซอร์ IR) สามารถใช้เพื่อตรวจจับความแตกต่างของสีและความใกล้เคียงของวัตถุกับมัน หลักการที่อยู่เบื้องหลังการทำงานของเซ็นเซอร์ IR นั้นค่อนข้างพื้นฐาน
อย่างที่เราเห็นมันมีไฟ LED สองดวงคือ IR เปล่งแสงและโฟโตไดโอด ทำหน้าที่เป็นคู่เครื่องส่ง - รับ เมื่อสิ่งกีดขวางมาด้านหน้าของรังสีตัวปล่อยพวกมันจะสะท้อนกลับและถูกดักจับโดยเครื่องรับ
สิ่งนี้จะสร้างสัญญาณดิจิทัลซึ่งสามารถป้อนให้กับไมโครคอนโทรลเลอร์และตัวกระตุ้นเพื่อดำเนินการที่จำเป็นในการเผชิญหน้ากับสิ่งกีดขวาง
ฟิสิกส์พื้นฐานบอกเราว่าร่างกายสีดำดูดซับรังสีแม่เหล็กไฟฟ้าทั้งหมดที่เกิดขึ้นในขณะที่ร่างกายสีขาวสะท้อนมัน หลักการนี้ถูกใช้โดยผู้ติดตามสายเพื่อแยกความแตกต่างระหว่างพื้นผิวสีขาวและสีดำ
หุ่นยนต์ผู้ติดตามสายทำงานอย่างไร:
ในสภาพปกติหุ่นยนต์จะเคลื่อนที่ในลักษณะที่เซ็นเซอร์ทั้งสองอยู่เหนือสีขาวและเส้นสีดำอยู่ท่ามกลางเซ็นเซอร์ทั้งสอง
มันถูกตั้งโปรแกรมให้หมุนมอเตอร์ทั้งสองตัวเพื่อให้บอทเคลื่อนที่ไปข้างหน้า
ค่อนข้างเป็นธรรมชาติเมื่อเวลาผ่านไปเซ็นเซอร์ตัวใดตัวหนึ่งในสองตัวมาทับเส้นสีดำ
หากเซ็นเซอร์ด้านซ้ายมาทับเส้นมอเตอร์ด้านซ้ายจะหยุดนิ่งและผลลัพธ์ที่ได้บอทจะเริ่มหมุนไปทางซ้ายเว้นแต่เซ็นเซอร์ด้านซ้ายจะกลับมาอยู่บนพื้นผิวสีขาวและอยู่ในสภาพปกติ
ในทำนองเดียวกันเมื่อเซ็นเซอร์ด้านขวามาทับเส้นสีดำมอเตอร์ด้านขวาจะหยุดทำงานและส่งผลให้บอทหันไปทางขวาเว้นแต่เซ็นเซอร์จะกลับมาที่พื้นผิวสีขาว กลไกการหมุนนี้เรียกว่ากลไกการขับเคลื่อนที่แตกต่างกัน
แผนภูมิวงจรรวม:
รายละเอียดสายไฟ:
การเขียนโปรแกรมและแนวคิด:
เมื่อทำกับส่วนของวงจรแล้วเราจะไปยังส่วนการเขียนโปรแกรม ในส่วนนี้เราจะทำความเข้าใจกับโปรแกรมที่ควบคุมหุ่นยนต์ของเรา นี่คือรหัส: / * 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)” ในการตั้งค่าเป็นโมฆะ
การอ่านเซ็นเซอร์:
เซ็นเซอร์ผ่านสาย | การอ่านเซ็นเซอร์ | |
ซ้าย | ขวา | |
เซ็นเซอร์ซ้าย | 0 | 1 |
เซ็นเซอร์ขวา | 1 | 0 |
ไม่มี | 1 | 1 |
ทั้งสอง | 0 | 0 |
ควบคุมความเร็ว:
บางครั้งความเร็วของมอเตอร์สูงมากจนก่อนที่ arduino จะแปลสัญญาณเซ็นเซอร์หุ่นยนต์จะเสียเส้น ในระยะสั้นบอทไม่เดินตามเส้นเนื่องจากความเร็วสูงและทำให้สายขาดแม้ว่าอัลกอริทึมจะถูกต้องก็ตาม
เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าวเราลดความเร็วของบอทโดยใช้เทคนิค PWM ในโค้ดด้านบนมีตัวแปรชื่อ value
เพียงแค่ลดค่าตัวเลขในฟังก์ชันเพื่อลดความเร็ว ใน Arduino UNO คุณสามารถมีค่า pwm ระหว่าง 0 ถึง 255 เท่านั้น
analogWrite (พินค่า)
0<= value <=255
นี่คือจุดสิ้นสุดของโพสต์ของฉันในผู้ติดตามบรรทัด ฉันหวังว่ามันจะมีรายละเอียดเพียงพอที่จะตอบคำถามการเผาไหม้ทั้งหมดของคุณและหากในความเป็นจริงที่หายากที่สุดนั้นไม่ใช่เราจะมีส่วนความคิดเห็นให้คุณเสมอ แสดงความคิดเห็นที่คุณสงสัย ขอให้มีความสุขในการซ่อมแซม!
คู่ของ: รถหุ่นยนต์ควบคุมโทรศัพท์มือถือโดยใช้โมดูล DTMF ถัดไป: สวิตช์เปิด / ปิดไฟ AC ที่ควบคุมด้วยรหัสผ่าน