সুচিপত্র:

Arduino Base Pick and Place Robot: 8 ধাপ
Arduino Base Pick and Place Robot: 8 ধাপ

ভিডিও: Arduino Base Pick and Place Robot: 8 ধাপ

ভিডিও: Arduino Base Pick and Place Robot: 8 ধাপ
ভিডিও: Amazing arduino project 2024, নভেম্বর
Anonim
Arduino Base Pick and Place রোবট
Arduino Base Pick and Place রোবট
Arduino Base Pick and Place রোবট
Arduino Base Pick and Place রোবট
Arduino Base Pick and Place রোবট
Arduino Base Pick and Place রোবট

শিক্ষার্থীদের বৃহত্তর স্কেল রোবটিক্স হ্যাক করতে এবং ব্যাংক ভাঙা ছাড়াই ছোট স্থানীয় উৎপাদনকে তাদের প্রক্রিয়ায় রোবট ব্যবহার করতে সক্ষম করার জন্য আমি একটি অতি সস্তা (1000 ডলারের কম) শিল্প রোবট বাহু তৈরি করেছি। 15 থেকে 50 বছর বয়সী মানুষদের তৈরি এবং তৈরি করা সহজ।

ধাপ 1: উপাদান প্রয়োজনীয়তা

উপাদান প্রয়োজনীয়তা
উপাদান প্রয়োজনীয়তা
উপাদান প্রয়োজনীয়তা
উপাদান প্রয়োজনীয়তা
উপাদান প্রয়োজনীয়তা
উপাদান প্রয়োজনীয়তা
উপাদান প্রয়োজনীয়তা
উপাদান প্রয়োজনীয়তা

1. Arduino + Shield + Pins + Cables

2. মোটর কন্ট্রোলার: dm860A (Ebay)

3. Steppermotor: 34hs5435c-37b2 (Ebay)

4. M8x45+60+70 বোল্ট এবং M8 বোল্ট।

5. 12 মিমি পাতলা পাতলা কাঠ।

6. 5 মিমি নাইলন

7. অন্ধ washers 8mm।

8. কাঠের স্ক্রু 4.5x40 মিমি।

9. এম 3 কাউন্টার ডুবে গেছে, 10. 12v পাওয়ার সাপ্লাই

11. servo মোটর ড্রাইভার arduino

ধাপ 2: গুই ডাউনলোড করুন

zapmaker.org/projects/grbl-controller-3-0/

github.com/grbl/grbl/wiki/Using-Grbl

ধাপ 3: সংযোগ

সংযোগ
সংযোগ
সংযোগ
সংযোগ
সংযোগ
সংযোগ

ছবিতে দেওয়া তারগুলি সংযুক্ত করুন এটি আপনার জন্য আরও বেশি বোঝার।

আমাদের মোটর চালককে Arduino এবং অন্যান্য সংযোগকারীর সাথে সংযুক্ত করতে হবে যা আপনার রোবট অনুযায়ী প্রয়োজন।

ধাপ 4: ফার্মওয়্যার আপলোড করুন এবং Arduino ড্যাশবোর্ডে কোড ফলাফল দেখুন

Arduino - GRBL এ ফার্মওয়্যার ইনস্টল করা হচ্ছে:

github.com/grbl/grbl/wiki/Compiling-Grbl

দ্রষ্টব্য: আরডুইনোতে সংকলন করার সময় আপনি একটি দ্বন্দ্ব পেতে পারেন। আপনার লাইব্রেরি ফোল্ডার (../documents/Arduino/libraries) থেকে অন্য সব লাইব্রেরি সরান।

ফার্মওয়্যার সেটআপ

নতুন সময়সীমার জন্য সক্ষম সেট করুন। একটি সিরিয়াল সংযোগ ব্যবহার করুন এবং লিখুন:

$1=255

হোমিং সেট করুন:

$22=1

সিরিয়ালটিকে বড: 115200 সেট করতে ভুলবেন না

দরকারী জি-কোড

রোবটের জন্য জিরো পয়েন্ট সেট করুন:

G10 L2 Xnnn Ynnn Znnn

জিরো পয়েন্ট ব্যবহার করুন:

G54

সেন্টার রোবোটের সাধারণ সূচনা:

G10 L2 X1.5 Y1.2 Z1.1

G54

দ্রুত অবস্থানে রোবট সরান:

G0 Xnnn Ynnn Znnn

উদাহরণ:

G0 X10.0 Y3.1 Z4.2 (ফেরত)

নির্দিষ্ট গতিতে রোবটকে অবস্থানে সরান:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (ফেরত)

F 10 (slooooow) এবং 600 (দ্রুত) এর মধ্যে হওয়া উচিত

X, Y এবং Z এর জন্য ডিফল্ট ইউনিট

GRBL এর জন্য ডিফল্ট স্টেপ/ইউনিট সেটিংস (250 স্টেপ/ইউনিট) ব্যবহার করার সময় এবং

স্টেপার ড্রাইভ 800 ধাপের জন্য সেট আপ করা হয়েছে

+- 32 ইউনিট = +- 180 ডিগ্রী

প্রসেসিং কোডের উদাহরণ:

এই কোডটি Arduino GRBL এর সাথে সরাসরি যোগাযোগ করতে পারে।

github.com/damellis/gctrl

সিরিয়ালটিকে বড: 115200 সেট করতে ভুলবেন না

আরডুনিওতে কোড uoload

java.awt.event. KeyEvent আমদানি করুন;

javax.swing. JOptionPane আমদানি করুন;

আমদানি প্রক্রিয়াকরণ সিরিয়াল।*;

সিরিয়াল পোর্ট = নাল;

// আপনার অপারেটিং সিস্টেমের জন্য উপযুক্ত লাইন নির্বাচন করুন এবং সংশোধন করুন

// ইন্টারেক্টিভ পোর্ট ব্যবহার করতে শূন্য হিসাবে ছেড়ে দিন (প্রোগ্রামে 'p' টিপুন)

স্ট্রিং পোর্টনাম = নাল;

// স্ট্রিং পোর্টনেম = সিরিয়াল.লিস্ট () [0]; // ম্যাক ওএস এক্স

// স্ট্রিং পোর্ট নাম = "/dev/ttyUSB0"; // লিনাক্স

// স্ট্রিং পোর্ট নাম = "COM6"; // উইন্ডোজ

বুলিয়ান স্ট্রিমিং = মিথ্যা;

ভাসা গতি = 0.001;

স্ট্রিং gcode;

int i = 0;

অকার্যকর openSerialPort ()

{

যদি (portname == null) রিটার্ন;

if (port! = null) port.stop ();

পোর্ট = নতুন সিরিয়াল (এটি, পোর্ট নাম, 115200);

port.bufferUntil ('\ n');

}

অকার্যকর selectSerialPort ()

{

স্ট্রিং ফলাফল = (স্ট্রিং) JOptionPane.showInputDialog (এই, "আপনার Arduino বোর্ডের সাথে সামঞ্জস্যপূর্ণ সিরিয়াল পোর্ট নির্বাচন করুন।", "সিরিয়াল পোর্ট নির্বাচন করুন", JOptionPane. PLAIN_MESSAGE, খালি, Serial.list (), 0);

যদি (ফলাফল! = শূন্য) {

পোর্ট নাম = ফলাফল;

openSerialPort ();

}

}

অকার্যকর সেটআপ()

{

আকার (500, 250);

openSerialPort ();

}

অকার্যকর ড্র ()

{

পটভূমি (0);

পূরণ (255);

int y = 24, dy = 12;

পাঠ্য ("নির্দেশাবলী", 12, y); y += dy;

পাঠ্য ("পি: সিরিয়াল পোর্ট নির্বাচন করুন", 12, y); y += dy;

টেক্সট ("1: প্রতি জগতে 0.001 ইঞ্চি (1 মিলি) গতি সেট করুন", 12, y); y += dy;

টেক্সট ("2: প্রতি জগতে 0.010 ইঞ্চি (10 মিলি) গতি সেট করুন", 12, y); y += dy;

টেক্সট ("3: প্রতি জগতে 0.100 ইঞ্চি (100 মিলি) গতি সেট করুন", 12, y); y += dy;

পাঠ্য ("তীর কী: x-y সমতলে জগ", 12, y); y += dy;

টেক্সট ("পেজ আপ এবং পেজ ডাউন: জেড অক্ষের মধ্যে জগ", 12, y); y += dy;

পাঠ্য ("$: প্রদর্শন grbl সেটিংস", 12, y); y+= dy;

পাঠ্য ("h: বাড়ি যান", 12, y); y += dy;

পাঠ্য ("0: শূন্য মেশিন (বর্তমান অবস্থানে হোম সেট)", 12, y); y += dy;

টেক্সট ("g: stream a g-code file", 12, y); y += dy;

পাঠ্য ("x: স্ট্রিমিং জি-কোড বন্ধ করুন (এটি অবিলম্বে নয়)", 12, y); y += dy;

y = উচ্চতা - dy;

পাঠ্য ("বর্তমান জগ গতি:" + গতি + "প্রতি ধাপ ইঞ্চি", 12, y); y -= dy;

পাঠ্য ("বর্তমান সিরিয়াল পোর্ট:" + পোর্ট নাম, 12, y); y -= dy;

}

অকার্যকর চাপা ()

{

যদি (কী == '1') গতি = 0.001;

যদি (কী == '2') গতি = 0.01;

যদি (কী == '3') গতি = 0.1;

যদি (! স্ট্রিমিং) {

যদি (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + speed + "Y0.000 Z0.000 / n");

যদি (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + speed + "Y0.000 Z0.000 / n");

যদি (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + speed + "Z0.000 / n");

যদি (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + speed + "Z0.000 / n");

যদি (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + speed + "\ n");

যদি (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + speed + "\ n");

// if (key == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

যদি (কী == 'v') port.write ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");

// if (key == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");

যদি (কী == 's') port.write ("$ 3 = 10 / n");

যদি (কী == 'ই') port.write ("$ 16 = 1 / n");

যদি (কী == 'ডি') port.write ("$ 16 = 0 / n");

যদি (কী == '0') openSerialPort ();

if (key == 'p') selectSerialPort ();

যদি (কী == '$') port.write ("$$ / n");

if (key == 'h') port.write ("$ H / n");

}

যদি (! স্ট্রিমিং && কী == 'জি') {

gcode = null; আমি = 0;

ফাইল ফাইল = নাল;

println ("ফাইল লোড হচ্ছে …");

selectInput ("প্রক্রিয়া করার জন্য একটি ফাইল নির্বাচন করুন:", "fileSelected", ফাইল);

}

যদি (কী == 'x') স্ট্রিমিং = মিথ্যা;

}

অকার্যকর ফাইল নির্বাচন (ফাইল নির্বাচন) {

যদি (নির্বাচন == শূন্য) {

println ("উইন্ডো বন্ধ ছিল বা ব্যবহারকারী হিট বাতিল।");

} অন্য {

println ("ব্যবহারকারী নির্বাচিত" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

যদি (gcode == null) রিটার্ন;

স্ট্রিমিং = সত্য;

স্ট্রিম ();

}

}

অকার্যকর প্রবাহ ()

{

যদি (! স্ট্রিমিং) ফিরে আসে;

যখন (সত্য) {

যদি (i == gcode.length) {

স্ট্রিমিং = মিথ্যা;

প্রত্যাবর্তন;

}

if (gcode .trim ()। length () == 0) i ++;

অন্যথায় বিরতি;

}

println (gcode );

port.write (gcode + '\ n');

আমি ++;

}

অকার্যকর সিরিয়াল ইভেন্ট (সিরিয়াল পি)

{

স্ট্রিং s = p.readStringUntil ('\ n');

println (s.trim ());

যদি (s.trim ()। startWith ("ok")) stream ();

যদি (s.trim ()। startWith ("error")) stream (); // XXX: সত্যিই?

}

ধাপ 5: প্লাইউড শীটে সমস্ত অংশ ডিজাইন এবং প্রিন্ট করুন

প্লাইউড শীটে সমস্ত অংশ ডিজাইন এবং প্রিন্ট করুন
প্লাইউড শীটে সমস্ত অংশ ডিজাইন এবং প্রিন্ট করুন

অটোক্যাডে রোবট অংশ এবং নকশা ডাউনলোড করুন এবং 12 মিমি পাতলা পাতলা পাতায় মুদ্রণ করুন এবং সমাপ্তি এবং নকশা অংশ। যদি কারও ক্যাড ফাইলের প্রয়োজন হয় plz কমেন্ট সেকশন বক্সে মন্তব্য দিন আমি আপনাকে সরাসরি পাঠাব।

ধাপ 6: সমাবেশ

সমাবেশ
সমাবেশ
সমাবেশ
সমাবেশ

সমস্ত অংশ সংগ্রহ করুন এবং চিত্রের ক্রম অনুসারে সাজান যা দেওয়া হয়েছে এবং চিত্রের চিত্রটি অনুসরণ করুন।

ধাপ 7: GBRL সেটিংস সেটআপ করুন

সেটিং যা আমাদের রোবটগুলিতে কাজ করতে প্রমাণিত হয়েছে।

$ 0 = 10 (স্টেপ পালস, ইউজেসি) $ 1 = 255 (স্টেপ অলস বিলম্ব, এমএসসি) $ 2 = 7 (স্টেপ পোর্ট ইনভার্ট মাস্ক: 00000111) $ 3 = 7 (ডিআইআর পোর্ট ইনভার্ট মাস্ক: 00000111) $ 4 = 0 (স্টেপ ইনভার্ট, বুল) 5 $ 0 = 0 (রিপোর্ট ইঞ্চি, বুল) $ 20 = 0 (সফট লিমিটস, বুল) $ 21 = 0 (হার্ড লিমিটস, বুল) $ 22 = 1 (হোমিং চক্র, বুল) $ 23 = 0 (হোমিং দির ইনভার্ট মাস্ক: 00000000) $ 24 = 100.000 (হোমিং ফিড, মিমি/মিনিট) $ 25 = 500.000 (হোমিং সিক, মিমি/মিনিট) $ 26 = 250 (হোমিং ডিবাউন্স, এমএসসি) $ 27 = 1.000 (হোমিং পুল-অফ, মিমি) $ 100 = 250.000 (এক্স, স্টেপ/মিমি) $ 101 = 250.000 (y, step/mm) $ 102 = 250.000 (z, step/mm) $ 110 = 500.000 (x max rate, mm/min) $ 111 = 500.000 (y max rate, mm/min) $ 112 = 500.000 (z সর্বোচ্চ হার, মিমি/মিনিট) $ 120 = 10.000 (x accel, mm/sec^2) $ 121 = 10.000 (y accel, mm/sec^2) $ 122 = 10.000 (z accel, mm/sec^2) $ 130 = 200.000 (x সর্বোচ্চ ভ্রমণ, মিমি) $ 131 = 200.000 (y সর্বোচ্চ ভ্রমণ, মিমি) $ 132 = 200.000 (z সর্বোচ্চ ভ্রমণ, মিমি)

ধাপ 8: চূড়ান্ত কোড আপলোড করুন এবং Arduino Uno সফটওয়্যার ড্যাশবোর্ডে ভার্চুয়াল ফলাফল দেখুন

// ইউনিট: সিএম

ভাসা b_height = 0;

ভাসা a1 = 92;

ভাসমান a2 = 86;

ভাসা snude_len = 20;

বুলিয়ান ডোজ = মিথ্যা;

float base_angle; // = 0;

ভাসা arm1_angle; // = 0;

float arm2_angle; // = 0;

ভাসমান bx = 60; // = 25;

দ্বারা ভাসা = 60; // = 0;

ভাসা bz = 60; // = 25;

ভাসা x = 60;

ভাসা y = 60;

ভাসা z = 60;

ভাসা q;

ভাসা গ;

ভাসা V1;

ভাসা V2;

ভাসা V3;

ভাসা V4;

ভাসা V5;

অকার্যকর সেটআপ() {

আকার (700, 700, P3D);

ক্যাম = নতুন PeasyCam (এই, 300);

cam.setMinimumDistance (50);

cam.set সর্বোচ্চ দূরত্ব (500);

}

অকার্যকর ড্র () {

// ligninger:

y = (mouseX - width/2)*(- 1);

x = (মাউসওয়াই - উচ্চতা/2)*(- 1);

bz = z;

দ্বারা = y;

bx = x;

ভাসান y3 = sqrt (bx*bx+by*by);

c = sqrt (y3*y3 + bz*bz);

V1 = acos ((a2*a2+a1*a1-c*c)/(2*a2*a1));

V2 = acos ((c*c+a1*a1-a2*a2)/(2*c*a1));

V3 = acos ((y3*y3+c*c-bz*bz)/(2*y3*c));

q = V2 + V3;

arm1_angle = q;

V4 = রেডিয়ান (90.0) - q;

V5 = রেডিয়ান (180) - V4 - রেডিয়ান (90);

arm2_angle = রেডিয়ান (180.0) - (V5 + V1);

base_angle = ডিগ্রী (atan2 (bx, by));

arm1_angle = ডিগ্রী (arm1_angle);

arm2_angle = ডিগ্রী (arm2_angle);

// println (দ্বারা, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

arm1_angle = 23;

arm2_angle = 23;

*/

// ইন্টারেক্টিভ:

// যদি (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

//} অন্য

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot (base_angle,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));

// println (base_angle + "," + arm1_angle + "," + arm2_angle);

}

অকার্যকর draw_robot (float base_angle, float arm1_angle, float arm2_angle)

{

rotateX (1.2);

ঘোরান Z (-1.2);

পটভূমি (0);

আলো();

pushMatrix ();

// ভিত্তি

পূরণ করুন (150, 150, 150);

box_corner (50, 50, b_height, 0);

ঘোরান (রেডিয়ান (বেস_এঙ্গেল), 0, 0, 1);

// এআরএম 1

পূরণ করুন (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// এআরএম 2

পূরণ (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// স্নুড

পূরণ করুন (255, 150, 0);

box_corner (10, 10, snude_len, -arm1_angle -arm2_angle+90);

popMatrix ();

pushMatrix ();

float action_box_size = 100;

অনুবাদ করুন (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

অনুবাদ করুন (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

পূরণ করুন (255, 255, 0);

বাক্স (20);

popMatrix ();

পূরণ করুন (255, 255, 255, 50);

box (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

void box_corner (float w, float h, float d, float rotate)

{

ঘোরান (রেডিয়ান (ঘোরান), 1, 0, 0);

অনুবাদ করুন (0, 0, d/2);

বাক্স (w, h, d);

অনুবাদ করুন (0, 0, d/2);

}

অকার্যকর চাপা ()

{

যদি (কী == 'z')

{

doZ =! doZ;

}

যদি (কী == 'জ')

{

// সব শূন্য সেট করুন

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

যদি (কী == 'জি')

{

println (ডিগ্রী (V1));

println (ডিগ্রী (V5));

}

যদি (কীকোড == ইউপি)

{

z ++;

}

যদি (কীকোড == নিচে)

{

z -;

}

যদি (কী == 'ও')

{

y = 50;

z = 50;

println (q);

println (c, "c");

println (V1, "V1");

println (V2);

println (V3);

println (arm1_angle);

println (V4);

println (V5);

println (arm2_angle);

}

}

প্রস্তাবিত: