Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Wydrukuj wszystkie komponenty 3D
- Krok 2: (Opcjonalnie) Przymocuj drewnianą deskę do dna pudełka, aby je wzmocnić
- Krok 3: Zmierz i wytnij deskę, aby pasowała do pudełka
- Krok 4: Zaznacz pozycje silników
- Krok 5: Zaznacz pozycje wsporników i rury
- Krok 6: Wywierć otwór na kable wychodzące z pudełka (USB i zasilanie)
- Krok 7: 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
- 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 -
- Krok 14: Odetnij głowę drutu od deski do krojenia chleba
- Krok 15: Wywierć trzy otwory w dolnej części pudełka na przewody wychodzące z ramienia
- Krok 16: Podłącz złącze podstawy do pudełka
- Krok 17: Użyj noża lub pilnika do paznokci, aby pogłębić rowki z drutu
- Krok 18: Skonstruuj ramię
- Krok 19: Zainstaluj przetwarzanie i Arduino
- Krok 20: Wklej programy kodu
- Krok 21: Podłącz piny sterujące serwomechanizmu do Arduino
- 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
- 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
- Krok 28: Rozwiązywanie problemów
- Krok 29: Linki
- Krok 30: Kod
- Krok 31: Więcej zdjęć
Wideo: Ramię robota sterowane drutem: 31 kroków
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
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
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)
Krok 7: 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
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 -
Krok 14: Odetnij głowę 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
Krok 17: 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ę
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łą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
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'); }