विषयसूची:

Arduino बेस पिक एंड प्लेस रोबोट: 8 कदम
Arduino बेस पिक एंड प्लेस रोबोट: 8 कदम

वीडियो: Arduino बेस पिक एंड प्लेस रोबोट: 8 कदम

वीडियो: Arduino बेस पिक एंड प्लेस रोबोट: 8 कदम
वीडियो: How to make a DIY Multi-functional robot car using Arduino | Step by step 2024, जुलाई
Anonim
Arduino बेस पिक एंड प्लेस रोबोट
Arduino बेस पिक एंड प्लेस रोबोट
Arduino बेस पिक एंड प्लेस रोबोट
Arduino बेस पिक एंड प्लेस रोबोट
Arduino बेस पिक एंड प्लेस रोबोट
Arduino बेस पिक एंड प्लेस रोबोट

मैंने छात्रों को बड़े पैमाने पर रोबोटिक्स को हैक करने में सक्षम बनाने के लिए और बैंक को तोड़े बिना अपनी प्रक्रियाओं में रोबोट का उपयोग करने के लिए छोटे स्थानीय प्रस्तुतियों को सक्षम करने के लिए एक सुपर सस्ता (1000 डॉलर से कम) औद्योगिक रोबोट आर्म बनाया है। 15 से 50 वर्ष के आयु वर्ग के लोगों को बनाना और बनाना आसान है।

चरण 1: घटकों की आवश्यकता

घटकों की आवश्यकता
घटकों की आवश्यकता
घटकों की आवश्यकता
घटकों की आवश्यकता
घटकों की आवश्यकता
घटकों की आवश्यकता
घटकों की आवश्यकता
घटकों की आवश्यकता

1. Arduino+ शील्ड + पिन + केबल्स

2. मोटरकंट्रोलर: dm860A (ईबे)

3. स्टेपरमोटर: 34hs5435c-37b2 (ईबे)

4. M8x45+60+70 बोल्ट और M8 बोल्ट।

5. 12 मिमी प्लाईवुड।

6. 5 मिमी नायलॉन।

7. ब्लाइंड वाशर 8 मिमी।

8. लकड़ी के पेंच 4.5x40 मिमी।

9. एम3 काउंटर डूब गया, 10. 12 वी बिजली की आपूर्ति

11. सर्वो मोटर चालक 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

नोट: Arduino में संकलन करते समय आपको विरोध हो सकता है। अपने पुस्तकालय फ़ोल्डर (../documents/Arduino/पुस्तकालय) से अन्य सभी पुस्तकालयों को हटा दें।

फर्मवेयर सेटअप

नए टाइमआउट के लिए सक्षम सेट करें। एक सीरियल कनेक्शन का प्रयोग करें और लिखें:

$1=255

होमिंग सेट करें:

$22=1

सीरियल को बॉड पर सेट करना याद रखें: ११५२००

उपयोगी जी-कोड

रोबोट के लिए शून्य बिंदु सेट करें:

G10 L2 Xnnn Ynnn Znnn

शून्य बिंदु का प्रयोग करें:

जी54

केंद्र रोबोट के लिए विशिष्ट आरंभीकरण:

G10 L2 X1.5 Y1.2 Z1.1

जी54

रोबोट को तेजी से स्थिति में ले जाएं:

G0 Xnnn Ynnn Znnn

उदाहरण:

G0 X10.0 Y3.1 Z4.2 (रिटर्न)

रोबोट को विशिष्ट गति से स्थिति में ले जाएं:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (वापसी)

F 10(sloooooow) और 600(तेज़) के बीच होना चाहिए

X, Y और Z. के लिए डिफ़ॉल्ट इकाइयाँ

जीआरबीएल के लिए डिफ़ॉल्ट चरण/इकाई सेटिंग्स (250 चरण/इकाई) का उपयोग करते समय और

800 स्टेप/रेव के लिए स्टेपर ड्राइव की स्थापना निम्नलिखित इकाइयाँ सभी अक्षों के लिए लागू होती हैं:

+- 32 इकाइयाँ = +- 180 डिग्री

प्रसंस्करण कोड उदाहरण:

यह कोड सीधे Arduino GRBL के साथ संचार कर सकता है।

github.com/damellis/gctrl

सीरियल को बॉड पर सेट करना याद रखें: ११५२००

कोड uoload ardunio. में

आयात java.awt.event. KeyEvent;

आयात javax.swing. JOptionPane;

आयात प्रसंस्करण। धारावाहिक। *;

सीरियल पोर्ट = शून्य;

// अपने ऑपरेटिंग सिस्टम के लिए उपयुक्त लाइन का चयन करें और संशोधित करें

// इंटरेक्टिव पोर्ट का उपयोग करने के लिए शून्य के रूप में छोड़ दें (प्रोग्राम में 'पी' दबाएं)

स्ट्रिंग पोर्टनाम = शून्य;

// स्ट्रिंग पोर्टनाम = सीरियल.लिस्ट () [0]; // मैक ओएस एक्स

// स्ट्रिंग पोर्टनाम = "/ dev/ttyUSB0"; // लिनक्स

// स्ट्रिंग पोर्टनाम = "COM6"; // खिड़कियाँ

बूलियन स्ट्रीमिंग = झूठा;

फ्लोट गति = 0.001;

स्ट्रिंग जीकोड;

इंट मैं = 0;

शून्य ओपनसेरियलपोर्ट ()

{

अगर (पोर्टनाम == शून्य) वापसी;

अगर (पोर्ट! = अशक्त) port.stop ();

पोर्ट = नया सीरियल (यह, पोर्टनाम, 115200);

port.bufferUntil('\n');

}

शून्य चयन सीरियलपोर्ट ()

{

स्ट्रिंग परिणाम = (स्ट्रिंग) JOptionPane.showInputDialog (यह, "उस सीरियल पोर्ट का चयन करें जो आपके Arduino बोर्ड से मेल खाता हो।", "सीरियल पोर्ट चुनें", जॉप्शन फलक. PLAIN_MESSAGE, शून्य, सीरियल.सूची (), 0);

अगर (परिणाम! = शून्य) {

पोर्टनाम = परिणाम;

ओपनसेरियलपोर्ट ();

}

}

व्यर्थ व्यवस्था()

{

आकार (500, 250);

ओपनसेरियलपोर्ट ();

}

शून्य ड्रा ()

{

पृष्ठभूमि (0);

भरें (255);

इंट वाई = 24, डाई = 12;

पाठ ("निर्देश", 12, वाई); वाई + = डाई;

टेक्स्ट ("पी: सीरियल पोर्ट का चयन करें", 12, वाई); वाई + = डाई;

पाठ ("1: गति को 0.001 इंच (1 मिलियन) प्रति जॉग पर सेट करें", 12, y); वाई + = डाई;

टेक्स्ट ("2: गति को 0.010 इंच (10 मील) प्रति जॉग पर सेट करें", 12, y); वाई + = डाई;

टेक्स्ट ("3: गति को 0.100 इंच (100 मिलियन) प्रति जॉग पर सेट करें", 12, y); वाई + = डाई;

टेक्स्ट ("एरो कीज़: एक्स-वाई प्लेन में जॉगिंग", 12, वाई); वाई + = डाई;

टेक्स्ट ("पेज अप एंड पेज डाउन: जॉग इन जेड एक्सिस", 12, वाई); वाई + = डाई;

पाठ ("$: प्रदर्शन ग्रबल सेटिंग्स", 12, y); वाई+= डाई;

पाठ ("एच: घर जाओ", 12, वाई); वाई + = डाई;

पाठ ("0: शून्य मशीन (वर्तमान स्थान पर घर सेट करें)", 12, y); वाई + = डाई;

टेक्स्ट ("जी: एक जी-कोड फ़ाइल स्ट्रीम करें", 12, वाई); वाई + = डाई;

टेक्स्ट ("एक्स: जी-कोड स्ट्रीमिंग बंद करें (यह तत्काल नहीं है)", 12, वाई); वाई + = डाई;

वाई = ऊंचाई - डाई;

पाठ ("वर्तमान जॉग गति:" + गति + "इंच प्रति चरण", 12, y); वाई - = डाई;

टेक्स्ट ("वर्तमान सीरियल पोर्ट:" + पोर्टनाम, 12, y); वाई - = डाई;

}

शून्य कुंजी दबाया ()

{

अगर (कुंजी == '1') गति = 0.001;

अगर (कुंजी == '2') गति = 0.01;

अगर (कुंजी == '3') गति = 0.1;

अगर (! स्ट्रीमिंग) {

अगर (कीकोड == लेफ्ट) पोर्ट.राइट ("G91\nG20\nG00 X-" + स्पीड + "Y0.000 Z0.000\n");

अगर (कीकोड == राइट) पोर्ट.राइट ("G91\nG20\nG00 X" + स्पीड + "Y0.000 Z0.000\n");

अगर (कीकोड == यूपी) port.write("G91\nG20\nG00 X0.000 Y" + speed + "Z0.000\n");

अगर (कीकोड == नीचे) port.write("G91\nG20\nG00 X0.000 Y-" + speed + "Z0.000\n");

अगर (कीकोड == KeyEvent. VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + speed + "\n");

अगर (कीकोड == KeyEvent. VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + speed + "\n");

// अगर (कुंजी == 'एच') पोर्ट.राइट ("जी 90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

अगर (कुंजी == 'वी') port.write("$0=75\n$1=74\n$2=75\n");

// अगर (कुंजी == 'वी') port.write("$0=100\n$1=74\n$2=75\n");

अगर (कुंजी == 'एस') port.write("$3=10\n");

अगर (कुंजी == 'ई') port.write("$16=1\n");

अगर (कुंजी == 'डी') port.write("$16=0\n");

अगर (कुंजी == '0') ओपनसेरियलपोर्ट ();

अगर (कुंजी == 'पी') चयन सीरियलपोर्ट ();

अगर (कुंजी == '$') port.write("$$\n");

अगर (कुंजी == 'एच') port.write("$H\n");

}

अगर (! स्ट्रीमिंग && कुंजी == 'जी') {

जीकोड = शून्य; मैं = 0;

फ़ाइल फ़ाइल = शून्य;

println ("फ़ाइल लोड हो रही है …");

SelectInput ("प्रक्रिया के लिए फ़ाइल का चयन करें:", "फ़ाइल चयनित", फ़ाइल);

}

अगर (कुंजी == 'एक्स') स्ट्रीमिंग = झूठा;

}

शून्य फ़ाइल चयनित (फ़ाइल चयन) {

अगर (चयन == शून्य) {

println ("विंडो बंद थी या उपयोगकर्ता ने रद्द कर दिया था।");

} अन्यथा {

println ("उपयोगकर्ता चयनित" + Selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

अगर (जीकोड == शून्य) वापसी;

स्ट्रीमिंग = सच;

धारा();

}

}

शून्य धारा ()

{

अगर (! स्ट्रीमिंग) वापसी;

जबकि (सच) {

अगर (i == gcode.length) {

स्ट्रीमिंग = झूठा;

वापसी;

}

अगर (जीकोड । ट्रिम ()। लंबाई () == 0) i++;

और तोड़;

}

प्रिंट्लन (जीकोड );

पोर्ट.राइट (जीकोड + '\ n');

मैं++;

}

शून्य सीरियलइवेंट (सीरियल पी)

{

स्ट्रिंग s = p.readStringUntil('\n');

प्रिंट्लन (एस.ट्रिम ());

अगर (s.trim().startsWith("ok")) स्ट्रीम ();

अगर (s.trim ()। startsWith ("त्रुटि")) स्ट्रीम (); // XXX: वाक़ई?

}

चरण 5: प्लाइवुड शीट में सभी भाग को डिज़ाइन और प्रिंट करें

प्लाइवुड शीट में सभी भाग को डिज़ाइन और प्रिंट करें
प्लाइवुड शीट में सभी भाग को डिज़ाइन और प्रिंट करें

ऑटोकैड में रोबोट भाग और डिज़ाइन डाउनलोड करें और 12 मिमी प्लाईवुड शीट और फिनिश और डिज़ाइन भाग पर प्रिंट करें। अगर किसी को कैड फाइल की जरूरत है तो कृपया कमेंट सेक्शन बॉक्स में कमेंट करें, मैं आपको सीधे भेजूंगा।

चरण 6: विधानसभा

सभा
सभा
सभा
सभा

सभी भाग को इकट्ठा करें और दिए गए चित्र पर अनुक्रम में व्यवस्थित करें और छवि आरेख का पालन करें।

चरण 7: GBRL सेटिंग्स सेटअप करें

सेटिंग जो हमारे रोबोट पर काम करने के लिए सिद्ध हुई है।

$0=10 (स्टेप पल्स, यूजेसी) $1=255 (स्टेप आइडल डिले, मिसेक) $2=7 (स्टेप पोर्ट इनवर्ट मास्क:00000111) $3=7 (डीआईआर पोर्ट इनवर्ट मास्क:00000111)$4=0 (स्टेप इनवर्ट इनवर्ट, बूल) $5=0 (लिमिट पिन इनवर्ट, बूल) $6=1 (प्रोब पिन इनवर्ट, बूल) $10=3 (स्टेटस रिपोर्ट मास्क:00000011) $11=0.020 (जंक्शन विचलन, मिमी) $12=0.002 (आर्क टॉलरेंस, मिमी) $13 =0 (रिपोर्ट इंच, बूल) $20=0 (सॉफ्ट लिमिट्स, बूल) $21=0 (हार्ड लिमिट्स, बूल) $22=1 (होमिंग साइकिल, बूल) $23=0 (होमिंग डीआईआर इनवर्ट मास्क:00000000) $24=100.000 (होमिंग फीड, मिमी/मिनट) $२५=५००,००० (होमिंग सीक, मिमी/मिनट) $२६=२५० (होमिंग डेब्यू, मिसे) $२७=१.००० (होमिंग पुल-ऑफ, मिमी) $१००=२५०,००० (एक्स, स्टेप/मिमी) $१०१= २५०,००० (वाई, चरण/मिमी) $१०२=२५०,००० (जेड, चरण/मिमी) $११०=५००,००० (एक्स अधिकतम दर, मिमी/मिनट) $१११=५००,००० (वाई अधिकतम दर, मिमी/मिनट) $११२=५००,००० (जेड अधिकतम दर, मिमी/मिनट) $120=10.000 (एक्स एक्सेल, मिमी/सेकंड^2) $121=10.000 (वाई एक्सेल, मिमी/सेकंड^2) $122=10.000 (जेड एक्सेल, मिमी/सेकंड^2) $130=200.000 (एक्स अधिकतम यात्रा, मिमी) $131=200.000 (y अधिकतम यात्रा, मिमी) $132=200.000 (z अधिकतम यात्रा, मिमी)

चरण 8: अंतिम कोड अपलोड करें और Arduino Uno सॉफ़्टवेयर डैशबोर्ड में वर्चुअल परिणाम देखें

// इकाइयां: सीएम

फ्लोट b_height = 0;

फ्लोट a1 = ९२;

फ्लोट a2 = ८६;

फ्लोट स्नूड_लेन = 20;

बूलियन डीओजेड = झूठा;

फ्लोट बेस_एंगल;// = 0;

फ्लोट आर्म1_एंगल; // = 0;

फ्लोट arm2_angle; //= 0;

फ्लोट बीएक्स = ६०;// = २५;

फ्लोट बाय = ६०;// = ०;

फ्लोट bz = ६०;// = २५;

फ्लोट एक्स = 60;

फ्लोट वाई = 60;

फ्लोट जेड = 60;

फ्लोट क्यू;

फ्लोट सी;

फ्लोट V1;

फ्लोट V2;

फ्लोट V3;

फ्लोट V4;

फ्लोट V5;

व्यर्थ व्यवस्था() {

आकार (700, 700, पी 3 डी);

कैम = नया पेसीकैम (यह, 300);

cam.setMinimumDistance(50);

cam.setMaximumDistance(500);

}

शून्य ड्रा () {

// लिनिंगर:

y = (माउसएक्स - चौड़ाई/2)*(-1);

एक्स = (माउसवाई - ऊंचाई/2)*(-1);

बीजेड = जेड;

द्वारा = वाई;

बीएक्स = एक्स;

फ्लोट y3 = sqrt(bx*bx+by*by);

सी = वर्ग (y3*y3 + bz*bz);

V1 = एकोस ((a2*a2+a1*a1-c*c)/(2*a2*a1));

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

V3 = एकोस ((y3*y3+c*c-bz*bz)/(2*y3*c));

क्यू = वी2 + वी3;

arm1_angle = q;

वी४ = रेडियन (९०.०) - क्यू;

V5 = रेडियन(180) - V4 - रेडियन(90);

arm2_angle = रेडियन(१८०.०) - (V5 + V1);

base_angle = डिग्री (atan2(bx, by));

arm1_angle=डिग्री (arm1_angle);

arm2_angle=डिग्री (arm2_angle);

// प्रिंट्लन (द्वारा, bz);

// arm1_angle = ९०;

// arm2_angle = ४५;

/*

arm2_angle = 23;

arm1_angle= 23;

arm2_angle=23;

*/

// इंटरएक्टिव:

// अगर (doZ)

//

// {

// बेस_एंगल = बेस_एंगल + माउसएक्स-पीमाउसएक्स;

// } अन्यथा

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ माउसY-pmouseY;

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

// प्रिंट्लन (बेस_एंगल + "," + आर्म 1_एंगल + ", " + आर्म 2_एंगल);

}

शून्य ड्रॉ_रोबोट (फ्लोट बेस_एंगल, फ्लोट आर्म1_एंगल, फ्लोट आर्म 2_एंगल)

{

रोटेटएक्स (1.2);

रोटेटजेड (-1.2);

पृष्ठभूमि (0);

रोशनी ();

पुशमैट्रिक्स ();

// आधार

भरें (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);

पॉपमैट्रिक्स ();

पुशमैट्रिक्स ();

फ्लोट एक्शन_बॉक्स_साइज़ = 100;

अनुवाद (0, -action_box_size/2, action_box_size/2+b_height);

पुशमैट्रिक्स ();

अनुवाद (एक्स, एक्शन_बॉक्स_साइज- वाई-एक्शन_बॉक्स_साइज/2, जेड-एक्शन_बॉक्स_साइज/2);

भरें (255, 255, 0);

बॉक्स (20);

पॉपमैट्रिक्स ();

भरें (255, 255, 255, 50);

बॉक्स (एक्शन_बॉक्स_साइज़, एक्शन_बॉक्स_साइज़, एक्शन_बॉक्स_साइज़);

पॉपमैट्रिक्स ();

}

शून्य बॉक्स_कॉर्नर (फ्लोट डब्ल्यू, फ्लोट एच, फ्लोट डी, फ्लोट रोटेट)

{

घुमाएँ (रेडियन (घुमाएँ), 1, 0, 0);

अनुवाद (0, 0, डी/2);

बॉक्स (डब्ल्यू, एच, डी);

अनुवाद(0, 0, डी/2);

}

शून्य कुंजी दबाया ()

{

अगर (कुंजी == 'जेड')

{

डीओजेड =! डीओजेड;

}

अगर (कुंजी == 'एच')

{

// सभी को शून्य पर सेट करें

arm2_angle = 0;

arm1_angle = ९०;

बेस_एंगल = 0;

}

अगर (कुंजी == 'जी')

{

प्रिंट्लन (डिग्री (वी 1));

प्रिंट्लन (डिग्री (वी 5));

}

अगर (कीकोड == यूपी)

{

जेड ++;

}

अगर (कीकोड == नीचे)

{

जेड --;

}

अगर (कुंजी == 'ओ')

{

वाई = 50;

जेड = ५०;

प्रिंट्लन (क्यू);

प्रिंट्लन (सी, "सी");

प्रिंट्लन (वी 1, "वी 1");

प्रिंट्लन (वी 2);

प्रिंट्लन (वी ३);

प्रिंट्लन (आर्म 1_एंगल);

प्रिंट्लन (वी 4);

प्रिंट्लन (वी 5);

प्रिंट्लन (arm2_angle);

}

}

सिफारिश की: