Spisu treści:

Ramię robota sterowane drutem: 31 kroków
Ramię robota sterowane drutem: 31 kroków

Wideo: Ramię robota sterowane drutem: 31 kroków

Wideo: Ramię robota sterowane drutem: 31 kroków
Wideo: Przegub \ stelaż do budowy robota, ramienia robota. Jak zrobić ramie robota z manipulatorem ARM 2025, Styczeń
Anonim
Ramię robota sterowane drutem
Ramię robota sterowane drutem

To samouczek, jak zrobić ramię robota sterowane przewodami. Zaletą używania przewodów jest to, że ramię jest lżejsze, a wszystkie silniki można umieścić na spodzie ramienia, co ułatwia budowanie i konserwację. Oto film przedstawiający ramię w akcji. W przyszłości planuję dodać pazur, aby mógł podnosić przedmioty, a nie tylko je popychać.

Materiały do druku 3D:

Tu i Tu

Kieszonkowe dzieci

6 serwosilników (MG995)

Arduino Uno

Około 6 metrów drutu stalowego powlekanego tworzywem sztucznym (0,5 mm)

Pudełko 23x33x10 (może być węższe, zdecydowanie nie powinno być krótsze)

Deska drewniana 33x10

Nakrętki i śruby

Rurka 14 cm (jest potrzebna do prowadzenia sznurków)

4 wsporniki L

Zasilacz 5-woltowy

2 7-drogowe listwy zaciskowe

Druty do krojenia chleba

Elementy drukowane 3D (nie zaprojektowane przeze mnie, linki do elementów w opisie):

3 „Śruby”

2 „Element 1”

1 „Element 2”

2 „Element 3”

1 złącze podstawowe

Krok 1: Wydrukuj wszystkie komponenty 3D

Możesz potrzebować wsparcia dla otworów na śruby i łuków, ale upewnij się, że nie dodajesz wsparcia do korpusu swoich komponentów; to zamknie małe otwory z drutu i będziesz musiał zrobić nowe otwory

Krok 2: (Opcjonalnie) Przymocuj drewnianą deskę do dna pudełka, aby je wzmocnić

Moje pudełko było dość słabe, twoje może nie być

Krok 3: Zmierz i wytnij deskę, aby pasowała do pudełka

Krok 4: Zaznacz pozycje silników

upewnij się, że żadne z ramion nie styka się ze sobą

Krok 5: Zaznacz pozycje wsporników i rury

Zaznacz pozycje wsporników i rury
Zaznacz pozycje wsporników i rury

Rurę należy umieścić około jednego centymetra przed otworem

Krok 6: Wywierć otwór na kable wychodzące z pudełka (USB i zasilanie)

Wywierć otwór na kable wychodzące z pudełka (USB i zasilanie)
Wywierć otwór na kable wychodzące z pudełka (USB i zasilanie)

Krok 7: Wiercenie i piłowanie wszystkich zaznaczonych otworów

Wiercenie i piłowanie wszystkich zaznaczonych otworów
Wiercenie i piłowanie wszystkich zaznaczonych otworów

Krok 8: Przymocuj silniki i rurę do deski

Krok 9: Przymocuj deskę do pudełka za pomocą wsporników L

Krok 10: Weź zaciski i przylutuj razem przewody

Weź swoje bloki zaciskowe i przylutuj przewody razem
Weź swoje bloki zaciskowe i przylutuj przewody razem

Krok 11: Odetnij koniec przewodu zasilającego adaptera i zdejmij izolację z przewodów

Krok 12: Zidentyfikuj i oznacz przewody plus i minus

Krok 13: Podłącz przewody do bloków zacisków, aby wszystkie przewody + serwo i przewód + z przewodu zasilającego były połączone, to samo dotyczy przewodów -

Podłącz przewody do bloków zacisków, aby wszystkie przewody + serwa i przewód + z przewodu zasilającego były połączone, to samo dotyczy przewodów
Podłącz przewody do bloków zacisków, aby wszystkie przewody + serwa i przewód + z przewodu zasilającego były połączone, to samo dotyczy przewodów

Krok 14: Odetnij głowę drutu od deski do krojenia chleba

Odetnij głowę od drutu od deski do krojenia chleba
Odetnij głowę od drutu od deski do krojenia chleba

Podłącz pozbawiony izolacji koniec przewodu płytki stykowej do ujemnej listwy zaciskowej, a końcówkę stykową do kołka uziemiającego w arduino. Jeśli tego nie zrobisz, silniki będą poruszać się chaotycznie bez żadnego wkładu.

Krok 15: Wywierć trzy otwory w dolnej części pudełka na przewody wychodzące z ramienia

Otwory powinny pasować do otworów w łączniku podstawy.

Krok 16: Podłącz złącze podstawy do pudełka

Przymocuj złącze podstawy do pudełka
Przymocuj złącze podstawy do pudełka

Krok 17: Użyj noża lub pilnika do paznokci, aby pogłębić rowki z drutu

Użyj noża lub pilnika do paznokci, aby pogłębić rowki z drutu
Użyj noża lub pilnika do paznokci, aby pogłębić rowki z drutu

Rowki drutu dla elementów 2 i 3 są zbyt płytkie.

Krok 18: Skonstruuj ramię

Zbuduj ramię
Zbuduj ramię

Skonstruuj ramię zgodnie z instrukcjami tutaj, być może będziesz musiał złożyć części tak, aby pasowały

Krok 19: Zainstaluj przetwarzanie i Arduino

Przetwarzanie i Arduino

Krok 20: Wklej programy kodu

Kod znajduje się na dole tej strony

Krok 21: Podłącz piny sterujące serwomechanizmu do Arduino

Podłącz piny sterujące serwomechanizmu do Arduino
Podłącz piny sterujące serwomechanizmu do Arduino

Podłączyłem pierwszy silnik do trzeciego pinu cyfrowego, drugi silnik do czwartego pinu cyfrowego i tak dalej. Upewnij się, że styk uziemienia jest nadal podłączony do listwy zaciskowej -.

Krok 22: Naciśnij przycisk resetowania podczas przetwarzania, spowoduje to ustawienie wszystkich ramion na 90 stopni

Krok 23: Przymocuj ramiona serw do silnika poziomo

Krok 24: Przeciągnij przewody przez ramiona, aby nie było luzu

Upewnij się, że przewleczesz drut przez tyle otworów, ile możesz, co tymczasowo go przytrzyma i będzie łatwe do usunięcia.

Krok 25: Przetestuj ramię i dokręć lub poluzuj przewody w razie potrzeby

Krok 26: Przyklej na gorąco przewody do ramion serwomechanizmu, aby były trwałe

Krok 27: Notatki

Uwagi
Uwagi

Użyłem drutu jubilerskiego 0,5 mm, ale 0,4 mm powinno wystarczyć. Oryginalny projekt wykorzystywał drut PVC, ale zbyt łatwo się łamał i był trudny w obróbce.

Jeśli zamierzasz poruszać ramieniem w samochodzie lub rowerze, owiń stawy ramion taśmą, aby upewnić się, że nie wyskoczą. Jest to szczególnie ważne dla elementu 1.

Kiedy zaczynałem ten projekt, zastanawiałem się, dlaczego udało mi się znaleźć tylko jeden samouczek, jak zrobić ramię sterowane przewodami. Teraz rozumiem, dlaczego nie jest to najczęstszy sposób na zrobienie hobbystycznego ramienia robota. Druty czasami wypadają z rowków i całość jest licha. Nie wiem, czy problemy wynikają z tego, że nie mam dużego doświadczenia, czy cały pomysł jest problematyczny, chociaż jestem pewien, że byłby bardziej solidny, gdybym wiedział, co robię.

Krok 28: Rozwiązywanie problemów

Otwory na przewody są zamknięte w elementach drukowanych w 3D:

Dodałeś obsługę całego elementu zamiast tylko otworów na śruby. Albo ponownie wydrukuj element, albo otwórz otwory naprawdę gorącą igłą.

Port COM jest zamknięty, nie można komunikować się z arduino:

Twoje arduino może nie akceptować portów USB 3 (moje nie), możesz kupić przedłużacz USB 2 lub użyć komputera z portami USB 2

Kod nie działa:

Postępuj zgodnie z tym samouczkiem i zmodyfikuj go, aby stworzyć własny kod

Część ramienia nie porusza się:

Przewody mogły się zaplątać, aby to sprawdzić, zdejmij ramię serwa z serwa i spróbuj ręcznie pociągnąć przewody. Rozplątaj przewody, a jeśli nadal trudno jest je ciągnąć, spróbuj użyć WD-40 lub smaru, aby ułatwić ruch

Krok 29: Linki

Ramię bez robota:

Ramię do druku 3D:

Moje ramię do druku 3D:

Arduino i przetwarzanie:

Krok 30: Kod

Zmodyfikowano z tego kodu

Kod Arduino:

#include //Zadeklaruj silniki Servo myservo1; Serwo myservo2; Serwo myservo3; Serwo myservo4; Serwo myservo5; Serwo myservo6; //Wszystkie silniki są domyślnie ustawione na 90 stopni int current1 = 90; prąd int2 = 90; prąd wewnętrzny3 = 90; prąd wewnętrzny4 = 90; prąd wewnętrzny5 = 90; prąd wewnętrzny6 = 90; //Minimalne i maksymalne stopnie, które silniki mogą osiągnąć int mini1 = 0; int max1 = 180; int mini2 = 0; int maxi2 = 180; int mini3 = 0; int max3 = 180; int mini4 = 0; int max4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; int maxi6 = 180; //Stopnie do dodania lub odjęcia od aktualnej pozycji intdegreesForward = 5; //Opóźnienie, aby dwie funkcje nie działały w złej kolejności int delayBetweenSteps = 100; void setup() { //Ustaw piny sterujące dla każdego silnika myservo1.attach(3); myservo2.attach(4); myservo3.attach(5); myservo4.attach(6); myservo5.attach(7); myservo6.attach(8); //Ustaw wszystkie silniki na domyślne ustawienie myservo1.write(current1); myservo2.write(current2); myservo3.write(bieżący3); myservo4.write(current4); myservo5.write(current5); myservo6.write(current6); //rozpocznij komunikację szeregową @9600 bps Serial.begin(9600); } void loop(){ if(Serial.available()){ //jeśli dane są dostępne do odczytu char val = Serial.read(); //wstaw to do tego znaku //Sterowanie silnikami if(val == 'a' && current1 + degreeFoward mini1){ myservo1.write(current1 - degreeFoward); bieżąca1 = bieżąca1 - stopnieDo przodu; opóźnienie (opóźnienie między krokami); } if(val == 'c' && current2 mini2){ myservo2.write(current2 - degreeFoward); obecny2 = obecny2 - stopnieDo przodu; opóźnienie (opóźnienie między krokami); } if(val == 'e' && current3 mini3){ myservo3.write(current3 - degreeFoward); obecny3 = obecny3 - stopnieDo przodu; opóźnienie (opóźnienie między krokami); } if(val == 'g' && current4 mini4){ myservo4.write(current4 - degreeFoward); bieżąca4 = bieżąca4 - stopnieDo przodu; opóźnienie (opóźnienie między krokami); } if(val == 'i' && current5 mini5){ myservo5.write(current5 - degreeFoward); bieżąca5 = bieżąca5 - stopnieDo przodu; opóźnienie (opóźnienie między krokami); } if(val == 'k' && current6 mini6){ myservo6.write(current6 - degreeFoward); bieżąca6 = bieżąca6 - stopnieDo przodu; opóźnienie (opóźnienie między krokami); } //Kontrola prędkości if(val == 'w'){ //Jeśli przycisk prędkości 1 został naciśnięty w stopniachDo przodu = 1; opóźnienie (opóźnienie między krokami); } if(val == 'x'){ //Jeśli naciśnięto przycisk prędkości 5 w stopniachDo przodu = 5; opóźnienie (opóźnienie między krokami); } if(val == 'y'){ //Jeżeli przycisk prędkości 10 został naciśnięty w stopniach Do przodu = 10; opóźnienie (opóźnienie między krokami); } if(val == 'z'){ //Jeśli naciśnięto przycisk prędkości 20 stopni do przodu = 20; opóźnienie (opóźnienie między krokami); } if(val == 'r'){ //Jeśli naciśnięto przycisk prędkości 20 myservo1.write(90); obecny1 = 90; myservo2.write(90); prąd2 = 90; myservo3.write(90); prąd3 = 90; myservo4.write(90); prąd4 = 90; myservo5.write(90); prąd5 = 90; myservo6.write(90); prąd6 = 90; opóźnienie (opóźnienie między krokami); } } }

Kod przetwarzania:

importowanie przetwarzania.serial.*; kontrola importu P5.*; //import biblioteki ControlP5 Port szeregowy; KontrolaP5 cp5; //utwórz czcionkę PFont obiektu ControlP5; void setup(){ //to samo co rozmiar programu arduino (300, 700); //rozmiar okna, (szerokość, wysokość) printArray(Serial.list()); //wypisuje wszystkie dostępne porty szeregowe //Jeśli masz problem, prawdopodobnie pochodzi on stąd String portName = Serial.list()[0]; port = nowy numer seryjny (ten, nazwa_portu, 9600); //podłączyłem arduino do com3, będzie inaczej w linux i mac os //dodaj przycisk do pustego okna cp5 = new ControlP5(this); font = createFont("Arial", 13); // niestandardowe czcionki dla przycisków i tytułu // Przyciski kontroli prędkości cp5.addButton("Jeden") //"Jeden" to nazwa przycisku.setPosition(50, 50) //współrzędne xiy lewego górnego rogu przycisku.setSize(55, 25) //(szerokość, wysokość).setFont(czcionka); cp5.addButton("Pięć").setPosition(110, 50).setSize(55, 25).setFont(font); cp5.addButton("Dziesięć").setPosition(170, 50).setSize(55, 25).setFont(font); cp5.addButton("Dwadzieścia").setPosition(230, 50).setSize(55, 25).setFont(font); cp5.addButton("Resetuj").setPosition(110, 2).setSize(55, 25).setFont(font); cp5.addButton("Servo_1_Do przodu").setPosition(50, 90).setSize(190, 40).setFont(font); // Przyciski sterowania silnikiem cp5.addButton("Servo_1_Back").setPosition(50, 140).setSize(190, 40).setFont(font); cp5.addButton("Servo_2_Foward").setPosition(50, 190).setSize(190, 40).setFont(font); cp5.addButton("Servo_2_Back").setPosition(50, 240).setSize(190, 40).setFont(font); cp5.addButton("Servo_3_Foward").setPosition(50, 290).setSize(190, 40).setFont(font); cp5.addButton("Servo_3_Back").setPosition(50, 340).setSize(190, 40) //(szerokość, wysokość).setFont(czcionka); cp5.addButton("Servo_4_Foward").setPosition(50, 390).setSize(190, 40).setFont(font); cp5.addButton("Servo_4_Back").setPosition(50, 440).setSize(190, 40) //(szerokość, wysokość).setFont(czcionka); cp5.addButton("Serwo_5_Naprzód").setPosition(50, 490).setSize(190, 40).setFont(czcionka); cp5.addButton("Servo_5_Back").setPosition(50, 540).setSize(190, 40).setFont(font); cp5.addButton("Servo_6_Foward").setPosition(50, 590).setSize(190, 40).setFont(font); cp5.addButton("Servo_6_Back").setPosition(50, 640).setSize(190, 40).setFont(font); } void draw(){ //to samo co pętla w tle arduino(192, 215, 249); // kolor tła okna (r, g, b) lub (0 do 255) //Dodaj tekst mówiący, że kontrola szybkości to kontrola szybkości fill(0, 10, 25); //kolor tekstu (r, g, b) textFont(czcionka); text("Kontrola prędkości", 50, 40); // ("tekst", współrzędna x, współrzędna y) } //dodajmy kilka funkcji do naszych przycisków //więc kiedy naciśniesz dowolny przycisk, wyśle on określony znak przez port szeregowy //jestem pewien, że można wysłać ciągi zamiast znaków i byłoby to bardziej sensowne, ale nie wiem, jak to zrobić //Polecenia kontroli prędkości void One(){ port.write('w'); } void Five(){ port.write('x'); } void Ten(){ port.write('y'); } void Twenty(){ port.write('z'); } //Polecenia sterowania silnikiem void Servo_1_Forward(){ port.write('a'); } void Servo_1_Back(){ port.write('b'); } void Servo_2_Foward(){ port.write('c'); } void Servo_2_Back(){ port.write('d'); } void Servo_3_Foward(){ port.write('e'); } void Servo_3_Back(){ port.write('f'); } void Servo_4_Foward(){ port.write('g'); } void Servo_4_Back(){ port.write('h'); } void Servo_5_Foward(){ port.write('i'); } void Servo_5_Back(){ port.write('j'); } void Servo_6_Foward(){ port.write('k'); } void Servo_6_Back(){ port.write('l'); } void Reset(){ port.write('r'); }

Krok 31: Więcej zdjęć