สวัสดี
ในบทความนี้ ฉันต้องการอธิบายกระบวนการประกอบหุ่นยนต์ตัวแรกของฉันโดยใช้ Arduino เนื้อหานี้จะเป็นประโยชน์สำหรับผู้เริ่มต้นคนอื่นๆ เช่นฉันที่ต้องการสร้าง "รถเข็นวิ่งอัตโนมัติ" บทความนี้เป็นคำอธิบายขั้นตอนการทำงานกับส่วนเพิ่มเติมของฉันเกี่ยวกับความแตกต่างต่างๆ ลิงก์ไปยังโค้ดสุดท้าย (มีแนวโน้มว่าจะไม่ใช่วิธีที่ดีที่สุด) จะอยู่ท้ายบทความ
เมื่อใดก็ตามที่เป็นไปได้ ฉันจะให้ลูกชาย (อายุ 8 ขวบ) เข้าร่วมด้วย สิ่งที่ได้ผลอย่างแน่นอนและสิ่งที่ไม่ได้ผล - ฉันได้ทุ่มเทส่วนหนึ่งของบทความนี้ให้กับเรื่องนี้บางทีมันอาจจะเป็นประโยชน์กับใครบางคน
คำอธิบายทั่วไปของหุ่นยนต์
ก่อนอื่น คำสองสามคำเกี่ยวกับหุ่นยนต์นั้น (ความคิด). ฉันไม่อยากประกอบสิ่งที่เป็นมาตรฐานตั้งแต่เริ่มต้น ในขณะเดียวกันชุดส่วนประกอบก็ค่อนข้างมาตรฐาน - แชสซี, เครื่องยนต์, เซ็นเซอร์อัลตราโซนิก, เซ็นเซอร์เส้น, ไฟ LED, ทวีตเตอร์ ในขั้นต้น หุ่นยนต์ถูกประดิษฐ์ขึ้นจาก “ชุดซุป” นี้ ซึ่งทำหน้าที่ปกป้องอาณาเขตของมัน เขาขับรถไปหาผู้กระทำความผิดที่ข้ามเส้นวงกลมแล้วกลับมาที่ศูนย์กลาง อย่างไรก็ตาม เวอร์ชันนี้จำเป็นต้องมีการลากเส้น บวกกับคณิตศาสตร์เพิ่มเติมเพื่อให้อยู่ในวงกลมตลอดเวลา
ดังนั้นหลังจากคิดอยู่พักหนึ่ง ฉันก็เปลี่ยนความคิดไปบ้างและตัดสินใจสร้างหุ่นยนต์ "นักล่า" เมื่อเริ่มต้น มันจะหมุนรอบแกน โดยเลือกเป้าหมายใกล้เคียง (คน) หากตรวจพบ "เหยื่อ" "นักล่า" จะเปิดไฟกระพริบและไซเรนและเริ่มขับไปหามัน เมื่อบุคคลเคลื่อนตัวออก/วิ่งหนี หุ่นยนต์จะเลือกเป้าหมายใหม่และติดตามมัน และอื่นๆ หุ่นยนต์ดังกล่าวไม่จำเป็นต้องมีวงกลมจำกัด และสามารถทำงานในพื้นที่เปิดโล่งได้
อย่างที่คุณเห็น นี่เป็นเหมือนเกมไล่ตาม แม้ว่าท้ายที่สุดแล้วหุ่นยนต์จะไม่เร็วพอ แต่ก็มีปฏิสัมพันธ์กับคนรอบข้างอย่างตรงไปตรงมา เด็กๆ ชอบสิ่งนี้เป็นพิเศษ (แต่บางครั้งดูเหมือนว่าพวกเขาจะเหยียบย่ำมัน หัวใจของพวกเขาเต้นรัว...) ฉันคิดว่านี่เป็นทางออกที่ดีในการทำให้การออกแบบทางเทคนิคเป็นที่นิยม
โครงสร้างหุ่นยนต์
ดังนั้นเราจึงได้ตัดสินใจเกี่ยวกับแนวคิดนี้แล้ว เรามาต่อกันที่ เค้าโครง. รายการองค์ประกอบถูกสร้างขึ้นจากสิ่งที่หุ่นยนต์ควรจะสามารถทำได้ ทุกอย่างที่นี่ค่อนข้างชัดเจน ดังนั้นเรามาดูตัวเลขกันทันที:
“สมอง” ของหุ่นยนต์คือบอร์ด Arduino Uno (1); อยู่ในชุดสั่งจากจีน ตามจุดประสงค์ของเราก็เพียงพอแล้ว (เราเน้นที่จำนวนพินที่ใช้) จากชุดอุปกรณ์เดียวกันนี้ เราได้นำแชสซีสำเร็จรูป (2) ซึ่งมีล้อขับเคลื่อนสองล้อ (3) และด้านหลังหนึ่งล้อ (หมุนได้อย่างอิสระ) (4) ชุดนี้ยังรวมถึงช่องใส่แบตเตอรี่สำเร็จรูป (5) ด้านหน้าหุ่นยนต์มีเซ็นเซอร์อัลตราโซนิก (HC-SR04) (6) ด้านหลังมีไดรเวอร์มอเตอร์ (L298N) (7) ตรงกลางมีไฟกะพริบ LED (8) และอีกเล็กน้อยถึง ด้านข้างมีทวีตเตอร์ (9)
ในขั้นตอนเค้าโครงเราจะดูที่:
- เพื่อให้ทุกอย่างลงตัว
- เพื่อให้มีความสมดุล
- จะต้องวางอย่างมีเหตุผล
เพื่อนร่วมงานชาวจีนของเราได้ทำสิ่งนี้ให้เราแล้วบางส่วน ดังนั้นช่องใส่แบตเตอรี่ขนาดใหญ่จึงถูกวางไว้ตรงกลางและล้อขับเคลื่อนจะอยู่ใต้นั้นโดยประมาณ บอร์ดอื่นๆ ทั้งหมดมีน้ำหนักเบาและสามารถวางไว้ที่ขอบได้
ความแตกต่าง:
- แชสซีจากชุดอุปกรณ์มีรูจากโรงงานจำนวนมาก แต่ฉันยังไม่ทราบว่าตรรกะอยู่ในนั้นอย่างไร เครื่องยนต์และแบตเตอรี่ได้รับการติดตั้งอย่างแน่นหนาโดยไม่มีปัญหา จากนั้น "การปรับแต่ง" จึงเริ่มต้นด้วยการเจาะรูใหม่เพื่อยึดบอร์ดตัวใดตัวหนึ่ง
- ชั้นวางทองเหลืองและตัวยึดอื่นๆ จากพื้นที่เก็บของช่วยได้มาก (บางครั้งเราต้องเอามันออก)
- ฉันส่งบัสบาร์จากแต่ละบอร์ดผ่านที่หนีบ (ฉันพบมันในที่เก็บอีกครั้ง) สะดวกมาก สายไฟทุกเส้นวางอย่างดีไม่ห้อย
บล็อกส่วนบุคคล
ตอนนี้ฉันจะผ่านไป บล็อก และฉันจะบอกคุณเกี่ยวกับแต่ละคนเป็นการส่วนตัว
ช่องใส่แบตเตอรี่
เห็นได้ชัดว่าหุ่นยนต์จะต้องมีแหล่งพลังงานที่ดี ตัวเลือกอาจแตกต่างกัน ฉันเลือกตัวเลือกที่มีแบตเตอรี่ AA 4 ก้อน โดยรวมแล้วจะให้แรงดันไฟฟ้าประมาณ 5 V และแรงดันไฟฟ้านี้สามารถนำไปใช้กับพิน 5V ของบอร์ด Arduino ได้โดยตรง (ข้ามโคลง)
แน่นอน ฉันมีข้อควรระวังอยู่บ้าง แต่วิธีนี้ใช้ได้ผลค่อนข้างมาก
เนื่องจากจำเป็นต้องใช้พลังงานทุกที่ เพื่อความสะดวกฉันจึงสร้างตัวเชื่อมต่อสองตัวที่กึ่งกลางของหุ่นยนต์: อันหนึ่ง "กระจาย" พื้น (ทางขวา) และอันที่สอง - 5 V (ทางซ้าย)
มอเตอร์และไดรเวอร์
ขั้นแรกเกี่ยวกับการติดตั้งเครื่องยนต์ ตัวยึดนั้นผลิตจากโรงงาน แต่มีความคลาดเคลื่อนสูง กล่าวอีกนัยหนึ่ง เครื่องยนต์สามารถโยกเยกไปทางซ้ายและขวาได้สองสามมิลลิเมตร สำหรับงานของเรา สิ่งนี้ไม่สำคัญ แต่ในบางสถานที่อาจมีผลกระทบ (หุ่นยนต์จะเริ่มเคลื่อนที่ไปด้านข้าง) ในกรณีที่ฉันตั้งค่าเครื่องยนต์ให้ขนานกันอย่างเคร่งครัดและยึดด้วยกาว
ในการควบคุมมอเตอร์ดังที่ฉันเขียนไว้ข้างต้น จะใช้ไดรเวอร์ L298N ตามเอกสารประกอบ มอเตอร์แต่ละตัวมีพินสามพิน: อันหนึ่งสำหรับเปลี่ยนความเร็วและพินหนึ่งคู่สำหรับทิศทางการหมุน มีจุดสำคัญประการหนึ่งที่นี่ ปรากฎว่าหากแรงดันไฟฟ้าอยู่ที่ 5 V แสดงว่าการควบคุมความเร็วไม่ทำงาน! นั่นคือมันไม่หมุนเลยหรือหมุนไปสูงสุด นี่คือคุณลักษณะที่ทำให้ฉัน "ฆ่า" สองสามเย็น ในที่สุดฉันก็พบการกล่าวถึงที่ไหนสักแห่งในฟอรัมแห่งหนึ่ง
โดยทั่วไปแล้ว ฉันต้องการความเร็วในการหมุนต่ำเมื่อหมุนหุ่นยนต์ เพื่อให้มีเวลาสแกนพื้นที่ แต่เนื่องจากไม่มีความคิดนี้เกิดขึ้น ฉันจึงต้องทำให้มันแตกต่างออกไป: เลี้ยวเล็ก ๆ - หยุด - เลี้ยว - หยุด ฯลฯ อีกครั้งไม่สง่างามนัก แต่ใช้งานได้
ฉันจะเพิ่มที่นี่ด้วยว่าหลังจากการไล่ตามแต่ละครั้ง หุ่นยนต์จะเลือกทิศทางแบบสุ่มสำหรับการหมุนใหม่ (ตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา)
เซ็นเซอร์อัลตราโซนิก
ฮาร์ดแวร์อีกชิ้นหนึ่งที่เราต้องหาวิธีแก้ปัญหาประนีประนอม เซ็นเซอร์อัลตราโซนิกสร้างตัวเลขที่ไม่เสถียรบนสิ่งกีดขวางจริง จริงๆแล้วสิ่งนี้เป็นไปตามที่คาดหวัง ตามหลักการแล้ว มันใช้งานได้ในการแข่งขันที่มีพื้นผิวเรียบสม่ำเสมอและตั้งฉากกัน แต่หากขาของใครบางคน “กะพริบ” อยู่ข้างหน้า จำเป็นต้องมีการประมวลผลเพิ่มเติม
ฉันตั้งค่าการประมวลผลเช่นนี้
หลังจากการประมวลผลทั้งหมด เราจะได้ระยะห่างจากวัตถุที่ใกล้ที่สุด หากน้อยกว่าค่าเกณฑ์ที่กำหนด เราจะเปิดสัญญาณเตือนและขับตรงไปยัง "ผู้บุกรุก"
ไฟกะพริบและไซเรน
บางทีองค์ประกอบที่ง่ายที่สุดของทั้งหมดข้างต้น สามารถดูได้ในรูปถ่ายด้านบน ไม่มีอะไรจะเขียนเกี่ยวกับฮาร์ดแวร์ที่นี่ ดังนั้นตอนนี้เรามาดูกันดีกว่า รหัส.
โปรแกรมควบคุม
ฉันไม่เห็นประเด็นในการอธิบายโค้ดโดยละเอียดใครต้องการมัน - ลิงก์อยู่ท้ายบทความทุกอย่างสามารถอ่านได้ค่อนข้างดี แต่จะเป็นการดีที่จะอธิบายโครงสร้างทั่วไป
สิ่งแรกที่เราต้องเข้าใจคือหุ่นยนต์เป็นอุปกรณ์แบบเรียลไทม์ จำให้แม่นยำยิ่งขึ้นเพราะทั้งก่อนและตอนนี้ฉันยังทำงานด้านอิเล็กทรอนิกส์อยู่ ดังนั้นเราจึงลืมความท้าทายไปทันที ล่าช้า ()ซึ่งพวกเขาชอบที่จะใช้เป็นตัวอย่างสเก็ตช์ และเพียงแค่ "หยุด" โปรแกรมตามระยะเวลาที่กำหนด ตามที่ผู้มีประสบการณ์แนะนำ เราจะแนะนำตัวจับเวลาสำหรับแต่ละบล็อกแทน ช่วงเวลาที่ต้องการผ่านไปแล้ว - ดำเนินการแล้ว (เพิ่มความสว่างของ LED, เปิดเครื่องยนต์และอื่น ๆ )
ตัวจับเวลาสามารถเชื่อมต่อถึงกันได้ ตัวอย่างเช่น ทวีตเตอร์ทำงานพร้อมกันกับไฟกะพริบ สิ่งนี้ทำให้โปรแกรมง่ายขึ้นเล็กน้อย
โดยธรรมชาติแล้ว เราจะแยกทุกอย่างออกเป็นฟังก์ชันแยกกัน (ไฟกะพริบ เสียง การเลี้ยว การก้าวไปข้างหน้า และอื่นๆ) ถ้าคุณไม่ทำเช่นนี้ คุณจะไม่สามารถทราบได้ว่าอะไรมาจากไหนและที่ไหน
ความแตกต่างของการสอน
ฉันทำทุกอย่างที่อธิบายไว้ข้างต้นในเวลาว่างในตอนเย็น ฉันใช้เวลาประมาณสามสัปดาห์กับหุ่นยนต์อย่างสบายๆ เรื่องอาจจะจบลงที่นี่ แต่ฉันสัญญาว่าจะบอกคุณเกี่ยวกับการทำงานกับเด็กด้วย ในวัยนี้จะทำอะไรได้บ้าง?
ทำงานตามคำแนะนำ
ขั้นแรกเราตรวจสอบแต่ละรายละเอียดแยกกัน - LED, ทวีตเตอร์, มอเตอร์, เซ็นเซอร์ ฯลฯ มีตัวอย่างสำเร็จรูปจำนวนมาก - บางส่วนถูกต้องในสภาพแวดล้อมการพัฒนา ส่วนตัวอย่างอื่นๆ สามารถพบได้บนอินเทอร์เน็ต นี่ทำให้ฉันมีความสุขอย่างแน่นอน เราใช้รหัส เชื่อมต่อชิ้นส่วน ตรวจสอบให้แน่ใจว่าใช้งานได้ จากนั้นเราเริ่มเปลี่ยนให้เหมาะกับงานของเรา เด็กทำการเชื่อมต่อตามแผนภาพและอยู่ภายใต้การดูแลของฉัน ดีจัง. คุณต้องสามารถทำงานได้อย่างเคร่งครัดตามคำแนะนำ
ลำดับงาน (“จากเฉพาะไปเป็นทั่วไป”)
นี่เป็นจุดที่ยาก คุณต้องเรียนรู้ว่าโครงการขนาดใหญ่ (“สร้างหุ่นยนต์”) ประกอบด้วยงานเล็กๆ (“เชื่อมต่อเซ็นเซอร์” “เชื่อมต่อมอเตอร์”...) และงานเหล่านั้น ในทางกลับกัน ยังประกอบด้วยขั้นตอนที่เล็กกว่า (“ค้นหา โปรแกรม” “เชื่อมต่อบอร์ด” ", "ดาวน์โหลดเฟิร์มแวร์"...) ด้วยการปฏิบัติงานในระดับที่ต่ำกว่าที่เข้าใจได้ไม่มากก็น้อยเราจะ "ปิด" งานระดับกลางและจากงานเหล่านั้นผลลัพธ์โดยรวมก็จะเกิดขึ้น ฉันอธิบายแล้ว แต่ฉันคิดว่าการตระหนักรู้จะไม่มาในเร็วๆ นี้ ที่ไหนสักแห่งอาจเป็นช่วงวัยรุ่น
การติด
การเจาะ เกลียว สกรู น็อต การบัดกรี และกลิ่นของขัดสน - เราจะไปอยู่ที่ไหนไม่ได้ถ้าไม่มีมัน? เด็กได้รับทักษะพื้นฐาน "การทำงานกับหัวแร้ง" - เขาสามารถประสานการเชื่อมต่อได้หลายอย่าง (ฉันช่วยได้นิดหน่อยฉันจะไม่ซ่อนมัน) อย่าลืมคำอธิบายด้านความปลอดภัย
งานคอมพิวเตอร์
ฉันเขียนโปรแกรมสำหรับหุ่นยนต์ แต่ก็ยังสามารถบรรลุผลลัพธ์ที่น่าพอใจได้
ครั้งแรก: ภาษาอังกฤษ พวกเขาเพิ่งเริ่มเรียนที่โรงเรียน ดังนั้นเราจึงพยายามดิ้นรนเพื่อหาว่าพิชาลกา มิกัลกา ยาร์คอส และการทับศัพท์อื่นๆ คืออะไร อย่างน้อยเราก็เข้าใจสิ่งนี้ ฉันจงใจไม่ใช้คำภาษาอังกฤษเป็นภาษาแม่เนื่องจากเรายังไม่ถึงระดับนี้
ประการที่สอง: งานที่มีประสิทธิภาพ เราสอนการใช้คีย์ลัดและวิธีการดำเนินการมาตรฐานอย่างรวดเร็ว เป็นระยะๆ ตอนที่เรากำลังเขียนโปรแกรม ฉันกับลูกชายสลับที่กัน และฉันก็บอกว่าต้องทำอะไร (ทดแทน ค้นหา ฯลฯ) ฉันต้องทำซ้ำซ้ำแล้วซ้ำเล่า: “ดับเบิลคลิกเลือก”, “กด Shift ค้างไว้”, “กด Ctrl ค้างไว้” และอื่นๆ กระบวนการเรียนรู้ที่นี่ไม่เร็วนัก แต่ฉันคิดว่าทักษะจะค่อยๆ สะสม "ในคอร์เทกซ์"
ข้อความที่ซ่อนอยู่คุณสามารถพูดได้ว่าข้างต้นเกือบจะชัดเจน แต่จริงๆ แล้ว ฤดูใบไม้ร่วงนี้ฉันมีโอกาสสอนวิทยาการคอมพิวเตอร์ในชั้นประถมศึกษาปีที่ 9 ที่โรงเรียนแห่งหนึ่ง นั่นน่ากลัวมาก นักเรียนไม่ทราบสิ่งพื้นฐานเช่น Ctrl + Z, Ctrl + C และ Ctrl + V การเลือกข้อความขณะกด Shift ค้างไว้หรือดับเบิลคลิกที่คำ เป็นต้น แม้ว่าพวกเขาจะเรียนวิทยาการคอมพิวเตอร์อยู่ปีสามก็ตาม... ลองสรุปของคุณเอง
ประการที่สาม: การพิมพ์แบบสัมผัส ฉันมอบหมายความคิดเห็นในรหัสให้เด็กพิมพ์ (ให้เขาฝึก) เราวางมือของเราอย่างถูกต้องทันทีเพื่อให้นิ้วของเราค่อยๆจดจำตำแหน่งของกุญแจ
อย่างที่คุณเห็น เรายังเพิ่งเริ่มต้น เราจะฝึกฝนทักษะและความรู้ของเราต่อไปซึ่งจะเป็นประโยชน์ในชีวิต
อีกอย่างเกี่ยวกับอนาคต...
การพัฒนาต่อไป
หุ่นยนต์ถูกสร้างขึ้น ขับเคลื่อน กะพริบ และส่งเสียงบี๊บ อะไรตอนนี้? ด้วยแรงบันดาลใจจากสิ่งที่เราได้รับ เราวางแผนที่จะปรับปรุงให้ดียิ่งขึ้น มีแนวคิดที่จะสร้างรีโมตคอนโทรลเหมือนกับรถแลนด์โรเวอร์บนดวงจันทร์ คงจะน่าสนใจถ้านั่งอยู่ที่รีโมทคอนโทรลเพื่อควบคุมการเคลื่อนไหวของหุ่นยนต์ที่กำลังขับอยู่ในสถานที่ที่แตกต่างไปจากเดิมอย่างสิ้นเชิง แต่นั่นจะเป็นอีกเรื่องหนึ่ง...
และท้ายที่สุดแล้วฮีโร่ของบทความนี้ (วิดีโอโดยคลิก):
ขอบคุณ!