Inhoudsopgave:
- Benodigdheden
- Stap 1: Print alle 3D-componenten
- Stap 2: (Optioneel) Bevestig een houten plank aan de onderkant van uw doos om deze te versterken
- Stap 3: Meet en snijd een houten plank om in de doos te passen
- Stap 4: Markeer de posities van de motoren
- Stap 5: Markeer de posities van de beugels en de buis
- Stap 6: Boor een gat voor de kabels die uit uw doos komen (USB en voeding)
- Stap 7: 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
- 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
- Stap 14: Snijd het hoofd van een breadboard-draad af
- Stap 15: Boor drie gaten in de bodem van de doos voor de draden die uit je arm komen
- Stap 16: Bevestig de basisconnector aan de doos
- Stap 17: Gebruik een mes of nagelvijl om de draadgroeven dieper te maken
- Stap 18: Construeer de arm
- Stap 19: Processing en Arduino installeren
- Stap 20: Plak de codeprogramma's
- Stap 21: Sluit de servobesturingspennen aan op de Arduino
- 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
- 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
- Stap 28: Problemen oplossen
- Stap 29: Koppelingen
- Stap 30: Coderen
- Stap 31: Meer foto's
Video: Draadgestuurde robotarm - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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)
Stap 7: 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
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
Stap 14: Snijd het hoofd van een breadboard-draad af
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
Stap 17: 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 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
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
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:
Robotarm: 15 stappen
Robotarm: autosysteem hebben
De komst van de intelligente robotarm: 3 stappen
De komst van de intelligente robotarm: handen schudden met gasten, dingen praten, eten enzovoort, want de gezondheid van ons leven zit in de gewone dingen, maar voor sommige speciale mensen is het een droom. Enkele speciale mensen die door mij worden genoemd, zijn mensen met een handicap die
Robotarm: 3 stappen
Robotarm: Ciao a tutti! Vediamo come si può costruire un braccio robotico controllabile da remoto
UStepper Robotarm 4: 5 stappen
UStepper Robotarm 4: Dit is de 4e iteratie van mijn robotarm, die ik heb ontwikkeld als een applicatie voor onze uStepper stepper-besturingskaart. Omdat de robot 3 stappenmotoren heeft en een servo voor bediening (in zijn basisconfiguratie) is hij niet beperkt tot uStepper
Robotarm: 5 stappen
Robotarm: het doel van deze Instructable is om u te helpen bij het bouwen van uw eigen 3D-geprinte robotarm. Mijn motivatie voor het bouwen van deze robotarm komt voort uit een interesse in mechatronica en het ontbreken van goede documentatie voor het bouwen van een 4-assige arm met stappenmotoren, Ardu