- วัสดุที่ต้องการ:
- แนวคิดของหุ่นยนต์หลีกเลี่ยงอุปสรรค:
- แผนภาพวงจรและคำอธิบาย:
- การเขียนโปรแกรมไมโครคอนโทรลเลอร์ PIC ของคุณ:
- Obstacle Avoider Robot ในการดำเนินการ:
Obstacle Avoider Robotเป็นหุ่นยนต์ที่มีชื่อเสียงอีกตัวหนึ่งซึ่งทำให้โครงการฝังตัว สำหรับผู้ที่เป็นหุ่นยนต์หลีกเลี่ยงอุปสรรคตัวใหม่มันเป็นเพียงหุ่นยนต์ล้อเลื่อนธรรมดาที่สามารถนำทางได้โดยไม่ชนสิ่งกีดขวางใด ๆ มีหลายวิธีในการสร้างหุ่นยนต์หลีกเลี่ยงอุปสรรคในโครงการเราจะใช้เซ็นเซอร์อัลตราโซนิกหนึ่งตัว(ด้านหน้า) และเซ็นเซอร์ IR สองตัว (ซ้าย / ขวา) เพื่อให้หุ่นยนต์ของเรามีดวงตาในทั้งสามทิศทาง ด้วยวิธีนี้คุณสามารถทำให้มันฉลาดขึ้นและเร็วขึ้นมากโดยการตรวจจับวัตถุในทั้งสามด้านและทำการหลบหลีกตามนั้น ที่นี่เรากำลังฟ้องร้องไมโครคอนโทรลเลอร์ PIC PIC16F877Aสำหรับหุ่นยนต์ที่หลีกเลี่ยงสิ่งกีดขวางนี้
การทำงานของหุ่นยนต์หลีกเลี่ยงสิ่งกีดขวางสามารถสังเกตได้จากผลิตภัณฑ์เรียลไทม์ที่เรียกว่าหุ่นยนต์ทำความสะอาดบ้าน แม้ว่าเทคโนโลยีและเซ็นเซอร์ที่ใช้ในสิ่งเหล่านี้จะซับซ้อนมาก แต่แนวคิดก็ยังคงเหมือนเดิม มาดูกันว่าเราสามารถทำได้โดยใช้เซ็นเซอร์ปกติและไมโครคอนโทรลเลอร์ PIC ของเรามากเพียงใด
ตรวจสอบหุ่นยนต์หลีกเลี่ยงอุปสรรคอื่น ๆ ของเราด้วย:
- หุ่นยนต์หลีกเลี่ยงอุปสรรคจาก Raspberry Pi
- DIY Smart Vacuum Cleaning Robot โดยใช้ Arduino
วัสดุที่ต้องการ:
- PIC16F877A
- เซ็นเซอร์ IR (2Nos)
- อัลตราโซนิกเซนเซอร์ (1Nos)
- มอเตอร์เกียร์ DC (2Nos)
- L293D ขับมอเตอร์
- Chaises (คุณสามารถสร้างของคุณเองโดยใช้กระดาษแข็ง)
- แบตสำรอง (แหล่งจ่ายไฟที่มี)
แนวคิดของหุ่นยนต์หลีกเลี่ยงอุปสรรค:
แนวคิดของ Obstacle Avoiding Robot นั้นง่ายมาก เราใช้เซ็นเซอร์เพื่อตรวจจับการมีอยู่ของวัตถุรอบ ๆ หุ่นยนต์และใช้ข้อมูลนี้เพื่อไม่ให้หุ่นยนต์ชนกับวัตถุเหล่านั้น เพื่อตรวจหาวัตถุที่เราสามารถใช้เซ็นเซอร์การใช้งานใด ๆ เช่นIR เซ็นเซอร์และเซ็นเซอร์อัลตราโซนิก
ในหุ่นยนต์ของเราเราใช้เซ็นเซอร์ของสหรัฐอเมริกาเป็นเซ็นเซอร์ด้านหน้าและเซ็นเซอร์ IR สองตัวสำหรับด้านซ้ายและขวาตามลำดับ หุ่นยนต์จะเคลื่อนที่ไปข้างหน้าเมื่อไม่มีวัตถุอยู่ข้างหน้า ดังนั้นหุ่นยนต์จะเดินหน้าต่อไปจนกว่าจะมีการอัลตราโซนิก (US) เซ็นเซอร์ตรวจจับวัตถุใด
เมื่อเซ็นเซอร์ของสหรัฐอเมริกาตรวจพบวัตถุถึงเวลาที่ต้องเปลี่ยนทิศทางของหุ่นยนต์ เราสามารถเลี้ยวซ้ายหรือขวาเพื่อตัดสินใจทิศทางการเลี้ยวโดยใช้ความช่วยเหลือของเซ็นเซอร์ IRเพื่อตรวจสอบว่ามีวัตถุใดอยู่ใกล้ด้านซ้ายหรือขวาของหุ่นยนต์
หากมีการตรวจพบวัตถุที่ด้านหน้าและด้านขวา ของหุ่นยนต์หุ่นยนต์จะกลับมาและเลี้ยวซ้าย เราทำให้หุ่นยนต์วิ่งถอยหลังเป็นระยะทางหนึ่งเพื่อไม่ให้มันชนกับวัตถุในขณะเลี้ยว
หากมีการตรวจพบวัตถุที่ด้านหน้าและด้านซ้าย ของหุ่นยนต์หุ่นยนต์จะกลับมาและเลี้ยวขวา
หากหุ่นยนต์ไปถึงมุมห้องมันจะรับรู้ถึงวัตถุที่อยู่ในทั้งสี่ ในกรณีนี้เราต้องขับหุ่นยนต์ไปข้างหลังจนกว่าด้านใดด้านหนึ่งจะว่าง
อีกกรณีหนึ่งที่เป็นไปได้คือจะมีวัตถุอยู่ข้างหน้า แต่อาจไม่มีวัตถุใด ๆ ไม่ว่าจะอยู่ทางด้านซ้ายหรือทางด้านขวาในกรณีนี้เราต้องสุ่มหันไปในทิศทางใดก็ได้
หวังว่านี่จะทำให้ทราบคร่าวๆว่า Obstacle หลีกเลี่ยงทำงานอย่างไรตอนนี้เรามาดำเนินการกับ Circuit Diagram เพื่อสร้างบอทนี้และสนุกไปกับมัน
แผนภาพวงจรและคำอธิบาย:
แผนภาพวงจรที่สมบูรณ์ของหุ่นยนต์หลีกเลี่ยงสิ่งกีดขวางที่ใช้ PICนี้แสดงไว้ในภาพด้านบน อย่างที่คุณเห็นเราใช้เซ็นเซอร์ IR สองตัวในการตรวจจับวัตถุทางซ้ายและขวาของหุ่นยนต์ตามลำดับและเซ็นเซอร์อัลตราโซนิกเพื่อวัดระยะห่างของวัตถุที่อยู่ข้างหน้าหุ่นยนต์ นอกจากนี้เรายังใช้โมดูล L293D Motor Driverเพื่อขับเคลื่อนมอเตอร์สองตัวที่มีอยู่ในโครงการนี้ นี่เป็นเพียงมอเตอร์เกียร์ DC ธรรมดาสำหรับล้อและด้วยเหตุนี้จึงสามารถหาได้ง่ายมาก ตารางต่อไปนี้จะช่วยคุณในการเชื่อมต่อ
ส. เลขที่ |
เชื่อมต่อจาก |
เชื่อมต่อกับ |
1 |
เซ็นเซอร์ IR ขาออกซ้าย |
RD2 (พิน 21) |
2 |
เซ็นเซอร์ IR ขาออกขวา |
RD3 (พิน 22) |
4 |
มอเตอร์ 1 ช่องพิน |
RC4 (พิน 23) |
5 |
ขามอเตอร์ 1 ช่อง B |
RC5 (พิน 25) |
6 |
ขามอเตอร์ 2 ช่อง A |
RC6 (พิน 26) |
7 |
ขามอเตอร์ 2 ช่อง B |
RC7 (พิน 27) |
8 |
PIN ทริกเกอร์ของสหรัฐฯ |
RB1 (พิน 34) |
9 |
US Echo Pin |
RB2 (พิน 35) |
จำเป็นต้องมีโมดูลไดรเวอร์มอเตอร์เช่นL293Dเนื่องจากจำนวนกระแสที่ต้องการสำหรับการทำงานของมอเตอร์เกียร์ DC ไม่สามารถหาแหล่งที่มาจากขา I / O ของไมโครคอนโทรลเลอร์ PIC ได้ เซ็นเซอร์และโมดูลใช้พลังงานจากแหล่งจ่าย + 5V ซึ่งควบคุมโดย 7805 โมดูลไดรเวอร์มอเตอร์สามารถขับเคลื่อนได้แม้ใช้ + 12V แต่สำหรับโครงการนี้ฉันเพิ่งติดอยู่กับ + 5V ที่มีอยู่
หุ่นยนต์ที่สมบูรณ์ใช้พลังงานจากธนาคารพลังงานในกรณีของฉัน คุณยังสามารถใช้พาวเวอร์แบงค์ธรรมดา ๆ และผ่านส่วนควบคุมหรือใช้วงจรด้านบนและใช้แบตเตอรี่ 9V หรือ 12V สำหรับหุ่นยนต์ดังแสดงในแผนภาพวงจรด้านบน เมื่อเชื่อมต่อเสร็จแล้วจะมีลักษณะดังนี้ด้านล่าง
การเขียนโปรแกรมไมโครคอนโทรลเลอร์ PIC ของคุณ:
การเขียนโปรแกรม PIC ของคุณเพื่อทำงานให้กับ Obstacle หลีกเลี่ยงนั้นง่ายมาก เราต้องอ่านค่าของเซ็นเซอร์ทั้งสามนี้และขับเคลื่อนมอเตอร์ตามนั้น ในโครงการนี้เรากำลังใช้เซ็นเซอร์อัลตราโซนิก เราได้เรียนรู้วิธีการเชื่อมต่ออัลตราโซนิกกับไมโครคอนโทรลเลอร์ PIC ไปแล้วหากคุณยังใหม่ที่นี่โปรดกลับไปที่บทช่วยสอนนั้นเพื่อทำความเข้าใจว่าเซ็นเซอร์ของสหรัฐฯทำงานกับ PIC อย่างไรเนื่องจากฉันจะข้ามรายละเอียดเกี่ยวกับที่นี่เพื่อหลีกเลี่ยงการเกิดซ้ำ
โปรแกรมที่สมบูรณ์หรือหุ่นยนต์นี้จะได้รับในตอนท้ายของหน้านี้ผมได้อธิบายเพิ่มเติมชิ้นสำคัญของโครงการดังต่อไปนี้
ที่เรารู้ว่าโปรแกรมทั้งหมดเริ่มต้นด้วยอินพุตและเอาต์พุตประกาศขาที่นี่สี่พินของโมดูลไดรเวอร์มอเตอร์และหมุดทริกเกอร์คือพินเอาท์พุตในขณะที่พิน Echo และพิน IR สองอันจะถูกป้อนเข้า เราควรเริ่มต้นโมดูล Timer 1 เพื่อใช้กับเซ็นเซอร์อัลตราโซนิก
TRISD = 0x00; // PORTD ประกาศเป็นเอาต์พุตสำหรับเชื่อมต่อ LCD TRISB1 = 0; // ขาทริกเกอร์ของเซ็นเซอร์ US ถูกส่งเป็นขาออก TRISB2 = 1; // ขา Echo ของเซ็นเซอร์ US ถูกตั้งค่าเป็นขาอินพุต TRISB3 = 0; // RB3 คือขาเอาต์พุตสำหรับ LED TRISD2 = 1; TRISD3 = 1; // ทั้งหมุดเซ็นเซอร์ IR ถูกประกาศเป็นอินพุต TRISC4 = 0; TRISC5 = 0; // มอเตอร์ 1 พินประกาศเป็นเอาต์พุต TRISC6 = 0; TRISC7 = 0; // มอเตอร์ 2 พินประกาศเป็นเอาต์พุต T1CON = 0x20;
ในโปรแกรมนี้เราจะต้องตรวจสอบระยะห่างระหว่างเซ็นเซอร์และวัตถุค่อนข้างบ่อยดังนั้นเราจึงได้สร้างฟังก์ชันที่ชื่อว่า คำนวณ ระยะทาง () ซึ่งเราจะวัดระยะทางด้วยวิธีการที่กล่าวถึงในบทช่วยสอนการเชื่อมต่อเซ็นเซอร์ของสหรัฐอเมริกา รหัสดังแสดงด้านล่าง
โมฆะคำนวณระยะทาง () // ฟังก์ชันคำนวณระยะทางของ US {TMR1H = 0; TMR1L = 0; // ล้างบิตตัวจับเวลา Trigger = 1; __delay_us (10); ทริกเกอร์ = 0; ในขณะที่ (Echo == 0); TMR1ON = 1; ในขณะที่ (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); ระยะทาง = (0.0272 * time_taken) / 2; }
ขั้นตอนต่อไปจะมีการเปรียบเทียบค่าของเซ็นเซอร์อัลตราโซนิกและ IR เซ็นเซอร์และย้ายหุ่นยนต์ตาม ที่นี่ในโปรแกรมนี้ฉันใช้ค่า cm เป็นระยะวิกฤตด้านล่างซึ่งหุ่นยนต์ควรเริ่มทำการเปลี่ยนแปลงทิศทาง คุณสามารถใช้ค่าที่คุณต้องการ หากไม่มีวัตถุหุ่นยนต์ก็เดินไปข้างหน้า
ถ้า (ระยะทาง> 5) {RC4 = 0; RC5 = 1; // มอเตอร์ 1 ไปข้างหน้า RC6 = 1; RC7 = 0; // มอเตอร์ 2 ไปข้างหน้า}
หากตรวจพบวัตถุระยะห่างจะต่ำกว่าซม. ในกรณีนี้เราพิจารณาค่าของเซ็นเซอร์อัลตราโซนิกซ้ายและขวา จากค่านี้เราตัดสินใจว่าจะเลี้ยวซ้ายหรือเลี้ยวขวา ใช้ความล่าช้าของ ms เพื่อให้สามารถมองเห็นทิศทางการเปลี่ยนแปลงได้
ถ้า (RD2 == 0 && RD3 == 1 && ระยะ <= 5) // เซ็นเซอร์ด้านซ้ายถูกบล็อก {back_off (); RC4 = 1; RC5 = 1; // มอเตอร์ 1 หยุด RC6 = 1; RC7 = 0; // มอเตอร์ 2 ไปข้างหน้า __delay_ms (500); } คำนวณระยะทาง (); ถ้า (RD2 == 1 && RD3 == 0 && ระยะ <= 5) // เซ็นเซอร์ด้านขวาถูกบล็อก {back_off (); RC4 = 0; RC5 = 1; // มอเตอร์ 1 ไปข้างหน้า RC6 = 1; RC7 = 1; // มอเตอร์ 2 หยุด __delay_ms (500); }
บางครั้งเซ็นเซอร์อัลตราโซนิกจะตรวจสอบวัตถุ แต่มีวัตถุจะไม่มีการตรวจพบโดยเซ็นเซอร์อินฟราเรด ในกรณีนี้หุ่นยนต์จะเลี้ยวซ้ายตามค่าเริ่มต้น คุณยังสามารถเลี้ยวขวาหรือในทิศทางแบบสุ่มตามความต้องการของคุณ หากมีวัตถุทั้งสองข้างเราจะทำให้มันถอยหลัง รหัสสำหรับการทำเช่นเดียวกันแสดงอยู่ด้านล่าง
คำนวณระยะทาง (); ถ้า (RD2 == 0 && RD3 == 0 && ระยะ <= 5) // เซ็นเซอร์ทั้งสองเปิดอยู่ {back_off (); RC4 = 0; RC5 = 1; // มอเตอร์ 1 ไปข้างหน้า RC6 = 1; RC7 = 1; // มอเตอร์ 2 หยุด __delay_ms (500); } คำนวณระยะทาง (); ถ้า (RD2 == 1 && RD3 == 1 && ระยะ <= 5) // เซ็นเซอร์ทั้งสองถูกบล็อก {back_off (); RC4 = 1; RC5 = 0; // มอเตอร์ 1 ย้อนกลับ RC6 = 1; RC7 = 1; // มอเตอร์ 2 หยุด __delay_ms (1000); }
Obstacle Avoider Robot ในการดำเนินการ:
การทำงานของโครงการนั้นน่าสนใจและสนุกมากในการรับชม เมื่อคุณทำ Circuit และ Code เสร็จแล้วเพียงแค่เปิด Bot ของคุณแล้วปล่อยไว้ที่พื้น ควรสามารถระบุอุปสรรคและหลีกเลี่ยงได้อย่างชาญฉลาด แต่นี่เป็นส่วนที่สนุก คุณสามารถแก้ไขโค้ดและทำให้มันทำสิ่งต่างๆได้มากขึ้นเช่นการหลีกเลี่ยงบันไดทำให้ฉลาดขึ้นด้วยการจัดเก็บเทิร์นอันล้ำค่าและอะไรล่ะ?
Robot นี้จะช่วยให้คุณเข้าใจพื้นฐานของการเขียนโปรแกรมและเรียนรู้ว่าฮาร์ดแวร์จริงจะตอบสนองต่อโค้ดของคุณอย่างไร การตั้งโปรแกรมหุ่นยนต์ตัวนี้เป็นเรื่องสนุกเสมอและดูว่ามันทำงานอย่างไรสำหรับโค้ดในโลกแห่งความเป็นจริง
ที่นี่เราได้ใช้บอร์ด PIC perf แบบเดียวกับที่เราสร้างขึ้นสำหรับ LED กะพริบโดยใช้ไมโครคอนโทรลเลอร์ PIC และใช้บอร์ดนี้ในโครงการอื่น ๆ ของ PIC Tutorial Series
หุ่นยนต์ของคุณควรมีลักษณะคล้ายกับที่แสดงในภาพด้านบน การทำงานที่สมบูรณ์ของโครงการนี้จะปรากฏในวิดีโอด้านล่าง
หวังว่าคุณจะเข้าใจโครงการและสนุกกับการสร้าง หากคุณมีข้อสงสัยหรือติดขัดคุณสามารถใช้ส่วนความคิดเห็นเพื่อโพสต์คำถามของคุณและเราจะพยายามอย่างเต็มที่ในการตอบคำถาม