Innehållsförteckning:

Trådstyrd robotarm: 31 steg
Trådstyrd robotarm: 31 steg

Video: Trådstyrd robotarm: 31 steg

Video: Trådstyrd robotarm: 31 steg
Video: Steven Meets Universe (Lost Episode!) 2024, November
Anonim
Trådstyrd robotarm
Trådstyrd robotarm

Detta är en handledning om hur man gör en robotarm som styrs av ledningar. Fördelen med att använda ledningar är att din arm är lättare och att du kan ha alla dina motorer i botten av armen, vilket gör byggandet och underhållet enklare. Här är en video av armen i aktion. Jag planerar att lägga till en klo i framtiden så att den kan plocka upp saker och inte bara skjuta dem runt.

3D Printables:

Här och här

Tillbehör

6 servomotorer (MG995)

Arduino Uno

Cirka 6 meter plastbelagd ståltråd (0,5 mm)

Box 23x33x10 (kan vara smalare, ska absolut inte vara kortare)

Planka av trä 33x10

Muttrar och bultar

Rör 14 cm (detta behövs för att styra strängarna)

4 L-fästen

5-voltsadapter

2 7-vägs kopplingsplintar

Brödbrädetrådar

3D -tryckta komponenter (ej designad av mig, länkar till element i beskrivningen):

3 "bultar"

2 "Element 1"

1”Element 2”

2”Element 3”

1 Basanslutning

Steg 1: Skriv ut alla 3D -komponenter

Du kan behöva stöd för bulthålen och bågarna, men se till att inte lägga till stöd för kroppen på dina komponenter; detta kommer att stänga de små trådhålen och du måste göra nya hål

Steg 2: (Valfritt) Fäst en träplanka i botten av din låda för att stärka den

Min låda var ganska svag, din kanske inte

Steg 3: Mät och skär en träplanka för att passa lådan

Steg 4: Markera motorernas positioner

se till att ingen av armarna vidrör varandra

Steg 5: Markera positionerna för fästena och röret

Markera positionerna för fästena och röret
Markera positionerna för fästena och röret

Röret ska placeras cirka en centimeter framför hålet

Steg 6: Borra ett hål för kablarna som kommer ut ur din låda (USB och ström)

Borra ett hål för kablarna som kommer ut ur din låda (USB och ström)
Borra ett hål för kablarna som kommer ut ur din låda (USB och ström)

Steg 7: Borra och såg alla markerade hål

Borra och såg alla märkta hål
Borra och såg alla märkta hål

Steg 8: Fäst motorerna och röret på plankan

Steg 9: Fäst plankan på lådan med L-fästena

Steg 10: Ta dina terminalblock och löd ihop trådarna

Ta dina terminalblock och löd ihop trådarna
Ta dina terminalblock och löd ihop trådarna

Steg 11: Klipp av änden på adapterkabeln och ta bort kablarna

Steg 12: Identifiera och markera Plus- och Minus -trådarna

Steg 13: Fäst ledningarna i plintarna så att alla + servotrådar och + ledningen från nätsladden är anslutna, samma gäller för - trådarna

Fäst ledningarna i plintarna så att alla + servotrådar och + ledningen från nätsladden är anslutna, samma sak gäller - trådarna
Fäst ledningarna i plintarna så att alla + servotrådar och + ledningen från nätsladden är anslutna, samma sak gäller - trådarna

Steg 14: Klipp av huvudet från en brödbrädetråd

Skär av huvudet från en brödbrädetråd
Skär av huvudet från en brödbrädetråd

Fäst den avskalade änden av brödbrädet till minusplinten och stiftänden till jordstiftet i din arduino. Om du inte gör detta kommer motorerna att röra sig oregelbundet utan inmatning.

Steg 15: Borra tre hål i botten av lådan för trådarna som kommer ut ur din arm

Hålen ska matcha upp till hålen i baskontakten.

Steg 16: Fäst baskontakten i lådan

Fäst baskontakten på lådan
Fäst baskontakten på lådan

Steg 17: Använd en kniv eller spikfil för att göra trådspåren djupare

Använd en kniv eller spikfil för att göra trådspåren djupare
Använd en kniv eller spikfil för att göra trådspåren djupare

Trådspåren för element 2 och 3 är för grunda.

Steg 18: Konstruera armen

Konstruera armen
Konstruera armen

Konstruera armen enligt instruktionerna här du kan behöva fila delarna så att de passar

Steg 19: Installera Processing och Arduino

Bearbetning och Arduino

Steg 20: Klistra in kodprogrammen

Koden finns längst ner på denna sida

Steg 21: Anslut Servo Control Pins till Arduino

Anslut Servo Control Pins till Arduino
Anslut Servo Control Pins till Arduino

Jag kopplade den första motorn till den tredje digitala stiftet, den andra motorn till den fjärde digitala stiftet och så vidare. Se till att jordstiftet fortfarande är anslutet till - plint.

Steg 22: Tryck på återställningsknappen under bearbetning, detta kommer att ställa in alla armar till 90 grader

Steg 23: Fixera servoarmarna till motorn horisontellt

Steg 24: Trä trådarna genom armarna så att det inte finns någon slack

Se till att du leder tråden genom så många hål du kan, detta håller den tillfälligt och är lätt att ta bort.

Steg 25: Testa armen och dra åt eller lossa trådarna efter behov

Steg 26: Limma trådarna på servoarmarna för att göra det permanent

Steg 27: Anteckningar

Anteckningar
Anteckningar

Jag använde 0,5 mm smyckestråd men 0,4 mm borde vara bra. Den ursprungliga designen använde PVC -tråd men den gick sönder för lätt och var svår att arbeta med.

Om du ska flytta armen i en bil eller cykel, vik in armarna i tejp så att de inte kommer ut. Detta är särskilt viktigt för element 1.

När jag började detta projekt undrade jag varför jag bara kunde hitta en handledning om hur man gör en arm som styrs av trådar. Nu förstår jag varför detta inte är det vanligaste sättet att göra en hobbyrobotarm. Trådarna faller ibland ur spåren och det hela är lite tunt. Jag vet inte om problemen beror på att jag inte har mycket erfarenhet eller om hela idén är problematisk även om jag är säker på att det skulle vara mer gediget om jag visste vad jag gjorde.

Steg 28: Felsökning

Trådhålen är tillslutna i de 3D -tryckta elementen:

Du lade till stöd för hela elementet istället för bara bulthålen. Antingen skriva ut elementet igen eller öppna hålen med en riktigt het nål.

COM -porten är stängd, du kan inte kommunicera med arduino:

Din arduino accepterar kanske inte USB 3 -portar (min gjorde inte), du kan antingen köpa en USB 2 -förlängningskabel eller använda en dator som har USB 2 -portar

Koden fungerar inte:

Följ denna handledning och ändra den för att skapa din egen kod

En del av armen rör sig inte:

Ledningarna kan ha trasslat ihop sig, för att kontrollera detta, ta servoarmen från servon och försök dra i ledningarna för hand. Lossa ledningarna och om det fortfarande är svårt att dra i trådarna, försök att använda lite WD-40 eller ett smörjmedel för att underlätta rörelsen

Steg 29: Länkar

Icke-robotarm:

Arm 3D Printables:

My Arm 3D Printable:

Arduino och bearbetning:

Steg 30: Kod

Ändrad från denna kod

Arduino -kod:

#inkludera // Deklarera motorerna Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Alla motorer är inställda på 90 grader som standard int current1 = 90; int ström2 = 90; int ström3 = 90; int ström4 = 90; int ström5 = 90; int ström6 = 90; // Minsta och högsta grad motorerna kan nå int mini1 = 0; int maxi1 = 180; int mini2 = 0; int maxi2 = 180; int mini3 = 0; int maxi3 = 180; int mini4 = 0; int maxi4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; int maxi6 = 180; // Grader som ska läggas till eller subtraheras från nuvarande position int graderFoward = 5; // Fördröjning så att två funktioner inte händer i fel ordning int delayBetweenSteps = 100; void setup () {// Ställ in kontrollnålar för varje motor myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Ställ in alla motorer på standardinställningen myservo1.write (current1); myservo2.write (current2); myservo3.write (current3); myservo4.write (current4); myservo5.write (current5); myservo6.write (current6); // starta seriell kommunikation @9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// om data finns tillgänglig för att läsa char val = Serial.read (); // lägg den i den här karaktären // Motorstyrning om (val == 'a' && current1 + degreesFoward mini1) {myservo1.write (current1 - degreesFoward); current1 = current1 - degreesFoward; delay (delayBetweenSteps); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - degreesFoward); current2 = current2 - degreesFoward; delay (delayBetweenSteps); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - degreesFoward); current3 = current3 - degreesFoward; delay (delayBetweenSteps); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - degreesFoward); current4 = current4 - degreesFoward; delay (delayBetweenSteps); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - degreesFoward); current5 = current5 - degreesFoward; delay (delayBetweenSteps); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - degreesFoward); current6 = current6 - degreesFoward; delay (delayBetweenSteps); } // Hastighetskontroller om (val == 'w') {// Om hastighet 1 -knappen trycks ned graderFoward = 1; delay (delayBetweenSteps); } if (val == 'x') {// Om knappen hastighet 5 trycks ned graderFoward = 5; delay (delayBetweenSteps); } if (val == 'y') {// Om hastighet 10 -knappen trycks ned graderFoward = 10; delay (delayBetweenSteps); } if (val == 'z') {// Om knappen hastighet 20 trycks ned graderFoward = 20; delay (delayBetweenSteps); } if (val == 'r') {// Om hastighet 20 -knappen tryckt på myservo1.write (90); ström1 = 90; myservo2.write (90); ström2 = 90; myservo3.write (90); ström3 = 90; myservo4.write (90); ström4 = 90; myservo5.write (90); ström 5 = 90; myservo6.write (90); ström6 = 90; delay (delayBetweenSteps); }}}

Bearbetningskod:

import bearbetning. serie.*; importkontrollP5.*; // import ControlP5 -bibliotek Seriell port; ControlP5 cp5; // skapa ControlP5 -objekt PFont -teckensnitt; void setup () {// samma som arduino -programstorlek (300, 700); // fönsterstorlek, (bredd, höjd) printArray (Serial.list ()); // skriver ut alla tillgängliga seriella portar // Om du har ett problem kommer det förmodligen härifrån String portName = Serial.list () [0]; port = new Serial (detta, portnamn, 9600); // jag har anslutit arduino till com3, det skulle vara annorlunda i linux och mac os // låt oss lägga till buton i tomt fönster cp5 = nytt ControlP5 (detta); font = createFont ("Arial", 13); // anpassade teckensnitt för knappar och titel // Hastighetskontrollknappar cp5.addButton ("One") // "One" är namnet på knappen.setPosition (50, 50) // x- och y -koordinaterna i det övre vänstra hörnet av knappen.setSize (55, 25) // (bredd, höjd).setFont (typsnitt); cp5.addButton ("Five").setPosition (110, 50).setSize (55, 25).setFont (font); cp5.addButton ("Ten").setPosition (170, 50).setSize (55, 25).setFont (font); cp5.addButton ("Twenty").setPosition (230, 50).setSize (55, 25).setFont (font); cp5.addButton ("Återställ").setPosition (110, 2).setSize (55, 25).setFont (font); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (font); // Motorstyrknappar 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) // (bredd, höjd).setFont (font); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (font); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (bredd, höjd).setFont (font); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (font); 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 () {// samma som loop i arduino -bakgrund (192, 215, 249); // bakgrundsfärg på fönstret (r, g, b) eller (0 till 255) // Lägg till text som säger att hastighetskontroll är hastighetskontrollfyllning (0, 10, 25); // textfärg (r, g, b) textFont (font); text ("Hastighetsreglering", 50, 40); // ("text", x koordinat, y koordinat)} // låter oss lägga till några funktioner till våra knappar // så när du trycker på någon knapp skickar den särskild char över seriell port // Jag är säker på att det är möjligt att skicka strängar istället för tecken, och det skulle vara mer meningsfullt men jag vet inte hur jag ska göra det // Speed Control Commands void One () {port.write ('w'); } ogiltig Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // Motorstyrkommandon ogiltiga Servo_1_Foward () {port.write ('a'); } ogiltig Servo_1_Back () {port.write ('b'); } ogiltig Servo_2_Foward () {port.write ('c'); } ogiltig Servo_2_Back () {port.write ('d'); } ogiltig Servo_3_Foward () {port.write ('e'); } ogiltig Servo_3_Back () {port.write ('f'); } ogiltig Servo_4_Foward () {port.write ('g'); } ogiltig Servo_4_Back () {port.write ('h'); } ogiltig Servo_5_Foward () {port.write ('i'); } ogiltig Servo_5_Back () {port.write ('j'); } ogiltig Servo_6_Foward () {port.write ('k'); } ogiltig Servo_6_Back () {port.write ('l'); } void Reset () {port.write ('r'); }

Steg 31: Fler bilder

Rekommenderad: