สารบัญ:

UCL - Embedded - Pick and Place: 4 ขั้นตอน
UCL - Embedded - Pick and Place: 4 ขั้นตอน

วีดีโอ: UCL - Embedded - Pick and Place: 4 ขั้นตอน

วีดีโอ: UCL - Embedded - Pick and Place: 4 ขั้นตอน
วีดีโอ: Andre Onana plays pickup after being sent home from the World Cup 🇨🇲 (via @Andre Onana) 2024, กรกฎาคม
Anonim
UCL - เอ็มเบ็ดเด็ด - Pick and Place
UCL - เอ็มเบ็ดเด็ด - Pick and Place

คำแนะนำนี้จะไปถึงวิธีการเลือกและวางหน่วย 2D และวิธีการเขียนโค้ด

ขั้นตอนที่ 1: คอมพิวเตอร์

คอมพิวเตอร์
คอมพิวเตอร์

1x Adrio Mega

สเต็ปเปอร์มอเตอร์ 2x (เราใช้ JLB Stepper Motor รุ่น 17H1352-P4130)

2x Stepper เครื่องยนต์ โมดูลบอร์ดควบคุมไดรฟ์ L298N สะพาน Dual H DC สำหรับ Arduino

1x เซอร์โวมอเตอร์ (เราไม่มีจุดนี้)

ตัวต้านทาน 3x 10k ohm

2x ล้อไนล่อน

แหล่งจ่ายไฟ 1x12v

ไม้สำหรับทำโครง

สายไฟ

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

การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง

สิ่งแรกระหว่างหน้าการก่อสร้างคือ deside ขนาดและรูปร่างของการเลือกและวาง mashine

ขั้นแรก เราสร้างไม้รูปทรงพื้นฐาน เราสร้างกรอบหยิบและวางขนาด 50 ซม. x 25 ซม. x 30 ซม. ทุกอย่างยกเว้นโครง สะพาน และแขนยก ผลิตโดยเครื่องตัดเลเซอร์

นี่คือลิงค์ไปยังไฟล์ทั้งหมด

แล้วเราก็อยากได้ระบบลูกรอก ที่นี่เราไปกับแหวน 50 มม. สองอันและวงแหวน 20 มม. หนึ่งอัน จากนั้นเราใส่พาราคอร์ดไว้ข้างๆ 20 มม. ด้วยกาว หลังจากนั้นเราบีบวงแหวน 50 มม. สองอันที่ด้านใดด้านหนึ่งของวงแหวน 20 มม.

20mm

50mm

จากนั้นเราต้องออกแบบสไลด์ไกด์ให้เข้ากับแขน ที่นี่เราทำสองด้านและแผ่นหลังหนึ่งแผ่น

แล้วติดกาวเป็นรูปตัวยู จากนั้นเราก็เชื่อมมันเข้ากับสะพาน

แผ่นข้าง

แผ่นหลัง

ตอนนี้ชิ้นส่วนสำหรับการขยับแขนขึ้นและลงเสร็จเรียบร้อยแล้ว เราจำเป็นต้องย้ายมันไปมา

เมื่อออกแบบสิ่งนี้ เราต้องแน่ใจว่าฟันเรียงชิดกัน ดังนั้นทั้งสองรายการจึงถูกสร้างขึ้นในสถานที่โครงการเดียวกัน

ขั้นตอนที่ 3: รหัส

รหัส
รหัส
รหัส
รหัส
รหัส
รหัส

การเขียนโปรแกรมค่อนข้างง่ายและประกอบด้วย 5 ส่วน

  1. การรวมไลบรารีและการตั้งค่าตัวแปรสำหรับการใช้งานภายในและ IO
  2. โหลดอินพุตไปที่Ram
  3. Sekvens เลือกการเคลื่อนไหวที่คุณต้องการ
  4. การควบคุมตำแหน่งสเต็ปเปอร์/เซอร์โว
  5. ผลงานสู่โลก

เราจะอธิบายอย่างถี่ถ้วนทุกส่วน แต่จำไว้ว่านี่เป็นเพียงหนึ่งในวิธีแก้ปัญหามากมาย

1: ก่อนการตั้งค่าเป็นโมฆะ เราได้รวมห้องสมุด 2 แห่งที่เราต้องการสำหรับโครงการนี้ สเต็ปเปอร์และเซอร์โว การใช้ Libraries ที่รวมไว้ ช่วยให้คุณไม่ต้องเรียนรู้ทุกรายละเอียดเกี่ยวกับสเต็ปเปอร์และเซอร์โวมอเตอร์

#รวม

#รวม

const int stepsPerRevolution = 200; // เปลี่ยนสิ่งนี้เพื่อให้พอดีกับจำนวนขั้นตอนต่อรอบสำหรับมอเตอร์ของคุณ

// เริ่มต้นไลบรารี stepper บนพิน 8 ถึง 11:

Stepper XStepper (stepsPerRevolution, 22, 23, 24, 25); Stepper YStepper (stepsPerRevolution, 28, 29, 30, 31); เซอร์โวกริปเปอร์; // สร้างวัตถุเซอร์โวเพื่อควบคุมเซอร์โว

กริปเปอร์จำเป็นต้องแนบในการตั้งค่าโมฆะ

การตั้งค่าเป็นโมฆะ () {// เริ่มต้นพอร์ตอนุกรม: Serial.begin (9600); กริปเปอร์.แนบ(9); // ติดเซอร์โวบนพิน 9 กับวัตถุเซอร์โว

ส่วนที่เหลือของส่วนนี้เป็นเพียงการตั้งค่าของตัวแปรและค่าคงที่

2: สิ่งแรกใน Void Loop คือการโหลดอินพุตที่ใช้ทั้งหมดไปยังตัวแปร สิ่งนี้ทำด้วยเหตุผลสองประการ เหตุผลแรกคือการจำกัดงานหนักของ CPU ในการอ่านอินพุต เหตุผลที่สอง ซึ่งสำคัญที่สุด และเพื่อให้แน่ใจว่าหากใช้อินพุตมากกว่าหนึ่งครั้ง จะมีค่าเท่ากันตลอดการสแกนทั้งหมด ทำให้การเขียนโค้ดที่สอดคล้องกันง่ายขึ้น นี่เป็นวิธีปฏิบัติทั่วไปในการเขียนโปรแกรม PLC แต่ก็ใช้ได้กับโปรแกรมฝังตัวด้วย

//----------------------------------- อินพุตไปยัง RAM -------------- Xend = digitalRead (34); เยน = digitalRead(35); Ena = digitalRead (36);

3: ในส่วนของโค้ด sekvens เราเพิ่งสร้าง sekvens ด้วยคำสั่ง Switch และ case ส่วน sekvens ให้สัญญาณไปยังส่วนควบคุมตำแหน่งของโค้ด ส่วนนี้สามารถปรับแต่งให้เข้ากับแอปพลิเคชันของคุณหรือใช้งานตามที่เป็นอยู่ได้อย่างง่ายดาย

4: ตำแหน่งของเซอร์โวถูกควบคุมโดยเซอร์โวเสรี และคำสั่ง if สำหรับกริปเปอร์เปิดและปิด

Stepper Control นั้นค่อนข้างยุ่งยากกว่าเล็กน้อย ฟังก์ชันเปรียบเทียบ Setpoint (ตำแหน่งที่คุณต้องการให้แขนไป) และตำแหน่งปัจจุบัน ถ้าตำแหน่งปัจจุบันเป็นคนรัก ฟังก์ชันจะเพิ่มไปยังตำแหน่งและขอให้ฟังก์ชัน Stepper liberi ดำเนินการขั้นตอนในเชิงบวก ตรงกันข้ามกับตำแหน่ง a ถึงสูง หากตำแหน่งเหมือนกับ Setpoint บิต XinPos จะถูกจัดให้อยู่ในระดับสูง และสเต็ปเปอร์จะหยุด

// SP คอนโทรล X

ถ้า (XstepCountXsp ไม่ใช่ Home){

XstepCount=XstepCount-1; Xstep=-1; XinPos = 0; } ถ้า (XstepCount==Xsp){ Xstep=0; XinPos = 1; }

5: เพิ่มส่วนท้ายของรหัสที่ควบคุมมอเตอร์ด้วยฟังก์ชัน liberi

//-------------------------- ผลลัพธ์---------------------- // ขั้นตอนหนึ่งขั้นตอน: XStepper.step(Xstep); // ขั้นตอนหนึ่งขั้นตอน: YStepper.step(Ystep);

Griper.write (GripSp);

ขั้นตอนที่ 4: ทำโดย

casp6099 - Casper Hartung Christensen

rasm616d - ราสมุส แฮนเซน

แนะนำ: