ประสบการณ์การสร้างหุ่นยนต์ตัวแรกบน Arduino (หุ่นยนต์ “นักล่า”)

สวัสดี

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

ประสบการณ์การสร้างหุ่นยนต์ตัวแรกบน Arduino (หุ่นยนต์ “นักล่า”)

เมื่อใดก็ตามที่เป็นไปได้ ฉันจะให้ลูกชาย (อายุ 8 ขวบ) เข้าร่วมด้วย สิ่งที่ได้ผลอย่างแน่นอนและสิ่งที่ไม่ได้ผล - ฉันได้ทุ่มเทส่วนหนึ่งของบทความนี้ให้กับเรื่องนี้บางทีมันอาจจะเป็นประโยชน์กับใครบางคน

คำอธิบายทั่วไปของหุ่นยนต์

ก่อนอื่น คำสองสามคำเกี่ยวกับหุ่นยนต์นั้น (ความคิด). ฉันไม่อยากประกอบสิ่งที่เป็นมาตรฐานตั้งแต่เริ่มต้น ในขณะเดียวกันชุดส่วนประกอบก็ค่อนข้างมาตรฐาน - แชสซี, เครื่องยนต์, เซ็นเซอร์อัลตราโซนิก, เซ็นเซอร์เส้น, ไฟ LED, ทวีตเตอร์ ในขั้นต้น หุ่นยนต์ถูกประดิษฐ์ขึ้นจาก “ชุดซุป” นี้ ซึ่งทำหน้าที่ปกป้องอาณาเขตของมัน เขาขับรถไปหาผู้กระทำความผิดที่ข้ามเส้นวงกลมแล้วกลับมาที่ศูนย์กลาง อย่างไรก็ตาม เวอร์ชันนี้จำเป็นต้องมีการลากเส้น บวกกับคณิตศาสตร์เพิ่มเติมเพื่อให้อยู่ในวงกลมตลอดเวลา

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

อย่างที่คุณเห็น นี่เป็นเหมือนเกมไล่ตาม แม้ว่าท้ายที่สุดแล้วหุ่นยนต์จะไม่เร็วพอ แต่ก็มีปฏิสัมพันธ์กับคนรอบข้างอย่างตรงไปตรงมา เด็กๆ ชอบสิ่งนี้เป็นพิเศษ (แต่บางครั้งดูเหมือนว่าพวกเขาจะเหยียบย่ำมัน หัวใจของพวกเขาเต้นรัว...) ฉันคิดว่านี่เป็นทางออกที่ดีในการทำให้การออกแบบทางเทคนิคเป็นที่นิยม

โครงสร้างหุ่นยนต์

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

ประสบการณ์การสร้างหุ่นยนต์ตัวแรกบน Arduino (หุ่นยนต์ “นักล่า”)

“สมอง” ของหุ่นยนต์คือบอร์ด Arduino Uno (1); อยู่ในชุดสั่งจากจีน ตามจุดประสงค์ของเราก็เพียงพอแล้ว (เราเน้นที่จำนวนพินที่ใช้) จากชุดอุปกรณ์เดียวกันนี้ เราได้นำแชสซีสำเร็จรูป (2) ซึ่งมีล้อขับเคลื่อนสองล้อ (3) และด้านหลังหนึ่งล้อ (หมุนได้อย่างอิสระ) (4) ชุดนี้ยังรวมถึงช่องใส่แบตเตอรี่สำเร็จรูป (5) ด้านหน้าหุ่นยนต์มีเซ็นเซอร์อัลตราโซนิก (HC-SR04) (6) ด้านหลังมีไดรเวอร์มอเตอร์ (L298N) (7) ตรงกลางมีไฟกะพริบ LED (8) และอีกเล็กน้อยถึง ด้านข้างมีทวีตเตอร์ (9)

ในขั้นตอนเค้าโครงเราจะดูที่:

- เพื่อให้ทุกอย่างลงตัว
- เพื่อให้มีความสมดุล
- จะต้องวางอย่างมีเหตุผล

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

ความแตกต่าง:

  1. แชสซีจากชุดอุปกรณ์มีรูจากโรงงานจำนวนมาก แต่ฉันยังไม่ทราบว่าตรรกะอยู่ในนั้นอย่างไร เครื่องยนต์และแบตเตอรี่ได้รับการติดตั้งอย่างแน่นหนาโดยไม่มีปัญหา จากนั้น "การปรับแต่ง" จึงเริ่มต้นด้วยการเจาะรูใหม่เพื่อยึดบอร์ดตัวใดตัวหนึ่ง
  2. ชั้นวางทองเหลืองและตัวยึดอื่นๆ จากพื้นที่เก็บของช่วยได้มาก (บางครั้งเราต้องเอามันออก)
  3. ฉันส่งบัสบาร์จากแต่ละบอร์ดผ่านที่หนีบ (ฉันพบมันในที่เก็บอีกครั้ง) สะดวกมาก สายไฟทุกเส้นวางอย่างดีไม่ห้อย

บล็อกส่วนบุคคล

ตอนนี้ฉันจะผ่านไป บล็อก และฉันจะบอกคุณเกี่ยวกับแต่ละคนเป็นการส่วนตัว

ช่องใส่แบตเตอรี่

เห็นได้ชัดว่าหุ่นยนต์จะต้องมีแหล่งพลังงานที่ดี ตัวเลือกอาจแตกต่างกัน ฉันเลือกตัวเลือกที่มีแบตเตอรี่ AA 4 ก้อน โดยรวมแล้วจะให้แรงดันไฟฟ้าประมาณ 5 V และแรงดันไฟฟ้านี้สามารถนำไปใช้กับพิน 5V ของบอร์ด Arduino ได้โดยตรง (ข้ามโคลง)

แน่นอน ฉันมีข้อควรระวังอยู่บ้าง แต่วิธีนี้ใช้ได้ผลค่อนข้างมาก

เนื่องจากจำเป็นต้องใช้พลังงานทุกที่ เพื่อความสะดวกฉันจึงสร้างตัวเชื่อมต่อสองตัวที่กึ่งกลางของหุ่นยนต์: อันหนึ่ง "กระจาย" พื้น (ทางขวา) และอันที่สอง - 5 V (ทางซ้าย)

ประสบการณ์การสร้างหุ่นยนต์ตัวแรกบน Arduino (หุ่นยนต์ “นักล่า”)

มอเตอร์และไดรเวอร์

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

ประสบการณ์การสร้างหุ่นยนต์ตัวแรกบน Arduino (หุ่นยนต์ “นักล่า”)

ในการควบคุมมอเตอร์ดังที่ฉันเขียนไว้ข้างต้น จะใช้ไดรเวอร์ L298N ตามเอกสารประกอบ มอเตอร์แต่ละตัวมีพินสามพิน: อันหนึ่งสำหรับเปลี่ยนความเร็วและพินหนึ่งคู่สำหรับทิศทางการหมุน มีจุดสำคัญประการหนึ่งที่นี่ ปรากฎว่าหากแรงดันไฟฟ้าอยู่ที่ 5 V แสดงว่าการควบคุมความเร็วไม่ทำงาน! นั่นคือมันไม่หมุนเลยหรือหมุนไปสูงสุด นี่คือคุณลักษณะที่ทำให้ฉัน "ฆ่า" สองสามเย็น ในที่สุดฉันก็พบการกล่าวถึงที่ไหนสักแห่งในฟอรัมแห่งหนึ่ง

โดยทั่วไปแล้ว ฉันต้องการความเร็วในการหมุนต่ำเมื่อหมุนหุ่นยนต์ เพื่อให้มีเวลาสแกนพื้นที่ แต่เนื่องจากไม่มีความคิดนี้เกิดขึ้น ฉันจึงต้องทำให้มันแตกต่างออกไป: เลี้ยวเล็ก ๆ - หยุด - เลี้ยว - หยุด ฯลฯ อีกครั้งไม่สง่างามนัก แต่ใช้งานได้

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

เซ็นเซอร์อัลตราโซนิก

ประสบการณ์การสร้างหุ่นยนต์ตัวแรกบน Arduino (หุ่นยนต์ “นักล่า”)

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

ฉันตั้งค่าการประมวลผลเช่นนี้ ตัวกรองค่ามัธยฐาน เป็นเวลาสามนับ จากการทดสอบกับเด็กจริงๆ (ไม่มีเด็กได้รับอันตรายระหว่างการทดสอบ!) ปรากฏว่าเพียงพอที่จะทำให้ข้อมูลเป็นมาตรฐาน ฟิสิกส์ที่นี่เรียบง่าย: เรามีสัญญาณที่สะท้อนออกมา จำเป็น วัตถุ (ให้ระยะห่างที่ต้องการ) และสะท้อนจากวัตถุที่อยู่ไกลกว่า เช่น ผนัง อย่างหลังเป็นการสุ่มการปล่อยก๊าซเรือนกระจกในรูปแบบ 45, 46, 230, 46, 46, 45, 45, 310, 46... สิ่งเหล่านี้คือสิ่งที่ตัวกรองค่ามัธยฐานตัดออก

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

ไฟกะพริบและไซเรน

บางทีองค์ประกอบที่ง่ายที่สุดของทั้งหมดข้างต้น สามารถดูได้ในรูปถ่ายด้านบน ไม่มีอะไรจะเขียนเกี่ยวกับฮาร์ดแวร์ที่นี่ ดังนั้นตอนนี้เรามาดูกันดีกว่า รหัส.

โปรแกรมควบคุม

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

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

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

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

ความแตกต่างของการสอน

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

ทำงานตามคำแนะนำ

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

ลำดับงาน (“จากเฉพาะไปเป็นทั่วไป”)

นี่เป็นจุดที่ยาก คุณต้องเรียนรู้ว่าโครงการขนาดใหญ่ (“สร้างหุ่นยนต์”) ประกอบด้วยงานเล็กๆ (“เชื่อมต่อเซ็นเซอร์” “เชื่อมต่อมอเตอร์”...) และงานเหล่านั้น ในทางกลับกัน ยังประกอบด้วยขั้นตอนที่เล็กกว่า (“ค้นหา โปรแกรม” “เชื่อมต่อบอร์ด” ", "ดาวน์โหลดเฟิร์มแวร์"...) ด้วยการปฏิบัติงานในระดับที่ต่ำกว่าที่เข้าใจได้ไม่มากก็น้อยเราจะ "ปิด" งานระดับกลางและจากงานเหล่านั้นผลลัพธ์โดยรวมก็จะเกิดขึ้น ฉันอธิบายแล้ว แต่ฉันคิดว่าการตระหนักรู้จะไม่มาในเร็วๆ นี้ ที่ไหนสักแห่งอาจเป็นช่วงวัยรุ่น

การติด

การเจาะ เกลียว สกรู น็อต การบัดกรี และกลิ่นของขัดสน - เราจะไปอยู่ที่ไหนไม่ได้ถ้าไม่มีมัน? เด็กได้รับทักษะพื้นฐาน "การทำงานกับหัวแร้ง" - เขาสามารถประสานการเชื่อมต่อได้หลายอย่าง (ฉันช่วยได้นิดหน่อยฉันจะไม่ซ่อนมัน) อย่าลืมคำอธิบายด้านความปลอดภัย

งานคอมพิวเตอร์

ฉันเขียนโปรแกรมสำหรับหุ่นยนต์ แต่ก็ยังสามารถบรรลุผลลัพธ์ที่น่าพอใจได้

ครั้งแรก: ภาษาอังกฤษ พวกเขาเพิ่งเริ่มเรียนที่โรงเรียน ดังนั้นเราจึงพยายามดิ้นรนเพื่อหาว่าพิชาลกา มิกัลกา ยาร์คอส และการทับศัพท์อื่นๆ คืออะไร อย่างน้อยเราก็เข้าใจสิ่งนี้ ฉันจงใจไม่ใช้คำภาษาอังกฤษเป็นภาษาแม่เนื่องจากเรายังไม่ถึงระดับนี้

ประการที่สอง: งานที่มีประสิทธิภาพ เราสอนการใช้คีย์ลัดและวิธีการดำเนินการมาตรฐานอย่างรวดเร็ว เป็นระยะๆ ตอนที่เรากำลังเขียนโปรแกรม ฉันกับลูกชายสลับที่กัน และฉันก็บอกว่าต้องทำอะไร (ทดแทน ค้นหา ฯลฯ) ฉันต้องทำซ้ำซ้ำแล้วซ้ำเล่า: “ดับเบิลคลิกเลือก”, “กด Shift ค้างไว้”, “กด Ctrl ค้างไว้” และอื่นๆ กระบวนการเรียนรู้ที่นี่ไม่เร็วนัก แต่ฉันคิดว่าทักษะจะค่อยๆ สะสม "ในคอร์เทกซ์"

ข้อความที่ซ่อนอยู่คุณสามารถพูดได้ว่าข้างต้นเกือบจะชัดเจน แต่จริงๆ แล้ว ฤดูใบไม้ร่วงนี้ฉันมีโอกาสสอนวิทยาการคอมพิวเตอร์ในชั้นประถมศึกษาปีที่ 9 ที่โรงเรียนแห่งหนึ่ง นั่นน่ากลัวมาก นักเรียนไม่ทราบสิ่งพื้นฐานเช่น Ctrl + Z, Ctrl + C และ Ctrl + V การเลือกข้อความขณะกด Shift ค้างไว้หรือดับเบิลคลิกที่คำ เป็นต้น แม้ว่าพวกเขาจะเรียนวิทยาการคอมพิวเตอร์อยู่ปีสามก็ตาม... ลองสรุปของคุณเอง

ประการที่สาม: การพิมพ์แบบสัมผัส ฉันมอบหมายความคิดเห็นในรหัสให้เด็กพิมพ์ (ให้เขาฝึก) เราวางมือของเราอย่างถูกต้องทันทีเพื่อให้นิ้วของเราค่อยๆจดจำตำแหน่งของกุญแจ

อย่างที่คุณเห็น เรายังเพิ่งเริ่มต้น เราจะฝึกฝนทักษะและความรู้ของเราต่อไปซึ่งจะเป็นประโยชน์ในชีวิต

อีกอย่างเกี่ยวกับอนาคต...

การพัฒนาต่อไป

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

และท้ายที่สุดแล้วฮีโร่ของบทความนี้ (วิดีโอโดยคลิก):

ประสบการณ์การสร้างหุ่นยนต์ตัวแรกบน Arduino (หุ่นยนต์ “นักล่า”)

ขอบคุณ!

ลิงค์รหัส

ที่มา: will.com

เพิ่มความคิดเห็น