Inhoudsopgave:

Draadgestuurde robotarm - Ajarnpa
Draadgestuurde robotarm - Ajarnpa

Video: Draadgestuurde robotarm - Ajarnpa

Video: Draadgestuurde robotarm - Ajarnpa
Video: Голубая стрела (1958) фильм 2024, November
Anonim
Draadgestuurde robotarm
Draadgestuurde robotarm

Dit is een tutorial over hoe je een robotarm kunt maken die wordt bestuurd door draden. Het voordeel van het gebruik van draden is dat je arm lichter is en je al je motoren in de onderkant van je arm kunt hebben, waardoor bouwen en onderhoud makkelijker wordt. Hier is een video van de arm in actie. Ik ben van plan om in de toekomst een klauw toe te voegen, zodat hij dingen kan oppakken en niet alleen maar rondduwen.

3D-afdrukbare bestanden:

Hier en hier

Benodigdheden

6 servomotoren (MG995)

Arduino Uno

Ongeveer 6 meter geplastificeerd staaldraad (0,5 mm)

Doos 23x33x10 (mag smaller zijn, zeker niet korter)

Plank van hout 33x10

Bouten en moeren

Pijp 14 cm (dit is nodig om de snaren te geleiden)

4 L-beugels

5-volt adapter

2 7-polige aansluitblokken

Breadboard draden

3D-geprinte componenten (niet door mij ontworpen, links naar elementen in de beschrijving):

3 "Bouten"

2 “Element 1”

1 "Element 2"

2 "Element 3"

1 basisconnector

Stap 1: Print alle 3D-componenten

Mogelijk hebt u ondersteuning nodig voor de boutgaten en bogen, maar zorg ervoor dat u geen ondersteuning toevoegt aan het lichaam van uw componenten; dit zal de kleine draadgaten sluiten en je zult nieuwe gaten moeten maken

Stap 2: (Optioneel) Bevestig een houten plank aan de onderkant van uw doos om deze te versterken

Mijn doos was behoorlijk zwak, de jouwe misschien niet

Stap 3: Meet en snijd een houten plank om in de doos te passen

Stap 4: Markeer de posities van de motoren

zorg ervoor dat geen van de armen elkaar raken

Stap 5: Markeer de posities van de beugels en de buis

Markeer de posities van de beugels en de buis
Markeer de posities van de beugels en de buis

De buis moet ongeveer een centimeter voor het gat worden geplaatst

Stap 6: Boor een gat voor de kabels die uit uw doos komen (USB en voeding)

Boor een gat voor de kabels die uit uw doos komen (USB en voeding)
Boor een gat voor de kabels die uit uw doos komen (USB en voeding)

Stap 7: Boor en zaag alle gemarkeerde gaten

Boor en zaag alle gemarkeerde gaten
Boor en zaag alle gemarkeerde gaten

Stap 8: Bevestig de motoren en pijp aan de plank

Stap 9: Bevestig de plank aan de doos met de L-beugels

Stap 10: Neem uw eindblokken en soldeer de draden aan elkaar

Neem uw eindblokken en soldeer de draden aan elkaar
Neem uw eindblokken en soldeer de draden aan elkaar

Stap 11: Knip het uiteinde van het netsnoer van de adapter af en strip de draden

Stap 12: Identificeer en markeer de plus- en min-draden

Stap 13: Bevestig de draden aan de klemmenblokken zodat alle + servodraden en de + draad van het netsnoer zijn aangesloten, hetzelfde geldt voor de - draden

Bevestig de draden aan de klemmenblokken zodat alle + servodraden en de + draad van het netsnoer zijn aangesloten, hetzelfde geldt voor de - draden
Bevestig de draden aan de klemmenblokken zodat alle + servodraden en de + draad van het netsnoer zijn aangesloten, hetzelfde geldt voor de - draden

Stap 14: Snijd het hoofd van een breadboard-draad af

Snijd het hoofd van een breadboard-draad
Snijd het hoofd van een breadboard-draad

Bevestig het gestripte uiteinde van de breadboard-draad aan het min-aansluitblok en het uiteinde van de pin aan de aardingspin in je Arduino. Als u dit niet doet, zullen de motoren onregelmatig bewegen zonder enige invoer.

Stap 15: Boor drie gaten in de bodem van de doos voor de draden die uit je arm komen

De gaten moeten overeenkomen met de gaten in de basisconnector.

Stap 16: Bevestig de basisconnector aan de doos

Bevestig de basisconnector aan de doos
Bevestig de basisconnector aan de doos

Stap 17: Gebruik een mes of nagelvijl om de draadgroeven dieper te maken

Gebruik een mes of nagelvijl om de draadgroeven dieper te maken
Gebruik een mes of nagelvijl om de draadgroeven dieper te maken

De draadgroeven voor elementen 2 en 3 zijn te ondiep.

Stap 18: Construeer de arm

Construeer de arm
Construeer de arm

Construeer de arm volgens de instructies hier, het kan zijn dat je de onderdelen moet vijlen zodat ze passen

Stap 19: Processing en Arduino installeren

Verwerking en Arduino

Stap 20: Plak de codeprogramma's

De code staat onderaan deze pagina

Stap 21: Sluit de servobesturingspennen aan op de Arduino

Sluit de servobesturingspennen aan op de Arduino
Sluit de servobesturingspennen aan op de Arduino

Ik heb de eerste motor op de derde digitale pin aangesloten, de tweede motor op de vierde digitale pin, enzovoort. Zorg ervoor dat de aardingspin nog steeds is aangesloten op het - aansluitblok.

Stap 22: Druk tijdens het verwerken op de resetknop, hierdoor worden alle armen op 90 graden gezet

Stap 23: Bevestig de servo-armen horizontaal aan de motor

Stap 24: Rijg de draden door de armen zodat er geen speling is

Zorg ervoor dat u de draad door zoveel mogelijk gaten haalt, dit houdt het tijdelijk vast en is gemakkelijk te verwijderen.

Stap 25: Test de arm en draai de draden vast of los indien nodig

Stap 26: Heet lijm de draden aan de servo-armen om het permanent te maken

Stap 27: Notities

Opmerkingen
Opmerkingen

Ik heb sieradendraad van 0,5 mm gebruikt, maar 0,4 mm zou goed moeten zijn. Het originele ontwerp gebruikte PVC-draad, maar dat brak te gemakkelijk en was moeilijk om mee te werken.

Als je de arm in een auto of fiets gaat verplaatsen, wikkel dan de armgewrichten in tape om te voorkomen dat ze eruit springen. Dit is vooral belangrijk voor element 1.

Toen ik aan dit project begon, vroeg ik me af waarom ik maar één tutorial kon vinden over het maken van een arm die wordt bestuurd door draden. Nu begrijp ik waarom dit niet de meest gebruikelijke manier is om een hobbyrobotarm te maken. De draden vallen soms uit hun groeven en het geheel is nogal dun. Ik weet niet of de problemen zijn omdat ik niet veel ervaring heb of dat het hele idee problematisch is, hoewel ik zeker weet dat het meer solide zou zijn als ik wist wat ik deed.

Stap 28: Problemen oplossen

De draadgaten zijn gesloten in de 3D-geprinte elementen:

Je hebt ondersteuning toegevoegd voor het hele element in plaats van alleen de boutgaten. Druk het element opnieuw af of open de gaten met een heel hete naald.

De COM-poort is gesloten, je kunt niet communiceren met de arduino:

Je Arduino accepteert mogelijk geen USB 3-poorten (de mijne niet), je kunt een USB 2-verlengkabel kopen of een computer gebruiken met USB 2-poorten

De code werkt niet:

Volg deze tutorial en pas deze aan om je eigen code te maken

Een deel van de arm beweegt niet:

De draden kunnen in de knoop zijn geraakt, om dit te controleren, haalt u de servo-arm van de servo en probeert u de draden met de hand te trekken. Maak de draden los en als het nog steeds moeilijk is om aan de draden te trekken, probeer dan wat WD-40 of een smeermiddel om beweging gemakkelijker te maken

Stap 29: Koppelingen

Niet-robotarm:

Arm 3D Printables:

Mijn arm 3D-afdrukbaar:

Arduino en verwerking:

Stap 30: Coderen

Aangepast van deze code

Arduino-code:

#include // Declareer de motoren Servo myservo1; Servo-myservo2; Servo-myservo3; Servo-myservo4; Servo myservo5; Servo-myservo6; // Alle motoren zijn standaard ingesteld op 90 graden int current1 = 90; int stroom2 = 90; int stroom3 = 90; int stroom4 = 90; int stroom5 = 90; int stroom6 = 90; // Minimale en maximale graden die de motoren kunnen bereiken 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; // Graden die moeten worden toegevoegd aan of afgetrokken van de huidige positie int degreesFoward = 5; //Delay zodat twee functies niet in de verkeerde volgorde plaatsvinden int delayBetweenSteps = 100; void setup () {// Stel besturingspinnen in voor elke motor myservo1.attach (3); mijnservo2.attach(4); mijnservo3.attach(5); myservo4.attach(6); myservo5.attach(7); myservo6.attach(8); // Zet alle motoren op de standaardinstelling myservo1.write (current1); myservo2.write(current2); myservo3.write(current3); myservo4.write(current4); myservo5.write(current5); myservo6.write(current6); //start seriële communicatie @9600 bps Serial.begin (9600); } void loop(){ if(Serial.available()){ // if data is available to read char val = Serial.read(); // zet het in deze char // Motor Controls if(val == 'a' && current1 + degreesForward mini1) {myservo1.write(current1 - degreesForward); huidige1 = huidige1 - gradenVooruit; vertraging (vertraging tussen stappen); } if(val == 'c' && huidige2 mini2){ myservo2.write(current2 - gradenFoward); stroom2 = stroom2 - gradenVooruit; vertraging (vertraging tussen stappen); } if(val == 'e' && huidige3 mini3){ myservo3.write(current3 - gradenFoward); stroom3 = stroom3 - gradenVooruit; vertraging (vertraging tussen stappen); } if(val == 'g' && huidige4 mini4){ myservo4.write(current4 - gradenFoward); stroom4 = stroom4 - gradenVooruit; vertraging (vertraging tussen stappen); } if(val == 'i' && huidige5 mini5){ myservo5.write(current5 - gradenFoward); stroom5 = stroom5 - gradenVooruit; vertraging (vertraging tussen stappen); } if(val == 'k' && huidige6 mini6){ myservo6.write(current6 - gradenFoward); stroom6 = stroom6 - gradenVooruit; vertraging (vertraging tussen stappen); } //Snelheidsregeling if(val == 'w'){ //Als de snelheidsknop 1 ingedrukt is gradenVooruit = 1; vertraging (vertraging tussen stappen); } if(val == 'x'){ //Als snelheid 5 knop ingedrukt gradenVoorwaarts = 5; vertraging (vertraging tussen stappen); } if(val == 'y'){ //Als de snelheidsknop 10 ingedrukt is gradenVooruit = 10; vertraging (vertraging tussen stappen); } if(val == 'z'){ //If speed 20-knop ingedrukt degreesForward = 20; vertraging (vertraging tussen stappen); } if(val == 'r'){ //If speed 20 button ingedrukt myservo1.write(90); stroom1 = 90; mijnservo2.write(90); stroom2 = 90; myservo3.write(90); stroom3 = 90; myservo4.write(90); stroom4 = 90; myservo5.write(90); stroom5 = 90; myservo6.write(90); stroom6 = 90; vertraging (vertraging tussen stappen); } } }

Verwerkingscode:

importverwerking.serienummer.*; importcontroleP5.*; // importeer ControlP5-bibliotheek Seriële poort; ControleP5 cp5; // maak een ControlP5-object PFont-lettertype; void setup () {// hetzelfde als Arduino-programmagrootte (300, 700); // venstergrootte, (breedte, hoogte) printArray (Serial.list ()); // drukt alle beschikbare seriële poorten af //Als je een probleem hebt, komt het waarschijnlijk hier vandaan. String portName = Serial.list()[0]; poort = nieuw serieel (dit, poortnaam, 9600); // ik heb arduino aangesloten op com3, het zou anders zijn in linux en mac os // laten we knop toevoegen aan leeg venster cp5 = new ControlP5 (this); font = createFont("Arial", 13); // aangepaste lettertypen voor knoppen en titel // Snelheidsregelingsknoppen cp5.addButton("One") //"One" is de naam van de knop.setPosition(50, 50) //x- en y-coördinaten van de linkerbovenhoek van de knop.setSize (55, 25) // (breedte, hoogte).setFont (lettertype); cp5.addButton("Vijf").setPosition(110, 50).setSize(55, 25).setFont(lettertype); cp5.addButton("Ten").setPosition(170, 50).setSize(55, 25).setFont(font); cp5.addButton("Twintig").setPosition(230, 50).setSize(55, 25).setFont(lettertype); cp5.addButton("Reset").setPosition(110, 2).setSize(55, 25).setFont(font); cp5.addButton("Servo_1_Foward").setPosition(50, 90).setSize(190, 40).setFont(lettertype); // Motorbesturingsknoppen cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (lettertype); cp5.addButton("Servo_2_Foward").setPosition(50, 190).setSize(190, 40).setFont(lettertype); cp5.addButton("Servo_2_Back").setPosition(50, 240).setSize(190, 40).setFont(lettertype); cp5.addButton("Servo_3_Foward").setPosition(50, 290).setSize(190, 40).setFont(lettertype); cp5.addButton("Servo_3_Back").setPosition(50, 340).setSize(190, 40) //(breedte, hoogte).setFont(font); cp5.addButton("Servo_4_Foward").setPosition(50, 390).setSize(190, 40).setFont(lettertype); cp5.addButton("Servo_4_Back").setPosition(50, 440).setSize(190, 40) //(breedte, hoogte).setFont(font); cp5.addButton("Servo_5_Foward").setPosition(50, 490).setSize(190, 40).setFont(lettertype); 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(lettertype); cp5.addButton("Servo_6_Back").setPosition(50, 640).setSize(190, 40).setFont(lettertype); } void draw () {// hetzelfde als lus in Arduino-achtergrond (192, 215, 249); // achtergrondkleur van venster (r, g, b) of (0 tot 255) // Tekst toevoegen waarin staat dat snelheidsregeling snelheidsregeling is vullen (0, 10, 25); // tekstkleur (r, g, b) textFont (lettertype); text("Snelheidsregeling", 50, 40); // ("tekst", x-coördinaat, y-coördinaat) } // laten we enkele functies aan onze knoppen toevoegen // dus als je op een knop drukt, wordt een bepaald teken via de seriële poort verzonden // Ik weet zeker dat het mogelijk is om strings te verzenden in plaats van tekens, en het zou logischer zijn, maar ik weet niet hoe ik het moet doen //Speed Control Commands void One(){ port.write('w'); } void Five(){ port.write('x'); } void Ten(){ port.write('y'); } void Twenty(){ port.write('z'); } // Motorbesturingsopdrachten ongeldig Servo_1_Foward(){ 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'); }

Stap 31: Meer foto's

Aanbevolen: