สารบัญ:

แขนกลควบคุมโดย Arduino และ PC: 10 ขั้นตอน
แขนกลควบคุมโดย Arduino และ PC: 10 ขั้นตอน

วีดีโอ: แขนกลควบคุมโดย Arduino และ PC: 10 ขั้นตอน

วีดีโอ: แขนกลควบคุมโดย Arduino และ PC: 10 ขั้นตอน
วีดีโอ: วิธีเขียนโปรแกรมควบคุมแขนกล EP1 2024, กรกฎาคม
Anonim
Image
Image
ทฤษฎีเบื้องหลังโครงการ
ทฤษฎีเบื้องหลังโครงการ

แขนกลที่ใช้กันอย่างแพร่หลายในอุตสาหกรรม ไม่ว่าจะเป็นงานประกอบ

การเชื่อมหรือแม้กระทั่งการเชื่อมประสานกับสถานีอวกาศนานาชาติ ISS ช่วยให้มนุษย์ทำงานหรือแทนที่มนุษย์โดยสิ้นเชิง แขนที่ฉันสร้างขึ้นนั้นเป็นตัวแทนของแขนหุ่นยนต์ที่มีขนาดเล็กกว่าที่ควรใช้สำหรับเคลื่อนย้ายวัตถุ มันถูกควบคุมโดย arduino pro mini ซึ่งมีไลบรารีในตัวสำหรับควบคุมเซอร์โวอยู่แล้ว เซอร์โวถูกควบคุมโดย PWM (Pulse Width Modulation) ซึ่งไม่ยากที่จะตั้งโปรแกรม แต่ไลบรารีนี้ทำให้ง่ายขึ้น ผู้ใช้สามารถควบคุมเซอร์โวเหล่านั้นได้ด้วยโพเทนชิโอมิเตอร์ที่ออกแบบมาเพื่อทำหน้าที่เป็นตัวแบ่งแรงดันไฟ หรือจากโปรแกรมบนพีซีที่ใช้ตัวเลื่อน 4 ตัวในการควบคุมเซอร์โวมอเตอร์

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

ขั้นตอนที่ 1: ทฤษฎีเบื้องหลังโครงการ

ทฤษฎีเบื้องหลังโครงการ
ทฤษฎีเบื้องหลังโครงการ

Arduino นั้นยอดเยี่ยมในลักษณะที่มีไลบรารี่ใช้งานฟรี สำหรับโปรเจ็กต์นี้ ฉันใช้ไลบรารี่ Servo.h ที่ทำให้การควบคุมเซอร์โวง่ายขึ้นมาก

เซอร์โวมอเตอร์ควบคุมโดย PWM -Pulse Width Modulation- ซึ่งหมายความว่าในการควบคุมเซอร์โว คุณต้องสร้างพัลส์แรงดันไฟสั้น เซอร์โวสามารถถอดรหัสความยาวของสัญญาณนี้และหมุนไปยังตำแหน่งที่กำหนด และนี่คือที่ที่ฉันใช้ห้องสมุดที่กล่าวถึงแล้ว ฉันไม่ต้องคำนวณความยาวของสัญญาณด้วยตัวเอง แต่ฉันใช้ฟังก์ชันของไลบรารีซึ่งฉันแค่ส่งพารามิเตอร์เป็นองศาและมันสร้างสัญญาณ

สำหรับการควบคุมเซอร์โว ฉันใช้โพเทนชิโอมิเตอร์ที่ทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้า บอร์ด Arduino มีตัวแปลงอนาล็อก/ดิจิตอลหลายตัวที่ฉันใช้สำหรับโครงการ โดยพื้นฐานแล้ว Arduino กำลังตรวจสอบแรงดันไฟบนพินกลางของโพเทนชิออมิเตอร์ และหากหมุนไปที่แรงดันด้านใดด้านหนึ่งจะเป็น 0 โวลต์ (ค่า = 0) และอีกด้านหนึ่งคือ 5 โวลต์ (ค่า = 1023) ค่านี้จะถูกปรับขนาดจากช่วง 0 - 1023 เป็น 0 - 180 จากนั้นจึงส่งผ่านไปยังฟังก์ชันที่กล่าวถึงแล้ว

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

ขั้นตอนที่ 2: การออกแบบ PCB

การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB
การออกแบบ PCB

ฉันออกแบบ PCB 2 อัน - อันหนึ่งสำหรับตัวควบคุมหลักที่ Arduino และพินสำหรับเซอร์โวและอันที่สองคือโพเทนชิโอมิเตอร์ เหตุผลสำหรับ 2 PCBs คือ ฉันต้องการควบคุมแขนหุ่นยนต์จากระยะที่ปลอดภัย ทั้งสองวงจรเชื่อมต่อด้วยสายเคเบิลที่มีความยาวที่กำหนด - ในกรณีของฉัน 80 ซม.

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

ขั้นตอนที่ 3: การสร้าง PCB

ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB

สำหรับการทำ PCB ฉันแนะนำให้คุณอ่านสิ่งนี้

ฉันใช้วิธี Iron on Glossy paper และได้ผลดี

จากนั้นฉันก็บัดกรีชิ้นส่วนบน PCB คุณจะเห็นว่าฉันใช้ซ็อกเก็ต Arduino ในกรณีที่ฉันต้องการในอนาคต

ขั้นตอนที่ 4: การออกแบบแขน

การออกแบบแขน
การออกแบบแขน
การออกแบบแขน
การออกแบบแขน
การออกแบบแขน
การออกแบบแขน

นี่ไม่ใช่ส่วนที่ยากที่สุดในการทำโครงการนี้

การตั้งค่าทั้งหมดทำจาก 8 ส่วนที่ 4 ไม่ได้เคลื่อนที่ชิ้นส่วน - กล่องสำหรับโพเทนชิโอมิเตอร์และฐานที่ Arduino ตั้งอยู่ - และอีกสี่ส่วนคือแขนตัวเอง ฉันจะไม่ลงรายละเอียดมาก ยกเว้นการออกแบบนั้นค่อนข้างใช้งานง่ายและเรียบง่าย ได้รับการออกแบบมาเพื่อให้พอดีกับ PCB และเซอร์โวแบบกำหนดเองของฉัน ซึ่งฉันจะรวมไว้ในรายการชิ้นส่วน

ขั้นตอนที่ 5: การพิมพ์ชิ้นส่วน

การพิมพ์ชิ้นส่วน
การพิมพ์ชิ้นส่วน
การพิมพ์ชิ้นส่วน
การพิมพ์ชิ้นส่วน
การพิมพ์ชิ้นส่วน
การพิมพ์ชิ้นส่วน

ชิ้นส่วนถูกพิมพ์บนเครื่องพิมพ์ Prusa บางหน้าต้องกราวด์เล็กน้อยและเจาะรูราง ต้องถอดเสาค้ำด้วย

ขั้นตอนที่ 6: นำทุกอย่างมารวมกัน

วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน

ในขั้นตอนนี้ตามที่หัวเรื่องบอกว่าฉันรวมทุกอย่างเข้าด้วยกัน

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

ในขั้นตอนต่อไปฉันทำสายแพแบบแบนเพื่อเชื่อมต่อทั้งสองบอร์ด

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

จากนั้นใช้สกรูยึดเซอร์โวด้านล่างที่ด้านล่างของกล่อง

หลังจากนั้นฉันวางส่วนบนของกล่องไว้ที่ส่วนล่างและเหมือนกับกล่องโพเทนชิออมิเตอร์ที่ฉันยึดด้วยสกรู 4 ตัว

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

และในขั้นสุดท้าย ฉันติดเทปไว้ที่ด้านล่างของกล่อง เพราะไม่เช่นนั้น มันอาจจะเลื่อนได้

ขั้นตอนที่ 7: การเขียนโปรแกรม Arduino

การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino

ฉันได้กล่าวไปแล้วว่าโปรแกรมทำงานอย่างไรในทางทฤษฎีที่อยู่เบื้องหลังโปรเจ็กต์ แต่ฉันจะแยกย่อยให้มากกว่านี้

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

ถัดไปมีการตั้งค่าเป็นโมฆะซึ่งมีการกำหนดพินของเซอร์โว

จากนั้นมี void loop - ส่วนหนึ่งของโปรแกรมที่วนซ้ำไม่รู้จบ ในส่วนนี้ โปรแกรมจะนำค่าจากโพเทนชิออมิเตอร์มาวัดและนำเข้าเอาต์พุต แต่มีปัญหาอย่างหนึ่งที่ค่าจากโพเทนชิออมิเตอร์กระโดดค่อนข้างน้อย ดังนั้นฉันจึงจำเป็นต้องเพิ่มตัวกรองที่ทำให้ค่าเฉลี่ยของ 5 ค่าสุดท้ายแล้วจึงแสดงผล สิ่งนี้จะป้องกันการโยกเยกที่ไม่ต้องการ

ส่วนสุดท้ายของโปรแกรมอ่านข้อมูลจากพอร์ตอนุกรมและตัดสินใจว่าจะทำอย่างไรตามข้อมูลที่ส่ง

เพื่อให้เข้าใจโค้ดอย่างถ่องแท้ ฉันแนะนำให้คุณไปที่เว็บไซต์ทางการของ Arduino

ขั้นตอนที่ 8: การเขียนโปรแกรมใน Python

การเขียนโปรแกรมใน Python
การเขียนโปรแกรมใน Python
การเขียนโปรแกรมใน Python
การเขียนโปรแกรมใน Python
การเขียนโปรแกรมใน Python
การเขียนโปรแกรมใน Python

ส่วนนี้ของโครงการนี้ไม่จำเป็น แต่ฉันคิดว่ามันให้คุณค่ากับโครงการนี้มากขึ้นเท่านั้น

Python มีไลบรารี่มากมายที่ใช้งานได้ฟรี แต่ในโปรเจ็กต์นี้ ฉันใช้เฉพาะ tkinter และซีเรียล Tkinter ใช้สำหรับ GUI (Graphical User Interface) และซีเรียลตามชื่อที่ใช้สำหรับการสื่อสารแบบอนุกรม

รหัสนี้สร้าง GUI พร้อมตัวเลื่อน 4 ตัวที่มีค่าต่ำสุด 0 และสูงสุด 180 อาจเป็นคำใบ้สำหรับคุณว่าเป็นองศาและตัวเลื่อนแต่ละตัวถูกตั้งโปรแกรมให้ควบคุมเซอร์โวตัวเดียว โปรแกรมนี้ค่อนข้างง่าย - ใช้ค่าและส่งไปยัง Arduino แต่วิธีการส่งนั้นน่าสนใจ หากคุณเลือกที่จะเปลี่ยนค่าของเซอร์โวตัวแรกเป็น 123 องศา มันจะส่งไปยังค่า Arduino 1123 หมายเลขแรกของแต่ละหมายเลขที่ส่งคือตัวบอกว่าเซอร์โวตัวใดกำลังจะถูกควบคุม Arduino มีโค้ดที่สามารถถอดรหัสสิ่งนี้และย้ายเซอร์โวที่ถูกต้องได้

ขั้นตอนที่ 9: รายการอะไหล่

รายการอะไหล่
รายการอะไหล่
  • Arduino Pro Mini 1 ชิ้น
  • เซอร์โว FS5106B 1 ชิ้น
  • เซอร์โว Futaba S3003 2 ชิ้น
  • หัวเข็ม 2x5 1 ชิ้น
  • หัวเข็ม 1x3 6 ชิ้น
  • ตัวเก็บประจุ 220uF 3 ชิ้น
  • ไมโครเซอร์โว FS90 1 ชิ้น
  • ขั้วต่อ AWP-10 2 ชิ้น
  • คอนเนคเตอร์ FC681492 1 ชิ้น
  • สวิตซ์ P-B100G1 1 ชิ้น
  • ลูกบ๊อกซ์ 2x14 1 ชิ้น
  • TTL-232R-5v - คอนเวอร์เตอร์ 1 ชิ้น
  • โพเทนชิโอมิเตอร์ B200K 4 ชิ้น
  • และสกรู แผ่นรอง และน็อตอีกมากมาย

ขั้นตอนที่ 10: ความคิดสุดท้าย

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

แนะนำ: