ในบทช่วยสอนนี้เราจะออกแบบRobotic Arm ที่ใช้Arduino Uno จากการ์ดบอร์ด และเซอร์โวมอเตอร์บางรุ่น รายละเอียดขั้นตอนการก่อสร้างทั้งหมดได้อธิบายไว้ด้านล่าง ในโครงการ Arduino Uno นี้ได้รับการตั้งโปรแกรมให้ควบคุมเซอร์โวมอเตอร์ซึ่งทำหน้าที่เป็นข้อต่อของแขนหุ่นยนต์ การตั้งค่านี้ยังมีลักษณะเป็นRobotic Craneหรือเราสามารถแปลงเป็นปั้นจั่นได้โดยทำการปรับแต่งง่ายๆ โครงการนี้จะเป็นประโยชน์สำหรับผู้เริ่มต้นที่ต้องการเรียนรู้การพัฒนา Simple Robot ในราคาประหยัดหรือเพียงแค่ต้องการเรียนรู้การทำงานกับ Arduino และเซอร์โวมอเตอร์
นี้Arduino แขนหุ่นยนต์สามารถควบคุมได้โดยสี่มิเตอร์แนบไปแต่ละมิเตอร์ใช้ในการควบคุมแต่ละเซอร์โว คุณสามารถย้ายเซอร์โวเหล่านี้ได้โดยการหมุนกระถางเพื่อเลือกวัตถุบางอย่างด้วยการฝึกฝนบางอย่างคุณสามารถเลือกและย้ายวัตถุจากที่หนึ่งไปยังอีกที่หนึ่งได้อย่างง่ายดาย เราใช้เซอร์โวแรงบิดต่ำที่นี่ แต่คุณสามารถใช้เซอร์โวที่มีประสิทธิภาพมากขึ้นเพื่อเลือกของหนักได้ กระบวนการทั้งหมดได้แสดงให้เห็นอย่างดีในวิดีโอตอนท้าย ตรวจสอบโครงการหุ่นยนต์อื่น ๆ ของเราได้ที่นี่
ส่วนประกอบที่จำเป็น
- Arduino Uno
- ตัวเก็บประจุ 1000uF (4 ชิ้น)
- 100nF Capacitor (4 ชิ้น)
- เซอร์โวมอเตอร์ (SG 90- สี่ชิ้น)
- หม้อ 10K - ตัวต้านทานแบบแปรผัน (4 ชิ้น)
- แหล่งจ่ายไฟ (5v - ควรเป็นสอง)
เซอร์โวมอเตอร์
ก่อนอื่นเรามาพูดถึงเซอร์โวมอเตอร์กันเล็กน้อย เซอร์โวมอเตอร์ส่วนใหญ่จะใช้เมื่อจำเป็นต้องมีการเคลื่อนที่หรือตำแหน่งของเพลาที่ถูกต้อง สิ่งเหล่านี้ไม่ได้เสนอสำหรับการใช้งานความเร็วสูง เซอร์โวมอเตอร์ถูกนำเสนอสำหรับความเร็วต่ำแรงบิดปานกลางและการใช้งานตำแหน่งที่แม่นยำ ดังนั้นมอเตอร์เหล่านี้จะดีที่สุดสำหรับการออกแบบแขนหุ่นยนต์
เซอร์โวมอเตอร์มีให้เลือกหลายรูปแบบและขนาด เราจะใช้เซอร์โวมอเตอร์ขนาดเล็กที่นี่เราใช้เซอร์โว SG90 สี่ตัว เซอร์โวมอเตอร์ส่วนใหญ่จะมีสายไฟสายหนึ่งสำหรับแรงดันไฟฟ้าบวกอีกสายหนึ่งสำหรับกราวด์และสุดท้ายคือการกำหนดตำแหน่ง สายสีแดงเชื่อมต่อกับพลังงานสายสีดำเชื่อมต่อกับกราวด์และสายสีเหลืองเชื่อมต่อกับสัญญาณ อ่านบทช่วยสอนเกี่ยวกับการควบคุมเซอร์โวมอเตอร์โดยใช้ Arduino เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ ใน Arduino เรามีไลบรารีที่กำหนดไว้ล่วงหน้าเพื่อควบคุมเซอร์โวดังนั้นจึงเป็นเรื่องง่ายมากที่จะควบคุมเซอร์โวซึ่งคุณจะได้เรียนรู้ไปพร้อมกับบทช่วยสอนนี้
โครงสร้างแขนหุ่นยนต์
ใช้พื้นผิวเรียบและมั่นคงเช่นโต๊ะหรือกระดานการ์ดแข็ง จากนั้นวางเซอร์โวมอเตอร์ไว้ตรงกลางแล้วติดกาวเข้าที่ ตรวจสอบให้แน่ใจว่าองศาการหมุนอยู่ในพื้นที่ที่แสดงในรูป เซอร์โวนี้ทำหน้าที่เป็นฐานของแขน
วางกระดาษแข็งชิ้นเล็ก ๆ ไว้ด้านบนของเซอร์โวตัวแรกจากนั้นวางเซอร์โวตัวที่สองลงบนบอร์ดนี้แล้วติดกาวเข้าที่ การหมุนเซอร์โวต้องตรงกับแผนภาพ
นำกระดาษแข็งบางส่วนมาตัดเป็นชิ้นขนาด 3 ซม. x 11 ซม. ตรวจสอบให้แน่ใจว่าชิ้นงานไม่นิ่ม ตัดรูสี่เหลี่ยมที่ปลายด้านหนึ่ง (เว้น 0.8 ซม. จากด้านล่าง) เพียงพอที่จะใส่เซอร์โวอีกตัวและที่ปลายอีกด้านให้พอดีกับเฟืองเซอร์โวให้แน่นด้วยสกรูหรือด้วยกาว จากนั้นใส่เซอร์โวตัวที่สามในรูแรก
ตอนนี้ตัดกระดาษแข็งอีกชิ้นที่มีความยาวดังแสดงในรูปด้านล่างและติดกาวอีกอันที่ด้านล่างของชิ้นนี้
ตอนนี้กาวเซอร์โวตัวที่สี่และตัวสุดท้ายที่ขอบของชิ้นที่สองดังแสดงในรูป
ด้วยสิ่งนี้สองชิ้นเข้าด้วยกันดูเหมือน
เมื่อเราแนบการตั้งค่านี้เข้ากับฐานควรมีลักษณะดังนี้
ใกล้จะเสร็จแล้ว เราต้องทำเบ็ดเพื่อจับและหยิบวัตถุ เหมือนมือหุ่นยนต์ สำหรับตะขอให้ตัดบอร์ดการ์ดอีกสองชิ้นที่มีความยาว 1 ซม. x 7 ซม. และ 4 ซม. x 5 ซม. กาวเข้าด้วยกันดังแสดงในรูปและติดเฟืองสุดท้ายที่ขอบมาก
ติดตั้งชิ้นส่วนนี้ไว้ด้านบนและด้วยเหตุนี้เราจึงได้สร้างแขนหุ่นยนต์ของเรา
ด้วยสิ่งนี้การออกแบบแขนหุ่นยนต์ขั้นพื้นฐานของเราจึงเสร็จสมบูรณ์และนั่นคือวิธีที่เราสร้างแขนหุ่นยนต์ต้นทุนต่ำของเรา ตอนนี้เชื่อมต่อวงจรใน breadboard ตามแผนภาพวงจร
แผนภาพวงจรและคำอธิบายการทำงาน:
การเชื่อมต่อวงจรสำหรับArduino Uno Robotic Armแสดงไว้ด้านล่าง
แรงดันไฟฟ้าข้ามตัวต้านทานตัวแปรไม่เป็นเชิงเส้นอย่างสมบูรณ์ มันจะมีเสียงดัง ดังนั้นเพื่อกรองสัญญาณรบกวนนี้ตัวเก็บประจุจะถูกวางไว้บนตัวต้านทานแต่ละตัวดังแสดงในรูป
ตอนนี้เราจะป้อนแรงดันไฟฟ้าที่ได้จากตัวต้านทานตัวแปรเหล่านี้ (แรงดันไฟฟ้าซึ่งแสดงถึงการควบคุมตำแหน่ง) เข้าสู่ช่อง ADC ของ Arduino เราจะใช้ช่อง ADC สี่ช่องของ UNO จาก A0 ถึง A3 สำหรับสิ่งนี้ หลังจากการเริ่มต้น ADC เราจะมีค่าดิจิทัลของพ็อตที่แสดงถึงตำแหน่งที่ผู้ใช้ต้องการ เราจะนำค่านี้ไปจับคู่กับตำแหน่งเซอร์โว
Arduino มีช่อง ADC หกช่อง เราใช้แขนหุ่นยนต์สี่ตัว UNO ADC มีความละเอียด 10 บิตดังนั้นค่าจำนวนเต็มตั้งแต่ 0-1023 (2 ^ 10 = 1024 ค่า) ซึ่งหมายความว่าจะแมปแรงดันไฟฟ้าอินพุตระหว่าง 0 ถึง 5 โวลต์เป็นค่าจำนวนเต็มระหว่าง 0 ถึง 1023 ดังนั้นสำหรับทุกๆ (5/1024 = 4.9mV) ต่อหน่วย เรียนรู้เพิ่มเติมเกี่ยวกับการทำแผนที่ระดับแรงดันไฟฟ้าโดยใช้ช่อง ADC ใน Arduino ที่นี่
ตอนนี้สำหรับ UNO ในการแปลงสัญญาณอนาล็อกเป็นสัญญาณดิจิตอลเราจำเป็นต้องใช้ ADC Channel ของ Arduino Uno ด้วยความช่วยเหลือของฟังก์ชันด้านล่าง:
1. analogRead (พิน); 2. analogReference (); 3. analogReadResolution (บิต);
Arduino ช่อง ADC มี ค่าอ้างอิงที่เริ่มต้นของ 5V ซึ่งหมายความว่าเราสามารถให้แรงดันไฟฟ้าอินพุตสูงสุด 5V สำหรับการแปลง ADC ที่ช่องอินพุตใดก็ได้ เนื่องจากเซ็นเซอร์บางตัวให้แรงดันไฟฟ้าตั้งแต่ 0-2.5V ดังนั้นด้วยการอ้างอิง 5V เราจึงมีความแม่นยำน้อยลงดังนั้นเราจึงมีคำสั่งที่ช่วยให้เราสามารถเปลี่ยนค่าอ้างอิงนี้ได้ ดังนั้นสำหรับการเปลี่ยนค่าอ้างอิงเรามี “ analogReference ();”
ตามค่าเริ่มต้นเราจะได้รับความละเอียด ADC สูงสุดของบอร์ดซึ่งเป็น 10 บิตความละเอียดนี้สามารถเปลี่ยนแปลงได้โดยใช้คำสั่ง (“ analogReadResolution (bits);”)
ในวงจรมือหุ่นยนต์ของเราเราได้ปล่อยแรงดันอ้างอิงนี้ไว้เป็นค่าเริ่มต้นดังนั้นเราจึงสามารถอ่านค่าจากช่อง ADC ได้โดยการเรียกใช้ฟังก์ชัน "analogRead (พิน)" โดยตรงใน ที่นี้ "พิน" หมายถึงพินที่เราเชื่อมต่อสัญญาณแอนะล็อก เราต้องการอ่าน“ A0” ค่าจาก ADC สามารถจัดเก็บเป็นจำนวนเต็มเป็น int SENSORVALUE0 = analogRead (A0); .
ตอนนี้เรามาพูดถึง SERVOกันก่อน Arduino Uno มีคุณสมบัติที่ช่วยให้เราสามารถควบคุมตำแหน่งเซอร์โวได้เพียงแค่ให้ค่าองศา สมมติว่าเราต้องการให้เซอร์โวอยู่ที่ 30 เราสามารถแทนค่าในโปรแกรมได้โดยตรง ไฟล์ส่วนหัว SERVO ( Servo.h ) จะดูแลการคำนวณอัตราส่วนหน้าที่ทั้งหมดภายใน
# รวม
คำสั่งแรกแสดงถึงไฟล์ส่วนหัวสำหรับการควบคุม SERVO MOTOR คำสั่งที่สองคือการตั้งชื่อเซอร์โว เราปล่อยให้มันเป็น servo0 เหมือนกับที่เราจะใช้สี่ตัว คำสั่งที่สามระบุว่าขาสัญญาณเซอร์โวเชื่อมต่ออยู่ที่ไหน ต้องเป็นพิน PWM ที่นี่เรากำลังใช้ PIN3 สำหรับเซอร์โวตัวแรก คำสั่งที่สี่ให้คำสั่งสำหรับการกำหนดตำแหน่งเซอร์โวมอเตอร์เป็นองศา ถ้าให้ 30 เซอร์โวมอเตอร์จะหมุน 30 องศา
ตอนนี้เรามีตำแหน่งเซอร์โว SG90 ตั้งแต่ 0 ถึง 180 และค่า ADC อยู่ระหว่าง 0-1023 เราจะใช้ฟังก์ชันพิเศษที่จับคู่ค่าทั้งสองโดยอัตโนมัติ
sensorvalue0 = แผนที่ (sensorvalue0, 0, 1023, 0, 180);
คำสั่งนี้แผนที่ทั้งสองค่าโดยอัตโนมัติและเก็บผลในจำนวนเต็ม'servovalue0'
นี่คือวิธีที่เราได้ควบคุมเซอร์โวในโครงการของแขนหุ่นยนต์ของเราโดยใช้ Arduino ตรวจสอบรหัสเต็มด้านล่าง
วิธีใช้แขนหุ่นยนต์:
มีสี่หม้อให้กับผู้ใช้ และด้วยการหมุนหม้อทั้งสี่นี้เราให้แรงดันไฟฟ้าแปรผันที่ช่อง ADC ของ UNO ดังนั้นค่าดิจิทัลของ Arduino จึงอยู่ภายใต้การควบคุมของผู้ใช้ ค่าดิจิตอลเหล่านี้จะถูกแมปเพื่อปรับตำแหน่งเซอร์โวมอเตอร์จึงตำแหน่งเซอร์โวอยู่ในการควบคุมของผู้ใช้และโดยการหมุนใช้กระถางเหล่านี้สามารถย้ายข้อต่อของแขนหุ่นยนต์และสามารถเลือกหรือคว้าวัตถุใด ๆ