สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: การก่อสร้าง
- ขั้นตอนที่ 2: การเดินสายไฟ
- ขั้นตอนที่ 3: ทฤษฎีการควบคุม
- ขั้นตอนที่ 4: การใช้ MPU 6050
- ขั้นตอนที่ 5: การเข้ารหัส
- ขั้นตอนที่ 6: ขั้นตอนการปรับแต่ง PID
- ขั้นตอนที่ 7: สรุป
วีดีโอ: หุ่นยนต์ทรงตัวสองล้อ: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
คำแนะนำนี้จะผ่านขั้นตอนการออกแบบและสร้างสำหรับหุ่นยนต์ทรงตัว หมายเหตุ ฉันแค่อยากจะบอกว่าหุ่นยนต์ที่ทรงตัวได้นั้นไม่ใช่แนวคิดใหม่ และพวกมันถูกสร้างขึ้นและจัดทำเป็นเอกสารโดยผู้อื่น ฉันต้องการใช้โอกาสนี้เพื่อแบ่งปันการตีความหุ่นยนต์ตัวนี้กับคุณ
หุ่นยนต์ทรงตัวคืออะไร?
หุ่นยนต์ทรงตัวคือระบบที่ใช้ข้อมูลการวัดแรงเฉื่อย ซึ่งรวบรวมจากเซ็นเซอร์ในตัวเพื่อปรับตำแหน่งให้ตั้งตรงอย่างต่อเนื่อง
มันทำงานอย่างไร?
การเปรียบเทียบง่ายๆ ที่ต้องพิจารณาคือลูกตุ้มคว่ำ โดยจุดศูนย์กลางมวลอยู่เหนือจุดหมุน อย่างไรก็ตาม ในกรณีของเรา เรากำลังจำกัดลูกตุ้มให้อิสระ 1 ดีกรีด้วยการหมุนแกนเดียว ในกรณีของเราคือแกนหมุนของสองล้อ เนื่องจากสิ่งรบกวนใด ๆ จะทำให้หุ่นยนต์ล้ม เราจึงต้องการวิธีรักษาสมดุลของหุ่นยนต์อย่างแข็งขัน นี่คือจุดเริ่มต้นของอัลกอริธึมแบบวงปิด (ตัวควบคุม PID) ของเรา โดยรู้ว่าหุ่นยนต์ของเราตกลงไปในทิศทางใด เราสามารถปรับทิศทางการหมุนของมอเตอร์เพื่อให้ระบบมีความสมดุล
อัลกอริทึมแบบวงปิดทำงานอย่างไร
หลักการพื้นฐานในการรักษาสมดุลของหุ่นยนต์คือ หากหุ่นยนต์ล้มไปข้างหน้า มันจะชดเชยด้วยการขยับส่วนล่างของหุ่นยนต์ไปข้างหน้าเพื่อจับตัวเองและให้อยู่ในแนวตั้ง ในทำนองเดียวกัน หากหุ่นยนต์ถอยหลัง มันจะชดเชยด้วยการขยับส่วนล่างของหุ่นยนต์ไปข้างหลังเพื่อจับตัวมันเอง
ดังนั้น เราต้องทำสองสิ่งที่นี่ อย่างแรก เราต้องคำนวณมุมเอียง (Roll) ที่หุ่นยนต์กำลังประสบอยู่ และด้วยเหตุนี้ เราจึงต้องควบคุมทิศทางการหมุนของมอเตอร์
เราจะวัดมุมเอียงได้อย่างไร?
ในการวัดมุมเอียง เราจะใช้หน่วยวัดแรงเฉื่อย โมดูลเหล่านี้รวมมาตรความเร่งและไจโรสโคป
- มาตรความเร่งเป็นอุปกรณ์แม่เหล็กไฟฟ้าที่วัดความเร่งที่เหมาะสม นี่คือความเร่งของร่างกายในกรอบพักชั่วขณะ
- ไจโรสโคปเป็นอุปกรณ์ไฟฟ้าที่ใช้วัดความเร็วเชิงมุมและใช้เพื่อกำหนดทิศทางของอุปกรณ์
อย่างไรก็ตาม ปัญหาในการใช้เซ็นเซอร์ดังกล่าวคือ:
- มาตรความเร่งมีเสียงดังมากแต่จะสม่ำเสมอเมื่อเวลาผ่านไป มุมจะแตกต่างกันไปตามการเคลื่อนไหวในแนวนอนอย่างกะทันหัน
- ในทางกลับกันค่าไจโรสโคปจะลอยไปตามกาลเวลา แต่ในตอนแรกมันค่อนข้างแม่นยำ
สำหรับคำแนะนำนี้ ฉันจะไม่ใช้ตัวกรองแทนที่จะใช้ Digital Motion Processing (DMP) ออนบอร์ด คนอื่นใช้ฟิลเตอร์เสริมเพื่อรับสัญญาณที่ราบรื่น คุณสามารถเลือกวิธีใดก็ได้ที่คุณต้องการ เมื่อหุ่นยนต์สมดุลกับการใช้งานอย่างใดอย่างหนึ่ง
เสบียง
อะไหล่:
- Arduino Pro Mini 3.3V 8 พร้อม ATMEGA328. 8 เมกะเฮิร์ตซ์
- FT232RL 3.3V 5.5V FTDI USB เป็นโมดูลอะแดปเตอร์อนุกรม TTL
- โมดูล GY-521 พร้อม MPU-6050
- มอเตอร์เกียร์ไมโคร N20 6V - 300rpm
- ตัวขับมอเตอร์ L298N
- LM2596S ตัวแปลงบั๊ก DC เป็น DC
- แบตเตอรี่ (แบตเตอรี่ลิเธียมไอออนแบบรีชาร์จ 9.7V)
- สายรัดแบตเตอรี่
- แผงวงจร PCB ต้นแบบสองตัว
- สายจัมเปอร์หมุดส่วนหัวชายและหญิง
เครื่องมือ:
- หัวแร้งและหัวแร้ง
- ตัวเว้นวรรคหกเหลี่ยมไนลอน
- ชุดไขควงพรีซิชั่น
- เครื่องพิมพ์ 3 มิติ
ขั้นตอนที่ 1: การก่อสร้าง
เนื่องจากฉันสามารถเข้าถึงเครื่องพิมพ์ 3 มิติได้ ฉันจึงตัดสินใจพิมพ์ 3 มิติของแชสซีและใช้ส่วนแยกเพื่อเชื่อมต่อทุกอย่างเข้าด้วยกัน
หุ่นยนต์ประกอบด้วย 4 ชั้น
- ชั้นล่างเชื่อมต่อมอเตอร์และมีจุดยึดสำหรับโมดูลไดรเวอร์มอเตอร์ L298N
- เลเยอร์ถัดไปเป็นที่เก็บบอร์ดต้นแบบที่มี Arduino pro mini และหัวต่อที่บัดกรีไว้
- ชั้นที่สามติดตั้ง IMU
- ชั้นบนสุดซึ่งฉันเรียกว่า "ชั้นกันชน" ยึดแบตเตอรี่ ตัวแปลงบั๊ก และสวิตช์การเงิน
หลักการออกแบบของฉันคือทำให้ทุกอย่างเป็นแบบแยกส่วน เหตุผลก็คือหากมีสิ่งผิดปกติเกิดขึ้นกับส่วนประกอบตัวใดตัวหนึ่ง ฉันสามารถเปลี่ยนมันได้อย่างง่ายดาย หรือถ้าฉันต้องการส่วนประกอบสำหรับโครงการอื่น ฉันสามารถใช้มันได้อย่างง่ายดายโดยไม่ต้องกังวลว่าจะไม่สามารถใช้ระบบได้อีก
ขั้นตอนที่ 2: การเดินสายไฟ
ฉันบัดกรีพินส่วนหัวของเพศหญิงเข้ากับบอร์ดที่สมบูรณ์แบบเพื่อจับคู่กับพินส่วนหัวของ Arduino pro mini ต่อจากนี้ ฉันบัดกรีหมุดส่วนหัวของตัวผู้บนบอร์ดเพื่อให้สามารถเข้าถึง I/O ได้ ส่วนประกอบที่เหลือถูกติดตั้งเข้ากับเฟรมที่พิมพ์ 3 มิติและเชื่อมต่อโดยใช้สายจัมเปอร์
ขั้นตอนที่ 3: ทฤษฎีการควบคุม
ตอนนี้เราไปยังแกนหลักของโครงการ เพื่อให้หุ่นยนต์มีความสมดุล เราจำเป็นต้องสร้างสัญญาณควบคุมที่เหมาะสมเพื่อขับเคลื่อนมอเตอร์ไปในทิศทางที่ถูกต้องและด้วยความเร็วที่ถูกต้องเพื่อให้หุ่นยนต์มีความสมดุลและมั่นคง ในการดำเนินการนี้ เราจะใช้อัลกอริธึมลูปควบคุมยอดนิยมที่เรียกว่าคอนโทรลเลอร์ PID ตามที่ตัวย่อแนะนำว่ามีสามคำในตัวควบคุมนี้ สิ่งเหล่านี้คือเงื่อนไขตามสัดส่วน ปริพันธ์ และอนุพันธ์ ซึ่งแต่ละค่ามาพร้อมกับสัมประสิทธิ์ที่กำหนดอิทธิพลที่มีต่อระบบ บ่อยครั้งส่วนที่ใช้เวลานานที่สุดในการใช้งานคอนโทรลเลอร์คือการปรับค่าเกนสำหรับแต่ละระบบที่ไม่ซ้ำกันเพื่อให้ได้การตอบสนองที่เหมาะสมที่สุด
- คำตามสัดส่วนจะคูณข้อผิดพลาดโดยตรงเพื่อให้ได้ผลลัพธ์ ดังนั้นยิ่งข้อผิดพลาดมากเท่าใดการตอบสนองก็จะยิ่งมากขึ้น
- ระยะอินทิกรัลสร้างการตอบสนองตามการสะสมของข้อผิดพลาดเพื่อลดข้อผิดพลาดในสภาวะคงตัว ยิ่งระบบไม่สมดุลนานขึ้น มอเตอร์ก็จะตอบสนองอย่างรวดเร็ว
- อนุพันธ์คืออนุพันธ์ของข้อผิดพลาดที่ใช้ในการทำนายการตอบสนองในอนาคต และในการทำเช่นนั้นจะลดการสั่นเนื่องจากการพุ่งเกินสถานะคงตัว
หลักการพื้นฐานของอัลกอริธึมนี้คือการคำนวณมุมเอียงอย่างต่อเนื่องซึ่งเป็นความแตกต่างระหว่างตำแหน่งที่ต้องการกับตำแหน่งปัจจุบัน ซึ่งเรียกว่าข้อผิดพลาด จากนั้นใช้ค่าความผิดพลาดนี้และคำนวณผลรวมของการตอบสนองตามสัดส่วน ปริพันธ์ และอนุพันธ์เพื่อรับเอาต์พุต ซึ่งเป็นสัญญาณควบคุมที่ส่งไปยังมอเตอร์ เป็นผลให้หากข้อผิดพลาดมีขนาดใหญ่สัญญาณควบคุมที่ส่งไปยังมอเตอร์จะหมุนมอเตอร์ด้วยความเร็วสูงเพื่อให้อยู่ในสถานะที่สมดุล ในทำนองเดียวกัน หากข้อผิดพลาดมีขนาดเล็ก สัญญาณควบคุมจะหมุนมอเตอร์ด้วยความเร็วต่ำเพื่อให้หุ่นยนต์มีความสมดุล
ขั้นตอนที่ 4: การใช้ MPU 6050
ห้องสมุด MPU6050
github.com/jrowberg/i2cdevlib/tree/master/…
การปรับเทียบออฟเซ็ตเซ็นเซอร์บางตัวเท่านั้นที่เป็นแบบจำลองของกันและกัน ดังนั้น หากคุณทดสอบ MPU 6050 สองตัว คุณอาจได้รับค่าความเร่งและไจโรสโคปที่แตกต่างกันเมื่อวางนิ่งบนพื้นผิวเดียวกัน เพื่อเอาชนะการชดเชยมุมคงที่นี้ เราต้องฉลองเซ็นเซอร์แต่ละตัวที่เราใช้ เรียกใช้สคริปต์นี้:
www.i2cdevlib.com/forums/topic/96-arduino-…
เขียนโดย Luis Rodenas เราจะได้รับการชดเชย ข้อผิดพลาดออฟเซ็ตสามารถกำจัดได้โดยการกำหนดค่าออฟเซ็ตในรูทีน setup()
การใช้ Digital Motion Processor
MPU6050 ประกอบด้วย DMP (Digital Motion Processor)
DMP คืออะไร? คุณสามารถนึกถึง DMP เป็นไมโครคอนโทรลเลอร์ออนบอร์ดที่ประมวลผลการเคลื่อนไหวที่ซับซ้อนจากไจโรสโคป 3 แกนและมาตรความเร่ง 3 แกนบน mpu6050 โดยใช้อัลกอริธึมฟิวชั่นการเคลื่อนไหวของตัวเอง การถ่ายการประมวลผลที่ Arduino จะทำอย่างอื่น
วิธีการใช้งาน? หากต้องการทราบวิธีใช้ DMP ให้ทำตามตัวอย่างภาพร่าง MPU6050_DMP6 ที่มาพร้อมกับไลบรารี MPU6050 (ใน Arduino IDE: File->Example->MPU6050->MPU6050_DMP6) นี่เป็นโอกาสที่ดีในการตรวจสอบเซ็นเซอร์ของคุณใช้งานได้จริงและการเดินสายนั้นถูกต้อง
ขั้นตอนที่ 5: การเข้ารหัส
ฉันใช้ Arduino IDE และอินเทอร์เฟซ FTDI เพื่อตั้งโปรแกรม Arduino pro mini
การใช้ตัวอย่าง Sketch(MPU6050_DMP6) ที่มาพร้อมกับไลบรารี MPU6050 เป็นรหัสฐานของฉัน ฉันได้เพิ่มฟังก์ชัน PID() และ MotorDriver()
เพิ่มห้องสมุด
- MPU6050: ในการใช้เซ็นเซอร์ MPU6050 เราจะต้องดาวน์โหลดไลบรารีสำหรับนักพัฒนา I2C จาก Jeff Rowberg และเพิ่มลงในโฟลเดอร์ Arduino "libraries" ที่พบในไฟล์โปรแกรมบนคอมพิวเตอร์ของคุณ
- Wire: เราต้องการไลบรารี Wire เพื่อให้เราสื่อสารกับอุปกรณ์ I2C ได้
รหัสหลอก
รวมห้องสมุด:
- Wire.h
- MPU6050
- I2Cdev.h
เริ่มต้นตัวแปร ค่าคงที่ และอ็อบเจกต์
ติดตั้ง ()
- ตั้งค่าโหมดพินสำหรับควบคุมมอเตอร์
- ตั้งค่าโหมดพินสำหรับ LED แสดงสถานะ
- เริ่มต้น MPU6050 และตั้งค่าออฟเซ็ต
พีไอดี ()
คำนวณค่า PID
MotorDriver (การตอบสนอง PID)
ใช้ค่า PID เพื่อควบคุมความเร็วและทิศทางของมอเตอร์
วน ()
- รับข้อมูลจาก DMP
- เรียก PID() กับ MotorDriver() functions
ขั้นตอนที่ 6: ขั้นตอนการปรับแต่ง PID
นี่เป็นส่วนที่น่าเบื่อที่สุดของโครงการและต้องใช้ความอดทนเล็กน้อย เว้นแต่คุณจะโชคดีมาก นี่คือขั้นตอน:
- ตั้งค่าเทอม I และ D เป็น 0
- จับหุ่นยนต์ปรับ P เพื่อให้หุ่นยนต์เพิ่งเริ่มสั่นเกี่ยวกับตำแหน่งสมดุล
- ด้วยการตั้งค่า P ให้เพิ่ม I เพื่อให้หุ่นยนต์เร่งความเร็วได้เร็วขึ้นเมื่อไม่สมดุล ด้วยการปรับค่า P และ I อย่างเหมาะสม หุ่นยนต์ควรจะสามารถปรับสมดุลตนเองได้อย่างน้อยสองสามวินาที โดยมีการสั่นบ้าง
- สุดท้ายเพิ่ม D ลดการสั่น
หากความพยายามครั้งแรกไม่ได้ผลลัพธ์ที่น่าพอใจ ให้ทำซ้ำขั้นตอนด้วยค่า P ที่ต่างออกไป นอกจากนี้ โปรดทราบด้วยว่าคุณสามารถปรับแต่งค่า PID ได้ในภายหลัง เพื่อเพิ่มประสิทธิภาพเพิ่มเติม ค่าที่นี่ขึ้นอยู่กับฮาร์ดแวร์ อย่าแปลกใจหากคุณได้รับค่า PID ที่ใหญ่หรือเล็กมาก
ขั้นตอนที่ 7: สรุป
มอเตอร์เกียร์ขนาดเล็กที่ใช้ต้องชะลอความเร็วเพื่อตอบสนองต่อสิ่งรบกวนขนาดใหญ่ และเนื่องจากระบบมีน้ำหนักเบาเกินไป จึงไม่มีแรงเฉื่อยเพียงพอที่จะได้เอฟเฟกต์ลูกตุ้มที่ต้องการ ดังนั้นหากหุ่นยนต์เอนไปข้างหน้า มันก็จะเอนเอียงไปที่มุมแล้ววิ่งไปข้างหน้า ในที่สุด ล้อที่พิมพ์ 3 มิติก็เป็นทางเลือกที่ไม่ดีเพราะพวกมันลื่นไถล
คำแนะนำสำหรับการปรับปรุง:
- มอเตอร์ที่เร็วกว่าด้วยแรงบิดที่สูงกว่า เช่น สำหรับมอเตอร์กระแสตรง พิกัดแรงดันไฟฟ้าจะสูงกว่าแรงบิดที่สูงกว่า
- รับแบตเตอรี่ที่หนักกว่าหรือเพียงแค่ขยับมวลให้สูงขึ้นเล็กน้อย
- เปลี่ยนล้อที่พิมพ์ 3 มิติด้วยล้อยางเพื่อเพิ่มการยึดเกาะ
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
Proyecto Laboratorio De Mecatrónica (หุ่นยนต์ทรงตัวสองล้อ): 6 ขั้นตอน
Proyecto Laboratorio De Mecatrónica (หุ่นยนต์ทรงตัวสองล้อ): En este proyecto se mostrara, el funcionamiento y el como hacer para elaborar un "หุ่นยนต์ทรงตัวสองล้อ" paso a paso y con explicación และ concejos. Este es un sistema que containe en que el robot no se debe caer, se debe de mantener en el