Სარჩევი:

არდუინოს ბაზის არჩევა და განთავსება რობოტი: 8 ნაბიჯი
არდუინოს ბაზის არჩევა და განთავსება რობოტი: 8 ნაბიჯი

ვიდეო: არდუინოს ბაზის არჩევა და განთავსება რობოტი: 8 ნაბიჯი

ვიდეო: არდუინოს ბაზის არჩევა და განთავსება რობოტი: 8 ნაბიჯი
ვიდეო: CS50 2015 - Week 10 2024, ივნისი
Anonim
არდუინოს ბაზის რობოტი
არდუინოს ბაზის რობოტი
არდუინოს ბაზის რობოტი
არდუინოს ბაზის რობოტი
არდუინოს ბაზის რობოტი
არდუინოს ბაზის რობოტი

მე გავაკეთე სუპერ იაფი (1000 დოლარზე ნაკლები) სამრეწველო რობოტის ხელი, რათა სტუდენტებს საშუალება მიეცათ გაეტეხათ უფრო დიდი მასშტაბის რობოტები და საშუალება მიეცათ მცირე ადგილობრივ წარმოებებს, რობოტები გამოეყენებინათ თავიანთ პროცესებში ბანკის გატეხვის გარეშე. მისი ინიციატივაა შექმნას და გახადოს ასაკობრივი ჯგუფი 15 -დან 50 წლამდე.

ნაბიჯი 1: კომპონენტების მოთხოვნა

კომპონენტების მოთხოვნა
კომპონენტების მოთხოვნა
კომპონენტების მოთხოვნა
კომპონენტების მოთხოვნა
კომპონენტების მოთხოვნა
კომპონენტების მოთხოვნა
კომპონენტების მოთხოვნა
კომპონენტების მოთხოვნა

1. არდუინო + ფარი + ქინძისთავები + კაბელები

2. მოტოკონტროლერი: dm860A (Ebay)

3. სტეპერმოტორული: 34hs5435c-37b2 (Ebay)

4. M8x45+60+70 ჭანჭიკები და M8 ჭანჭიკები.

5. 12 მმ პლაივუდი.

6. ნეილონი 5 მმ.

7. ბრმა საყელურები 8 მმ.

8. ხის ხრახნები 4.5x40 მმ.

9. M3 Counter ჩაიძირა, 10. 12 ვ კვების წყარო

11. სერვო ძრავის მძღოლი arduino

ნაბიჯი 2: ჩამოტვირთეთ Gui

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

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

ნაბიჯი 3: კავშირი

კავშირი
კავშირი
კავშირი
კავშირი
კავშირი
კავშირი

შეაერთეთ მავთულები, რომლებიც მოცემულია სურათზე, თქვენთვის უფრო გასაგებია.

ჩვენ უნდა დავუკავშიროთ ძრავის მძღოლი არდუინოს და სხვა კონექტორებს, რაც საჭიროა თქვენი რობოტის მიხედვით.

ნაბიჯი 4: ატვირთეთ firmware და შეამოწმეთ კოდის შედეგი Arduino Dashboard– ში

Firmware– ის დაყენება Arduino– ზე - GRBL:

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

შენიშვნა: თქვენ შეიძლება მიიღოთ კონფლიქტი არდუინოში შედგენისას. ამოიღეთ ყველა სხვა ბიბლიოთეკა თქვენი ბიბლიოთეკის საქაღალდიდან (../documents/Arduino/libraries).

პროგრამული უზრუნველყოფის დაყენება

ჩართეთ ჩართვა უფრო ახალ დროზე. გამოიყენეთ სერიული კავშირი და ჩაწერეთ:

$1=255

სახლის დაყენება:

$22=1

დაიმახსოვრე სერიის დაყენება baud: 115200

სასარგებლო G- კოდები

დააყენეთ ნულოვანი წერტილი რობოტისთვის:

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 -დან (დაბალი) და 600 -მდე (სწრაფი)

ნაგულისხმევი ერთეულები X, Y და Z

ნაგულისხმევი ნაბიჯის/ერთეულის პარამეტრების გამოყენებისას (250 ნაბიჯი/ერთეული) GRBL და

სტეპერიანი დრაივი, რომელიც დაყენებულია 800 საფეხურით/ბრუნზე, შემდეგი ერთეულები ვრცელდება ყველა ღერძზე:

+- 32 ერთეული = +- 180 გრადუსი

კოდის დამუშავების მაგალითი:

ამ კოდს შეუძლია პირდაპირ დაუკავშირდეს Arduino GRBL- ს.

github.com/damellis/gctrl

დაიმახსოვრე სერიის დაყენება baud: 115200

კოდი uoload in ardunio

java.awt.event. KeyEvent იმპორტი;

javax.swing. JOptionPane იმპორტი;

იმპორტის დამუშავება. სერიალი.*;

სერიული პორტი = null;

// შეარჩიეთ და შეცვალეთ თქვენი ოპერაციული სისტემის შესაბამისი ხაზი

// დატოვე როგორც null ინტერაქტიული პორტის გამოსაყენებლად (დააჭირეთ 'p' პროგრამაში)

სიმებიანი პორტნარი = null;

// სიმებიანი პორტნარი = Serial.list () [0]; // Mac OS X

// სიმებიანი პორტნარი = "/dev/ttyUSB0"; // Linux

// სიმებიანი პორტნარი = "COM6"; // Windows

ლოგიკური ნაკადი = ყალბი;

float სიჩქარე = 0.001;

სიმებიანი კოდი;

int i = 0;

void openSerialPort ()

{

if (portname == null) დაბრუნება;

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

პორტი = ახალი სერიალი (ეს, პორტნელის სახელი, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

სიმებიანი შედეგი = (სიმებიანი) JOptionPane.showInputDialog (ეს, "შეარჩიეთ სერიული პორტი, რომელიც შეესაბამება თქვენს Arduino დაფას.", "სერიული პორტის არჩევა", JOptionPane. PLAIN_MESSAGE, null, Serial.list (), 0);

თუ (შედეგი! = null) {

პორტნარი = შედეგი;

openSerialPort ();

}

}

ბათილად დაყენება ()

{

ზომა (500, 250);

openSerialPort ();

}

ბათილად გათამაშება ()

{

ფონი (0);

შევსება (255);

int y = 24, dy = 12;

ტექსტი ("ინსტრუქცია", 12, წ); y += dy;

ტექსტი ("p: აირჩიეთ სერიული პორტი", 12, y); y += dy;

ტექსტი ("1: დააყენეთ სიჩქარე 0.001 ინჩზე (1 მლნ) სირბილზე", 12, წ); y += dy;

ტექსტი ("2: დააყენეთ სიჩქარე 0.010 ინჩზე (10 მლნ) ერთ სირბილზე", 12, წ); y += dy;

ტექსტი ("3: დააყენეთ სიჩქარე 0.100 ინჩზე (100 მლნ) სირბილზე", 12, წ); y += dy;

ტექსტი ("ისრის ღილაკები: სირბილი x-y სიბრტყეში", 12, y); y += dy;

ტექსტი ("გვერდი ზემოთ და ქვემოთ: სირბილი z ღერძში", 12, y); y += dy;

ტექსტი ("$: ჩვენება grbl პარამეტრები", 12, წ); y+= dy;

ტექსტი ("თ: წადი სახლში", 12, წ); y += dy;

ტექსტი ("0: ნულოვანი მანქანა (დააყენეთ სახლში მიმდინარე ადგილას)", 12, y); y += dy;

ტექსტი ("g: ნაკადი g- კოდის ფაილი", 12, y); y += dy;

ტექსტი ("x: შეაჩერე ნაკადი g-კოდი (ეს არ არის მყისიერი)", 12, y); y += dy;

y = სიმაღლე - dy;

ტექსტი ("მიმდინარე სირბილის სიჩქარე:" + სიჩქარე + "ინჩი ნაბიჯზე", 12, y); y -= dy;

ტექსტი ("მიმდინარე სერიული პორტი:" + პორტნამის სახელი, 12, y); y -= dy;

}

void keyPressed ()

{

თუ (გასაღები == '1') სიჩქარე = 0.001;

თუ (გასაღები == '2') სიჩქარე = 0.01;

თუ (გასაღები == '3') სიჩქარე = 0.1;

თუ (! ნაკადი) {

if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + სიჩქარე + "Y0.000 Z0.000 / n");

if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + სიჩქარე + "Y0.000 Z0.000 / n");

if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + სიჩქარე + "Z0.000 / n");

if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + სიჩქარე + "Z0.000 / n");

if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + სიჩქარე + "\ n");

if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + სიჩქარე + "\ n");

// if (გასაღები == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

if (გასაღები == 'v') port.write ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");

// if (გასაღები == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");

if (გასაღები == 's') port.write ("$ 3 = 10 / n");

if (გასაღები == 'e') port.write ("$ 16 = 1 / n");

if (გასაღები == 'd') port.write ("$ 16 = 0 / n");

if (გასაღები == '0') openSerialPort ();

if (გასაღები == 'p') selectSerialPort ();

if (გასაღები == '$') port.write ("$$ / n");

if (გასაღები == 'h') port.write ("$ H / n");

}

თუ (! ნაკადი && გასაღები == 'გ') {

gcode = null; i = 0;

ფაილის ფაილი = null;

println ("ფაილის ჩატვირთვა …");

selectInput ("აირჩიეთ ფაილი დასამუშავებლად:", "fileSelected", ფაილი);

}

თუ (გასაღები == 'x') ნაკადი = ყალბი;

}

ბათილი ფაილი არჩეული (ფაილის არჩევა) {

თუ (შერჩევა == null) {

println ("ფანჯარა დაიხურა ან მომხმარებლის დაწკაპუნება გაუქმდა.");

} სხვა {

println ("მომხმარებელი არჩეულია" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) დაბრუნება;

ნაკადი = ჭეშმარიტი;

ნაკადი ();

}

}

ბათილი ნაკადი ()

{

თუ (! ნაკადი) დაბრუნდება;

სანამ (მართალია) {

თუ (i == gcode.length) {

ნაკადი = ყალბი;

დაბრუნების;

}

if (gcode .trim (). სიგრძე () == 0) i ++;

სხვაგან შესვენება;

}

println (gcode );

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

მე ++;

}

void serialEvent (სერიული p)

{

სიმებიანი s = p.readStringUntil ('\ n');

println (s.trim ());

if (s.trim (). იწყებს ("ok")) ნაკადი ();

if (s.trim (). იწყებაWith ("შეცდომა")) ნაკადი (); // XXX: მართლა?

}

ნაბიჯი 5: დიზაინი და დაბეჭდვა ყველა ნაწილი პლაივუდის ფურცელზე

პლაივუდის ფურცელზე ყველა ნაწილის დიზაინი და დაბეჭდვა
პლაივუდის ფურცელზე ყველა ნაწილის დიზაინი და დაბეჭდვა

ჩამოტვირთეთ რობოტის ნაწილი და დიზაინი AutoCAD– ში და დაბეჭდეთ 12 მმ პლაივუდის ფურცელზე და დაამთავრეთ და შეიმუშავეთ ნაწილი. თუ ვინმეს სჭირდება cad ფაილი გთხოვთ დატოვეთ კომენტარი კომენტარების განყოფილებაში, მე პირდაპირ გამოგიგზავნით.

ნაბიჯი 6: შეკრება

შეკრება
შეკრება
შეკრება
შეკრება

შეაგროვეთ ყველა ნაწილი და დაალაგეთ თანმიმდევრობით მოცემულ გამოსახულებაზე და მიჰყევით გამოსახულების დიაგრამას.

ნაბიჯი 7: დააყენეთ GBRL პარამეტრები

პარამეტრი, რომელიც დადასტურდა, რომ მუშაობს ჩვენს რობოტებზე.

$ 0 = 10 (საფეხური პულსი, usec) $ 1 = 255 (ნაბიჯი უსაქმური შეფერხება, წმ) $ 2 = 7 (საფეხურის პორტის შემობრუნების ნიღაბი: 00000111) $ 3 = 7 (დირი პორტის ინვერსიული ნიღაბი: 00000111) $ 4 = 0 (ნაბიჯის ჩართვა ინვერსია, bool) $ 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 (საკვების მიწოდება, მმ/წთ) $ 25 = 500.000 (სახლში ძებნა, მმ/წთ) $ 26 = 250 $ 250.000 (y, ნაბიჯი/მმ) $ 102 = 250.000 (z, ნაბიჯი/მმ) $ 110 = 500.000 (x max განაკვეთი, მმ/წთ) $ 111 = 500.000 (y მაქსიმალური მაჩვენებელი, მმ/წთ) $ 112 = 500.000 (z max განაკვეთი, მმ/წთ) $ 120 = 10.000 (x accel, მმ/წ^2) $ 121 = 10.000 (y accel, მმ/წ^2) $ 122 = 10.000 (z accel, მმ/წმ 2) $ 130 = 200.000 (x max მოგზაურობა, მმ) $ 131 = 200.000 (y მაქსიმალური მგზავრობა, მმ) $ 132 = 200.000 (z max მოგზაურობა, მმ)

ნაბიჯი 8: ატვირთეთ საბოლოო კოდი და შეამოწმეთ ვირტუალური შედეგი Arduino Uno პროგრამულ დაფაზე

// ერთეულები: CM

float b_height = 0;

float a1 = 92;

float a2 = 86;

float snude_len = 20;

ლოგიკური doZ = ყალბი;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

float bx = 60; // = 25;

float = 60; // = 0;

float bz = 60; // = 25;

float x = 60;

float y = 60;

float z = 60;

float q;

float c;

float V1;

float V2;

float V3;

float V4;

float V5;

void setup () {

ზომა (700, 700, P3D);

კამერა = ახალი PeasyCam (ეს, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

ბათილად გათამაშება () {

// ლინგინჯერი:

y = (mouseX - სიგანე/2)*(- 1);

x = (mouseY - სიმაღლე/2)*(- 1);

bz = z;

by = y;

bx = x;

float 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);

ბაზის_კუთხედი = გრადუსი (atan2 (bx, by));

arm1_angle = გრადუსი (arm1_angle);

arm2_angle = გრადუსი (arm2_angle);

// println (by, 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 (ბაზის_კუთხედი,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));

// println (ბაზის_კუთხედი + "," + arm1_angle + "," + arm2_angle);

}

void 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_ სიმაღლე, 0);

როტაცია (რადიანები (ბაზის_კუთხედი), 0, 0, 1);

// ARM 1

შევსება (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// ARM 2

შევსება (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUDE

შევსება (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);

ყუთი (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, დ/2);

ყუთი (w, h, d);

თარგმნა (0, 0, დ/2);

}

void keyPressed ()

{

თუ (გასაღები == 'z')

{

doZ =! doZ;

}

თუ (გასაღები == 'თ')

{

// დააყენეთ ყველაფერი ნულზე

arm2_angle = 0;

arm1_angle = 90;

ბაზის_კუთხედი = 0;

}

თუ (გასაღები == 'გ')

{

println (გრადუსი (V1));

println (გრადუსი (V5));

}

თუ (გასაღები კოდი == UP)

{

z ++;

}

თუ (გასაღები კოდი == ქვემოთ)

{

z -;

}

თუ (გასაღები == 'o')

{

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);

}

}

გირჩევთ: