Spisu treści:
- Krok 1: Wymagania dotyczące komponentów
- Krok 2: Pobierz przewodnik
- Krok 3: Połączenie
- Krok 4: Prześlij oprogramowanie układowe i sprawdź wynik kodu w panelu Arduino
- Krok 5: Zaprojektuj i wydrukuj wszystkie części w arkuszu ze sklejki
- Krok 6: Montaż
- Krok 7: Skonfiguruj ustawienia GBRL
- Krok 8: Prześlij kod końcowy i sprawdź wirtualny wynik w panelu oprogramowania Arduino Uno
Wideo: Robot Arduino Base Pick and Place: 8 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
Zrobiłem super tanie (mniej niż 1000 dolarów) przemysłowe ramię robota, aby umożliwić studentom hakowanie robotyki na większą skalę i aby małe lokalne produkcje mogły używać robotów w swoich procesach bez rozbijania banku. Jego łatwe do zbudowania i uczynienia z grupy wiekowej osób od 15 do 50 lat.
Krok 1: Wymagania dotyczące komponentów
1. Arduino + Tarcza + Szpilki + Kable
2. Sterownik silnika: dm860A (Ebay)
3. Silnik krokowy: 34hs5435c-37b2 (Ebay)
4. Śruby M8x45+60+70 i śruby M8.
5. Sklejka 12 mm.
6. Nylon 5mm.
7. Podkładki żaluzjowe 8mm.
8. Wkręty do drewna 4,5x40mm.
9. Zatopiony licznik M3, 10. Zasilanie 12 v
11. sterownik silnika serwo arduino
Krok 2: Pobierz przewodnik
zapmaker.org/projects/grbl-controller-3-0/
github.com/grbl/grbl/wiki/Using-Grbl
Krok 3: Połączenie
Podłącz przewody które są podane na obrazku to dla Ciebie większe zrozumienie.
musimy podłączyć sterownik silnika do Arduino i innych złącz, które są wymagane zgodnie z twoim robotem.
Krok 4: Prześlij oprogramowanie układowe i sprawdź wynik kodu w panelu Arduino
Instalacja oprogramowania na Arduino - GRBL:
github.com/grbl/grbl/wiki/Kompilacja-Grbl
Uwaga: Podczas kompilacji w Arduino może wystąpić konflikt. Usuń wszystkie inne biblioteki z folderu biblioteki (../documents/Arduino/libraries).
Konfiguracja oprogramowania
Ustaw enable na nowszy limit czasu. Użyj połączenia szeregowego i napisz:
$1=255
Ustaw bazowanie:
$22=1
Pamiętaj, aby ustawić serial na baud: 115200
Przydatne kody G
Ustaw punkt zerowy dla robota:
G10 L2 Xnnn Ynnn Znnn
Użyj punktu zerowego:
G54
Typowa inicjalizacja do robota centralnego:
G10 L2 X1,5 Y1,2 Z1,1
G54
Szybko przesuń robota do pozycji:
G0 Xnnn Ynnn Znnn
Przykład:
G0 X10.0 Y3.1 Z4.2 (powrót)
Przesuń robota do pozycji z określoną prędkością:
G1 Xnnn Ynnn Znnn Fnnn
G1 X11 Y3 Z4 F300 (powrót)
F powinno wynosić od 10 (wolno) do 600 (szybko)
Domyślne jednostki dla X, Y i Z
Podczas korzystania z domyślnych ustawień kroków/jednostek (250 kroków/jednostek) dla GRBL i
napęd krokowy ustawiony na 800 kroków/obr dla wszystkich osi obowiązują następujące jednostki:
+- 32 jednostki = +-180 stopni
Przykładowy kod przetwarzania:
Ten kod może komunikować się bezpośrednio z Arduino GRBL.
github.com/damellis/gctrl
Pamiętaj, aby ustawić serial na baud: 115200
Kod uoload w ardunio
import java.awt.event. KeyEvent;
importowanie javax.swing. JOptionPane;
importowanie przetwarzania.serial.*;
Port szeregowy = null;
// wybierz i zmodyfikuj odpowiednią linię dla swojego systemu operacyjnego
// zostaw jako null, aby użyć portu interaktywnego (naciśnij 'p' w programie)
Nazwa portu ciągu = null;
//String nazwa_portu = Serial.list()[0]; // Mac OS X
//String nazwa portu = "/dev/ttyUSB0"; // Linux
//String nazwa portu = "COM6"; // Windows
strumieniowanie logiczne = fałsz;
prędkość pływaka = 0,001;
String gcode;
int i = 0;
void otwórzSerialPort()
{
if (portname == null) return;
if (port != null) port.stop();
port = nowy numer seryjny (ten, nazwa portu, 115200);
port.bufferUntil('\n');
}
void selectSerialPort()
{
Wynik ciągu = (ciąg) JOptionPane.showInputDialog(to, "Wybierz port szeregowy odpowiadający Twojej płytce Arduino.", "Wybierz port szeregowy", JOptionPane. PLAIN_MESSAGE, zero, Serial.list(), 0);
if (wynik != null) {
nazwa_portu = wynik;
openSerialPort();
}
}
pusta konfiguracja()
{
rozmiar (500, 250);
openSerialPort();
}
nieważne remis()
{
tło(0);
wypełnić(255);
int y = 24, dy = 12;
text("INSTRUKCJE", 12, y); y += dy;
text("p: wybierz port szeregowy", 12, y); y += dy;
text("1: ustaw prędkość na 0,001 cala (1 mil) na impuls", 12, y); y += dy;
text("2: ustaw prędkość na 0,010 cala (10 mil) na impuls", 12, y); y += dy;
text("3: ustaw prędkość na 0,100 cala (100 mil) na impuls", 12, y); y += dy;
text("klawisze strzałek: przesuń w płaszczyźnie x-y", 12, y); y += dy;
text("strona w górę & strona w dół: przesuń w osi z", 12, y); y += dy;
text("$: wyświetl ustawienia grbl", 12, y); y+= dy;
text("h: idź do domu", 12, y); y += dy;
text("0: zero maszyny (ustaw dom do bieżącej lokalizacji)", 12, y); y += dy;
text("g: przesyłaj plik z kodem g", 12, y); y += dy;
text("x: zatrzymaj przesyłanie strumieniowe g-code (to NIE jest natychmiastowe)", 12, y); y += dy;
y = wysokość - dy;
text("bieżąca prędkość biegu: " + prędkość + " cale na krok", 12, y); y -= dy;
text("bieżący port szeregowy: " + nazwa portu, 12, y); y -= dy;
}
nieważny klawiszNaciśnięty()
{
jeśli (klawisz == '1') prędkość = 0,001;
jeśli (klawisz == '2') prędkość = 0,01;
jeśli (klawisz == '3') prędkość = 0,1;
jeśli (!streaming) {
if (keyCode == LEWO) port.write("G91\nG20\nG00 X-" + prędkość + " Y0.000 Z0.000\n");
if (keyCode == PRAWY) port.write("G91\nG20\nG00 X" + prędkość + " Y0.000 Z0.000\n");
if (keyCode == UP) port.write("G91\nG20\nG00 X0.000 Y" + prędkość + " Z0.000\n");
if (keyCode == DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + prędkość + " Z0.000\n");
if (keyCode == KeyEvent. VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + prędkość + "\n");
if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + prędkość + "\n");
//if (klucz == 'h') port.write("G90\nG20\nG00 X0.000 Y0.000 Z0.000\n");
if (klucz == 'v') port.write("$0=75\n$1=74\n$2=75\n");
//if (klucz == 'v') port.write("$0=100\n$1=74\n$2=75\n");
if (klucz == 's') port.write("$3=10\n");
if (klucz == 'e') port.write("$16=1\n");
if (klucz == 'd') port.write("$16=0\n");
if (klucz == '0') openSerialPort();
if (klucz == 'p') selectSerialPort();
if (klucz == '$') port.write("$$\n");
if (klucz == 'h') port.write("$H\n");
}
if (! streaming && key == 'g') {
gcode = null; i = 0;
plik pliku = null;
println("Ładowanie pliku…");
selectInput("Wybierz plik do przetworzenia:", "fileSelected", plik);
}
if (klucz == 'x') streaming = false;
}
void fileSelected(Wybór pliku) {
if (wybór == null) {
println("Okno zostało zamknięte lub użytkownik nacisnął Cancel.");
} w przeciwnym razie {
println("Wybrany przez użytkownika " + selection.getAbsolutePath());
gcode = loadStrings(selection.getAbsolutePath());
if (gcode == null) return;
strumieniowanie = prawda;
strumień();
}
}
pusty strumień()
{
if (!streaming) return;
podczas (prawda) {
if (i == gcode.length) {
przesyłanie strumieniowe = fałsz;
powrót;
}
if (gcode.trim().length() == 0) i++;
inaczej złamać;
}
println(gcode);
port.write(gcode + '\n');
i++;
}
void serialEvent(Serial p)
{
String s = p.readStringUntil('\n');
println(s.trim());
if (s.trim().startsWith("ok")) stream();
if (s.trim().startsWith("błąd")) stream(); // XXX: naprawdę?
}
Krok 5: Zaprojektuj i wydrukuj wszystkie części w arkuszu ze sklejki
Pobierz część robota i projekt w programie AutoCAD, a następnie wydrukuj na arkuszu ze sklejki o grubości 12 mm oraz część wykończeniową i projektową. Jeśli ktoś potrzebuje pliku cad plz, zostaw komentarz w polu komentarza, wyślę go bezpośrednio.
Krok 6: Montaż
zbierz wszystkie części i ułóż w kolejności na podanym obrazku i postępuj zgodnie ze schematem obrazka.
Krok 7: Skonfiguruj ustawienia GBRL
Ustawienie, które sprawdziło się w naszych robotach.
$0=10 (impuls kroku, usec) $1=255 (opóźnienie bezczynności kroku, ms) $2=7 (maska odwrócenia portu:00000111) $3=7 (maska odwrócenia portu dir:0000111) $4=0 (odwrócenie włączenia kroku, bool) $5=0 (odwrócone piny graniczne, bool) $6=1 (odwrócone piny sondy, bool) $10=3 (maska raportu stanu:00000011) $11=0.020 (odchylenie połączenia, mm) $12=0.002 (tolerancja łuku, mm) $13 =0 (raportuj cale, bool) $20=0 (miękkie limity, bool) $21=0 (twarde limity, bool) $22=1 (cykl bazowania, bool) $23=0 (homing dir invert mask:00000000) $24=100.000 (homing feed, mm/min) $25=500.000 (homing seek, mm/min) $26=250 (homing debounce, msek) $27=1.000 (homing pull-off, mm) $100=250.000 (x, krok/mm) $101= 250.000 (y, krok/mm) 102$=250.000 (z, krok/mm) 110$=500.000 (x maks. przest., mm/min) $111=500.000 (y maks. przest., mm/min) $112=500.000 (z maks. przest., mm/min.) mm/min) 120 USD = 10 000 (x przyśpieszenie, mm/s^2) 121 USD = 10 000 (przyśpieszenie y, mm/s^2) 122 USD = 10 000 (przyśpieszenie z, mm/s^2) 130 USD = 200 000 (x maksymalny skok, mm) $131=200.000 (y maks. przesuw, mm) $132=200.000 (z maks. przesuw, mm)
Krok 8: Prześlij kod końcowy i sprawdź wirtualny wynik w panelu oprogramowania Arduino Uno
// Jednostki: CM
pływak b_wysokość = 0;
pływak a1 = 92;
pływak a2 = 86;
pływak snude_len = 20;
boolean doZ = fałsz;
float base_angle;// = 0;
pływak ramię1_kąt; // = 0;
pływak ramię2_angle; //= 0;
pływak bx = 60;// = 25;
zmiennoprzecinkowa o = 60;// = 0;
pływak bz = 60;// = 25;
pływak x = 60;
pływak y = 60;
pływak z = 60;
pływak q;
pływak c;
pływak V1;
pływak V2;
pływak V3;
pływak V4;
pływak V5;
pusta konfiguracja () {
rozmiar (700, 700, P3D);
krzywka = nowa PeasyCam(to, 300);
cam.setMinimumDistance(50);
cam.setMaximumDistance(500);
}
nieważne rysowanie () {
//ligninger:
y = (myszX - szerokość/2)*(-1);
x = (myszY - wzrost/2)*(-1);
bz = z;
przez = 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;
ramię1_kąt = q;
V4 = radiany(90,0) - q;
V5 = radiany(180) - V4 - radiany(90);
kąt ramienia2 = radiany (180,0) - (V5 + V1);
kąt_podstawy = stopnie(atan2(bx, by));
ramię1_kąt=stopnie(ram1_kąt);
arm2_angle=stopnie(arm2_angle);
//println(by, bz);
//kąt ramienia1 = 90;
//kąt ramienia2 = 45;
/*
kąt ramienia2 = 23;
ramię1_kąt= 23;
ramię2_kąt=23;
*/
// interaktywne:
// jeśli (doZ)
//
// {
// base_angle = base_angle+ mouseX-pmouseX;
// } w przeciwnym razie
// {
// 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);
}
void draw_robot(float base_angle, float arm1_angle, float arm2_angle)
{
obróćX(1.2);
obróćZ(-1,2);
tło(0);
światła();
pushMatrix();
// BAZA
wypełnienie (150, 150, 150);
box_corner(50, 50, b_height, 0);
obróć(radiany(kąt_podstawy), 0, 0, 1);
// RAMIĘ 1
wypełnienie(150, 0, 150);
box_corner(10, 10, a1, ramię1_kąt);
// RAMIĘ 2
wypełnienie(255, 0, 0);
box_corner(10, 10, a2, ramię2_angle);
// SNUDE
wypełnienie(255, 150, 0);
box_corner(10, 10, snude_len, -arm1_angle-arm2_angle+90);
popMatrix();
pushMatrix();
float action_box_size=100;
przetłumacz(0, -action_box_size/2, action_box_size/2+b_height);
pushMatrix();
przetłumacz(x, wielkość_pudełka_działania- y-rozmiar_pudełka_działania/2, z-rozmiar_pudełka_działania/2);
wypełnienie(255, 255, 0);
pudełko(20);
popMatrix();
wypełnienie(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 obrót)
{
obróć(radiany(obróć), 1, 0, 0);
przetłumacz(0, 0, d/2);
pudełko (szer., wys., gł.);
przetłumacz(0, 0, d/2);
}
nieważny klawiszNaciśnięty()
{
jeśli (klucz == 'z')
{
doZ = !doZ;
}
jeśli (klucz == 'h')
{
// ustaw wszystko na zero
kąt ramienia2 = 0;
ramię1_kąt = 90;
kąt_podstawy = 0;
}
jeśli (klucz == 'g')
{
println(stopnie(V1));
println(stopnie(V5));
}
jeśli (keyCode == UP)
{
z++;
}
jeśli (keyCode == DOWN)
{
z-;
}
jeśli (klucz == 'o')
{
y = 50;
z = 50;
println(q);
println(c, "c");
println(V1, "V1");
println(V2);
drukujln(V3);
println(arm1_angle);
println(V4);
drukujln(V5);
println(arm2_angle);
}
}
Zalecana:
Przeróbka BGA za pomocą szablonu Stay in Place: 7 kroków
Przeróbka BGA za pomocą szablonu Stay in Place: Wzornik BGA do przeróbek z funkcją pozostania na miejscu, aby uprościć proces i naprawić uszkodzoną maskę lutowniczą. Poprawia wydajność pierwszego przejścia i naprawia maskę lutowniczą, która mogła zostać uszkodzona przez urządzenie. Zobacz więcej informacji na temat przeróbek BGA na ba
Cyfrowe place zabaw - dostępne dla dzieci z dysfunkcją wzroku: 13 kroków (ze zdjęciami)
Cyfrowe place zabaw – dostępne dla dzieci z dysfunkcją wzroku: Ten instruktażowy zaczyna się od poprzedniego projektu – aby zbudować pojedynczą podkładkę dociskową – a następnie kontynuuje to, aby pokazać, jak ten prosty projekt technologiczny można rozszerzyć, aby cały plac zabaw stał się cyfrowy! Ta technologia istnieje już w postaci
Oparte na wizji pick-and-place z UArm: 6 kroków
Oparte na wizji pick-and-place z UArm: Ostatnio większość pytań, które otrzymujemy od ciebie, dotyczy aplikacji opartych na wizji uArm, takich jak rozpoznawanie obiektów, korelacja kamera-uArm itp. Właściwie pracowaliśmy nad tym dla okres czasu.Przeprowadziliśmy prostą wizję opartą na p
Porozmawiaj z Pick i czatem o sztucznej inteligencji za pomocą Cleverbot: 14 kroków (ze zdjęciami)
Talk to Pick i czat ze sztuczną inteligencją za pomocą Cleverbota: Tutaj próbuję nie tylko poleceń głosowych, ale także czatu sztucznej inteligencji z komputerem za pomocą Cleverbota. Właściwie pomysł pojawił się, gdy znalezione dzieci mieszały kolory w pudełku do kolorowania, gdy wybierały kolor z jednego koloru do najbliższego. Ale w końcu zaimplementuj
Arduino Base Auto Direction Robot: 8 kroków (ze zdjęciami)
Arduino Base Auto Direction Robot: to robot, który porusza się omijając przeszkody. wyczuwa obiekt i ogląda otoczenie i idzie tam, gdzie dostępna jest wolna przestrzeń