Мазмуну:
- 1 -кадам: Компоненттердин талабы
- 2 -кадам: Gui жүктөп алыңыз
- 3 -кадам: Туташуу
- 4 -кадам: Камтылган программаны жүктөп, Arduino тактасындагы коддун жыйынтыгын текшериңиз
- 5 -кадам: Дизайн жана бардык бөлүгүн фанер баракчасына басып чыгаруу
- 6 -кадам: Ассамблея
- 7 -кадам: Орнотуу GBRL Орнотуулар
- 8 -кадам: Акыркы кодду жүктөп, Arduino Uno программалык камсыздоо панелиндеги виртуалдык жыйынтыкты текшериңиз
Video: Ардуино базасын тандоо жана жайгаштыруу роботу: 8 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Мен студенттерге ири масштабдагы робототехниканы бузууга жана кичинекей жергиликтүү өндүрүштөргө роботторду банкты бузбастан колдонууга мүмкүнчүлүк берүү үчүн супер арзан (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. Сокур кир жуугучтар 8мм.
8. Жыгач бурамалары 4.5x40мм.
9. M3 Counter чөгүп кетти, 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).
Камтылган программаны орнотуу
Жаңы иштетүү убактысын күйгүзүңүз. Сериялык туташууну колдонуңуз жана жазыңыз:
$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 ортосунда болушу керек (slooooow) жана 600 (тез)
X, Y жана Z үчүн демейки бирдиктер
Демейки кадам/бирдик орнотууларын колдонууда (250 кадам/бирдик) GRBL жана
800 кадам/ревер үчүн орнотулган тепкичтүү диск бардык огу үчүн колдонулат:
+- 32 бирдик = +- 180 градус
Кодду иштетүү мисалы:
Бул код Arduino GRBL менен түз байланыша алат.
github.com/damellis/gctrl
Сериалды baudго коюуну унутпаңыз: 115200
Code uoload in arunio
java.awt.event. KeyEvent импорттоо;
javax.swing. JOptionPane импорттоо;
импортту иштетүү.сериал.*;
Сериялык порт = null;
// операциялык системаңызга ылайыктуу линияны тандаңыз жана өзгөртүңүз
// интерактивдүү портту колдонуу үчүн нөл катары калтырыңыз (программада 'p' баскычын басыңыз)
String portname = null;
// String portname = Serial.list () [0]; // Mac OS X
// String portname = "/dev/ttyUSB0"; // Linux
// String portname = "COM6"; // Windows
логикалык агым = жалган;
сүзүү ылдамдыгы = 0,001;
String gcode;
int i = 0;
жараксыз openSerialPort ()
{
if (portname == null) return;
if (port! = null) port.stop ();
порт = жаңы серия (бул, порт аталышы, 115200);
port.bufferUntil ('\ n');
}
жараксыз SelectSerialPort ()
{
String жыйынтыгы = (String) JOptionPane.showInputDialog (бул, "Arduino тактаңызга туура келген сериялык портту тандаңыз.", "Сериялык портту тандоо", JOptionPane. PLAIN_MESSAGE, нөл, Serial.list (), 0);
if (result! = null) {
portname = натыйжа;
openSerialPort ();
}
}
жараксыз орнотуу ()
{
өлчөмү (500, 250);
openSerialPort ();
}
жараксыз тартуу ()
{
background (0);
толтуруу (255);
int y = 24, dy = 12;
текст ("КӨРСӨТМӨЛӨР", 12, у); y += dy;
текст ("p: serial series", 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 += dy;
текст ("бет өйдө жана бет ылдый: z огунда чуркоо", 12, у); y += dy;
текст ("$: display grbl settings", 12, y); y+= dy;
текст ("ч: үйгө кет", 12, у); y += dy;
текст ("0: нөл машина (үйдү учурдагы жерге коюу)", 12, у); y += dy;
текст ("g: stream a g-code file", 12, y); y += dy;
текст ("x: g-коддун агымын токтотуу (бул дароо эмес)", 12, y); y += dy;
y = бийиктиги - dy;
текст ("учурдагы чуркоо ылдамдыгы:" + ылдамдык "" кадамга дюйм ", 12, у); y -= dy;
текст ("учурдагы сериялык порт:" + порт аты, 12, у); y -= dy;
}
void keyPressed ()
{
if (key == '1') speed = 0.001;
if (key == '2') speed = 0.01;
if (key == '3') speed = 0.1;
if (! агылып) {
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");
if (key == '0') openSerialPort ();
if (key == 'p') selectSerialPort ();
if (key == '$') port.write ("$$ / n");
if (key == 'h') port.write ("$ H / n");
}
if (! агым && key == 'g') {
gcode = null; i = 0;
Файл файлы = null;
println ("Файл жүктөлүүдө…");
selectInput ("Иштетиле турган файлды тандаңыз:", "fileSelected", файл);
}
if (key == 'x') streaming = false;
}
void fileSelected (Файлды тандоо) {
эгер (тандоо == нөл) {
println ("Терезе жабылган же колдонуучу жокко чыгарууну баскан.");
} башка {
println ("Колдонуучу тандалды" + selection.getAbsolutePath ());
gcode = loadStrings (selection.getAbsolutePath ());
if (gcode == null) return;
агым = чындык;
агым ();
}
}
бош агым ()
{
if (! streaming) return;
while (true) {
эгер (i == gcode.length) {
агым = жалган;
кайтуу;
}
if (gcode .trim (). length () == 0) i ++;
башка сындыруу;
}
println (gcode );
port.write (gcode + '\ n');
i ++;
}
жараксыз serialEvent (Сериялык б)
{
String s = p.readStringUntil ('\ n');
println (s.trim ());
if (s.trim (). beginWith ("ok")) stream ();
if (s.trim (). beginWith ("error")) stream (); // ХХХ: чын эле?
}
5 -кадам: Дизайн жана бардык бөлүгүн фанер баракчасына басып чыгаруу
Роботтун бөлүгүн жана дизайнын AutoCADга жүктөп алып, 12 мм фанера баракчасына жана финиш жана дизайн бөлүгүн басып чыгарыңыз. Эгерде кимдир бирөөгө кад файлы керек болсо, комментарийди комментарийлер бөлүмүнө калтырыңыз, мен сизди түз жөнөтөм.
6 -кадам: Ассамблея
бардык бөлүктү чогултуп, берилген сүрөттүн ырааттуулугун ирээтке келтирип, сүрөт диаграммасын аткарыңыз.
7 -кадам: Орнотуу GBRL Орнотуулар
Бул роботторубузда иштээри далилденди.
$ 0 = 10 (кадамдын импульсу, usec) $ 1 = 255 (кадамдын боштугунан кечигүү, msec) $ 2 = 7 (кадамдык портту инверттөө маскасы: 00000111) $ 3 = 7 (dir port invert mask: 00000111) $ 4 = 0 (step invert, bool $ 5 = 0 (чектөө казыктары инверттөө, бол) $ 6 = 1 (илгичтүү пин инверттөө, бол) $ 10 = 3 (статус отчетунун маскасы: 00000011) $ 11 = 0,020 (кошулуу четтөөсү, мм) $ 12 = 0,002 (жаа толеранттуулугу, мм) $ 13 = 0 (отчет дюйм, бол) $ 20 = 0 (жумшак чектер, бол) $ 21 = 0 (катуу чектер, бол) $ 22 = 1 (homing цикли, бол) $ 23 = 0 (homing dir invert маскасы: 00000000) $ 24 = 100.000 (homing feed, mm/min) $ 25 = 500.000 (homing search, mm/min) $ 26 = 250 (homing debounce, msec) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, step/mm) $ 101 = 250.000 (ж, кадам/мм) $ 102 = 250.000 (z, кадам/мм) $ 110 = 500.000 (х максималдуу ылдамдык, мм/мүн) $ 111 = 500.000 (ж максималдуу ылдамдык, мм/мүн) $ 112 = 500.000 (z максималдуу чен, мм/мүн) $ 120 = 10.000 (х accel, mm/sec^2) $ 121 = 10.000 (y accel, mm/sec^2) $ 122 = 10.000 (z accel, mm/sec^2) $ 130 = 200.000 (x max travel, мм) $ 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 by = 60; // = 0;
float bz = 60; // = 25;
float x = 60;
float y = 60;
float z = 60;
сүзүү q;
сүзүү c;
float V1;
калкыма V2;
float V3;
калкып V4;
калкып V5;
жараксыз орнотуу () {
өлчөмү (700, 700, P3D);
cam = жаңы 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);
base_angle = градус (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 (base_angle,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));
// println (base_angle + "," + arm1_angle + "," + arm2_angle);
}
жараксыз draw_robot (калкып жүрүүчү базалык
{
rotateX (1.2);
rotateZ (-1.2);
background (0);
жарыктар ();
pushMatrix ();
// БАЗА
толтуруу (150, 150, 150);
box_corner (50, 50, b_height, 0);
айлануу (радиандар (base_angle), 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 (wat w, float h, float d, float rotate)
{
айлануу (радиандар (айлануу), 1, 0, 0);
которуу (0, 0, d/2);
кутуча (ж, ч, г);
которуу (0, 0, d/2);
}
void keyPressed ()
{
эгер (ачкыч == 'z')
{
doZ =! doZ;
}
эгер (ачкыч == 'ч')
{
// баарын нөлгө коюңуз
arm2_angle = 0;
arm1_angle = 90;
base_angle = 0;
}
эгер (ачкыч == 'g')
{
println (даражалар (V1));
println (даражалар (V5));
}
эгер (keyCode == UP)
{
z ++;
}
эгер (keyCode == ТӨМӨН)
{
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);
}
}
Сунушталууда:
Манжа изи жана RFIDге негизделген катышуу тутуму Raspberry Pi жана MySQL маалымат базасын колдонот: 5 кадам
Raspberry Pi жана MySQL маалымат базасын колдонгон манжа изи жана RFIDге негизделген катышуу тутуму: Бул долбоордун видеосу
Ардуино Унону жана L298Nди колдонгон Line Follower роботу: 5 кадам
Arduino Uno жана L298N аркылуу Line Follower роботу: Line Flower - бул башталгыч электроника үчүн идеалдуу абдан жөнөкөй робот
RFIDге негизделген тандоо жана жайгаштыруу роботу: 4 кадам
RFIDге негизделген тандоо жана жайгаштыруу роботу: Көп жылдан бери адамдар адам эмгегин машиналар менен алмаштырууга аракет кылышат. Робот деп аталган машиналар адамдарга караганда ылдам жана эффективдүү. Робототехника термини практикалык түрдө робот системаларын изилдөө, долбоорлоо жана колдонуу катары аныкталат. Роботтор - бул
Ардуино роботу алыстыгы, багыты жана айлануу даражасы менен (Чыгыш, Батыш, Түндүк, Түштүк) Bluetooth модулу жана Автономдуу робот кыймылынын жардамы менен үн менен башкарылат.: 6 кадам
Ардуино роботу алыстыгы, багыты жана айлануу даражасы менен (Чыгыш, Батыш, Түндүк, Түштүк) Bluetooth модулунун жана Автономдуу Робот Кыймылынын жардамы менен Үн менен Башкарылат. , Сол, Оң, Чыгыш, Батыш, Түндүк, Түштүк) Үн буйругун колдонуу менен аралыкты сантиметр менен талап кылды. Роботту автономдуу түрдө жылдырса болот
UCL - Камтылган - тандоо жана жайгаштыруу: 4 кадам
UCL - Камтылган - Тандоо жана жайгаштыруу: Бул көрсөтмө 2D тандоо жана жайгаштыруу бирдиги кантип жасалганын жана аны кантип коддоо керектигин көрсөтөт