Բովանդակություն:
- Քայլ 1: Բաղադրիչների պահանջը
- Քայլ 2: Ներբեռնեք Gui
- Քայլ 3: Միացում
- Քայլ 4: Ներբեռնեք որոնվածը և ստուգեք կոդի արդյունքը Arduino վահանակում
- Քայլ 5. Նախագծեք և տպեք ամբողջ մասը նրբատախտակի թերթիկում
- Քայլ 6: Հավաքում
- Քայլ 7: Կարգավորեք GBRL կարգավորումները
- Քայլ 8. Վերբեռնեք վերջնական ծածկագիրը և ստուգեք վիրտուալ արդյունքը Arduino Uno ծրագրաշարի վահանակում
Video: Arduino բազայի ընտրություն և տեղադրում ռոբոտ. 8 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:47
Ես պատրաստել եմ գերաէժան (1000 դոլարից պակաս) արդյունաբերական ռոբոտների բազուկ, որը հնարավորություն կտա ուսանողներին կոտրել ավելի մեծ մասշտաբի ռոբոտաշինություն և հնարավորություն տալ տեղական փոքր արտադրություններին ռոբոտներին օգտագործել իրենց գործընթացներում ՝ առանց բանկը կոտրելու: Նրա նպատակն է կառուցել և դարձնել տարիքային խումբ 15-50 տարեկան մարդիկ:
Քայլ 1: Բաղադրիչների պահանջը
1. Arduino + Shield + կապում + մալուխներ
2. Մոտկոնտրոլեր ՝ dm860A (Ebay)
3. Տափաստան շարժիչ ՝ 34hs5435c-37b2 (Ebay)
4. M8x45+60+70 պտուտակներ և M8 պտուտակներ:
5. 12 մմ նրբատախտակ:
6. 5 մմ նեյլոնե:
7. Կույր լվացքի մեքենաներ 8 մմ:
8. Փայտե պտուտակներ 4,5x40 մմ:
9. M3 հաշվիչ խորտակված, 10. 12 վ էլեկտրամատակարարում
11. servo շարժիչի վարորդ arduino
Քայլ 2: Ներբեռնեք Gui
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/libraries):
Fրագրաշարի տեղադրում
Միացնել միացնել ավելի նոր ժամկետի վրա: Օգտագործեք սերիական կապ և գրեք.
$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 համար
GRBL- ի համար քայլի/միավորների լռելյայն պարամետրեր օգտագործելիս (250 քայլ/միավոր) և
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
բուլյան հոսք = կեղծ;
բոց արագություն = 0.001;
Լարային կոդ;
int i = 0;
դատարկ openSerialPort ()
{
if (portname == null) վերադարձ;
if (port! = null) port.stop ();
նավահանգիստ = նոր Սերիա (սա, նավահանգիստ, 115200);
port.bufferUntil ('\ n');
}
void selectSerialPort ()
{
Լարային արդյունք = (Լարային) JOptionPane.showInputDialog (սա, "Ընտրեք սերիական նավահանգիստ, որը համապատասխանում է ձեր Arduino տախտակին:", "Ընտրեք սերիական նավահանգիստ", JOptionPane. PLAIN_MESSAGE, դատարկ, Serial.list (), 0);
եթե (արդյունք! = null) {
նավահանգիստ = արդյունք;
openSerialPort ();
}
}
դատարկ կարգավորում ()
{
չափը (500, 250);
openSerialPort ();
}
դատարկ վիճակահանություն ()
{
ֆոն (0);
լրացնել (255);
int y = 24, dy = 12;
տեքստ («INԱՆՈՈՄՆԵՐ», 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); y+= dy;
տեքստ («ժ. գնա տուն», 12, յ); y += dy;
տեքստ («0: զրոյական մեքենա (տունը սահմանել ընթացիկ վայրում)», 12, y); y += dy;
տեքստ ("g: stream a g-code file", 12, y); y += dy;
տեքստ ("x: դադարեցնել հոսքը g-code (սա ՉԻ անմիջականորեն)", 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 (key == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");
if (key == '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");
if (key == 's') port.write ("$ 3 = 10 / n");
if (key == 'e') port.write ("$ 16 = 1 / n");
if (key == 'd') port.write ("$ 16 = 0 / n");
եթե (բանալին == '0') openSerialPort ();
if (key == 'p') selectSerialPort ();
if (key == '$') port.write ("$$ / n");
if (key == 'h') port.write ("$ H / n");
}
եթե (! հոսք && բանալին == 'g') {
gcode = null; i = 0;
Ֆայլի ֆայլ = null;
println ("Ֆայլը բեռնվում է …");
selectInput ("Ընտրել ֆայլ մշակելու համար.", "fileSelected", ֆայլ);
}
եթե (բանալին == 'x') հոսք = կեղծ;
}
void fileSelected (Ֆայլի ընտրություն) {
եթե (ընտրություն == null) {
println ("Պատուհանը փակվեց կամ օգտվողը սեղմեց չեղարկել");
} ուրիշ {
println («Ընտրված է օգտվողը» + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
եթե (gcode == null) վերադարձ;
հոսք = ճշմարիտ;
հոսք ();
}
}
դատարկ հոսք ()
{
եթե (! հոսք) վերադառնա;
մինչդեռ (ճշմարիտ) {
եթե (i == gcode.length) {
հոսք = կեղծ;
վերադարձ;
}
if (gcode .trim (). երկարություն () == 0) i ++;
այլապես կոտրել;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
void serialEvent (Սերիա p)
{
Տող s = p.readStringUntil ('\ n');
println (s.trim ());
if (s.trim (). սկսվում է («լավ»)) հոսքով ();
if (s.trim (). սկսվում է («սխալ»)) հոսքով (); // XXX: իսկապես?
}
Քայլ 5. Նախագծեք և տպեք ամբողջ մասը նրբատախտակի թերթիկում
Ներբեռնեք ռոբոտի մասն ու դիզայնը AutoCAD- ում և տպեք 12 մմ նրբատախտակի թերթիկի վրա և ավարտեք և ձևավորեք հատվածը: Եթե որևէ մեկին անհրաժեշտ է cad ֆայլ, խնդրում ենք թողնել մեկնաբանությունը մեկնաբանությունների բաժնում, ես ուղղակիորեն կուղարկեմ:
Քայլ 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 (տնային սնունդ, մմ/րոպե) $ 25 = 500.000 (տնային որոնում, մմ/րոպե) $ 26 = 250 $ (տնից դուրս գալը, վրկ) $ 27 = 1.000 (տնից դուրս գալը, մմ) $ 100 = 250.000 (x, քայլ/մմ) $ 101 = 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, mm/sec^2) $ 122 = 10.000 (z accel, mm/sec^2) $ 130 = 200.000 (x max ճանապարհորդություն, մմ) $ 131 = 200.000 (y առավելագույն ճանապարհորդություն, մմ) $ 132 = 200.000 (z առավելագույն ճանապարհորդություն, մմ)
Քայլ 8. Վերբեռնեք վերջնական ծածկագիրը և ստուգեք վիրտուալ արդյունքը Arduino Uno ծրագրաշարի վահանակում
// Միավորներ `CM
բոց բ_բարձրություն = 0;
բոց a1 = 92;
բոց a2 = 86;
բոց snude_len = 20;
բուլյան doZ = կեղծ;
float base_angle; // = 0;
float arm1_angle; // = 0;
float arm2_angle; // = 0;
բոց bx = 60; // = 25;
float by = 60; // = 0;
float bz = 60; // = 25;
բոց x = 60;
բոց y = 60;
բոց z = 60;
բոց q;
բոց c;
բոց V1;
բոց V2;
բոց V3;
բոց V4;
բոց V5;
void setup () {
չափը (700, 700, P3D);
cam = նոր PeasyCam (սա, 300);
cam.setMinimumDistance (50);
cam.setMaximumDistance (500);
}
դատարկ վիճակահանություն () {
// ligninger:
y = (mouseX - լայնություն/2)*(- 1);
x = (mouseY - բարձրություն/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) - ք;
V5 = ճառագայթներ (180) - V4 - ռադիաններ (90);
arm2_angle = ռադիաններ (180.0) - (V5 + V1);
բազային_անկյուն = աստիճաններ (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)
//
// {
// բազայի_անկյուն = բազայի_անկյուն+ մուկX-pmouseX;
//} այլ
// {
// arm1_angle = arm1_angle+ pmouseX-mouseX;
// }
//
// arm2_angle = arm2_angle+ մուկ Y-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)
{
պտտել X (1.2);
պտտել Z (-1.2);
ֆոն (0);
լույսեր ();
pushMatrix ();
// ԲԱEԻՆ
լրացնել (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);
// ՍՆՈUDԴ
լրացնել (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;
}
եթե (բանալին == 'g')
{
println (աստիճաններ (V1));
println (աստիճաններ (V5));
}
if (keyCode == UP)
{
z ++;
}
if (keyCode == DOWN)
{
z -;
}
եթե (բանալին == 'o')
{
y = 50;
z = 50;
println (q);
println (գ, «գ»);
println (V1, "V1");
println (V2);
println (V3);
println (arm1_angle);
println (V4);
println (V5);
println (arm2_angle);
}
}
Խորհուրդ ենք տալիս:
Arduino- ի ավտոմատ ստվերային էկրանի ծրագրի համար Step Step Motor և Driver- ի ընտրություն. 12 քայլ (նկարներով)
Arduino- ի ավտոմատ ստվերային էկրանի նախագծի համար Step Motor և Driver- ի ընտրություն. Այս հրահանգում ես կանցնեմ այն քայլերի միջոցով, որոնք կատարել եմ Step Motor և Driver ընտրելու համար `Automated Shade Screen նախագծի նախատիպի համար: Ստվերային էկրանները հայտնի և էժան Coolaroo ձեռքերով սեղմված մոդելներն են, և ես ուզում էի փոխարինել
ESP8266 բազայի վրա բազում սենսոր `3 քայլ
ESP8266- ի վրա հիմնված բազմասենսոր. ESP8266- ը հարմար փոքր սարք է, որը կարող է ծրագրավորվել և հեշտությամբ օգտագործվել, բայց մենք պետք է խելամտորեն օգտագործենք առկա GPIO կապանքները, քանի որ դրանցից շատերը չկան: Այս կարճ ամփոփագրում ես ձեզ ցույց կտամ, թե ինչպես կցել բազմաթիվ տարբեր սենսորներ
Հավասարակշռող ռոբոտ / 3 անիվի ռոբոտ / STEM ռոբոտ ՝ 8 քայլ
Հավասարակշռող ռոբոտ / 3 անիվի ռոբոտ / STEM ռոբոտ. Մենք կառուցել ենք համակցված հավասարակշռող և եռանիվ ռոբոտ `կրթական օգտագործման համար դպրոցներում և դպրոցից հետո կրթական ծրագրերում: Ռոբոտը հիմնված է Arduino Uno- ի, սովորական վահանի վրա (շինարարության բոլոր մանրամասները տրամադրված են), Li Ion մարտկոցի տուփով (բոլորը կառուցված են
Տեսողության վրա հիմնված ընտրություն և տեղ UArm- ի հետ. 6 քայլ
Տեսողության վրա հիմնված ընտրություն և տեղ UArm- ի հետ. Վերջերս ձեզանից լսվող հարցումների մեծ մասը վերաբերում են uArm- ի տեսլականի վրա հիմնված ծրագրերին, ինչպիսիք են օբյեկտի ճանաչումը, տեսախցիկ-uArm հարաբերակցությունը և այլն: Իրականում մենք դրա վրա աշխատել ենք ժամանակաշրջան: Մենք իրականացրել ենք պարզ տեսլականի վրա հիմնված
Կիթառի օժանդակ ընտրություն `10 քայլ
Օգնական կիթառի ընտրություն. Այն, ինչ մենք արեցինք. Կիթառի օժանդակ ընտրությունը մշակվեց այն մարդկանց համար, ովքեր ունեն ցածր մկանային տոնուս և ձեռքի ջղաձգություն: Այս նախագծի մեր նպատակի մասին իմանալու համար, թե ինչպես հագնել օժանդակ ընտրությունը և դիտել կիթառով նվագելու ցուցադրական ցուցադրությունը