Sadržaj:

Robotska ručka s žičanom kontrolom: 31 korak
Robotska ručka s žičanom kontrolom: 31 korak

Video: Robotska ručka s žičanom kontrolom: 31 korak

Video: Robotska ručka s žičanom kontrolom: 31 korak
Video: Control 32 Servo over Wi-Fi using ESP32 and PCA9685 via desktop or mobile phone V5 2024, Novembar
Anonim
Robotska ruka sa žičanom kontrolom
Robotska ruka sa žičanom kontrolom

Ovo je vodič o tome kako napraviti robotsku ruku kontroliranu žicama. Prednost korištenja žica je u tome što vam je ruka lakša i možete imati sve svoje motore na dnu ruke, što olakšava izgradnju i održavanje. Evo video snimka ruke u akciji. U budućnosti planiram dodati kandžu kako bi mogla pokupiti stvari, a ne samo ih gurnuti.

3D štampanje:

Ovde i Ovde

Supplies

6 servo motora (MG995)

Arduino Uno

Oko 6 metara čelične žice presvučene plastikom (0,5 mm)

Kutija 23x33x10 (može biti uža, definitivno ne smije biti kraća)

Drvena daska 33x10

Matice i vijci

Cijev 14 cm (ovo je potrebno za vođenje žica)

4 L-nosača

5-voltni adapter

2 7-kraka priključna bloka

Žice za platformu

3D štampane komponente (nisam ja dizajnirao, veze do elemenata u opisu):

3 "vijka"

2 "Element 1"

1 „Element 2“

2 „Element 3“

1 Osnovni konektor

Korak 1: Odštampajte sve 3D komponente

Možda će vam trebati podrška za rupe i lukove za vijke, ali pazite da ne dodate podršku tijelu vaših komponenti; ovo će zatvoriti male rupe za žicu i morat ćete napraviti nove rupe

Korak 2: (Opcionalno) Pričvrstite drvenu dasku na dno kutije kako biste je ojačali

Moja kutija je bila prilično slaba, vaša možda nije

Korak 3: Izmjerite i izrežite drvenu dasku tako da odgovara kutiji

Korak 4: Označite položaje motora

pazite da se ruke ne dodiruju

Korak 5: Označite položaje zagrada i cijevi

Označite položaje zagrada i cijevi
Označite položaje zagrada i cijevi

Cijev treba postaviti oko jedan centimetar ispred rupe

Korak 6: Izbušite rupu za kabele koji izlaze iz vaše kutije (USB i napajanje)

Izbušite rupu za kabele koji izlaze iz vaše kutije (USB i napajanje)
Izbušite rupu za kabele koji izlaze iz vaše kutije (USB i napajanje)

Korak 7: Izbušite i ispipajte sve označene rupe

Izbušite i isecite sve označene rupe
Izbušite i isecite sve označene rupe

Korak 8: Pričvrstite motore i cijev na dasku

Korak 9: Pričvrstite dasku na kutiju pomoću L-zagrada

Korak 10: Uzmite priključne blokove i zalemite žice zajedno

Uzmite svoje priključne blokove i zalemite žice zajedno
Uzmite svoje priključne blokove i zalemite žice zajedno

Korak 11: Odrežite kraj kabela za napajanje adaptera i skinite žice

Korak 12: Identificirajte i označite plus i minus žice

Korak 13: Priključite žice na priključne blokove tako da su sve + servo žice i + žice s kabela za napajanje spojene, isto vrijedi i za - žice

Priključite žice na priključne blokove tako da su sve + servo žice i + žice iz kabela za napajanje spojene, isto vrijedi i za - žice
Priključite žice na priključne blokove tako da su sve + servo žice i + žice iz kabela za napajanje spojene, isto vrijedi i za - žice

Korak 14: Odrežite glavu s žice za umrežavanje

Odrežite glavu s žice za umrežavanje
Odrežite glavu s žice za umrežavanje

Pričvrstite ogoljeni kraj žice matične ploče na minus priključni blok, a kraj igle na uzemljenje na vašem arduinu. Ako to ne učinite, motori će se kretati nestalno bez ikakvog unosa.

Korak 15: Izbušite tri rupe na dnu kutije za žice koje vam izlaze iz ruke

Rupe bi trebale odgovarati rupama u priključku za bazu.

Korak 16: Priključite bazni konektor na kutiju

Priključite bazni konektor na kutiju
Priključite bazni konektor na kutiju

Korak 17: Upotrijebite nož ili turpiju za nokte kako biste žljebove žice učinili dubljima

Upotrijebite nož ili turpiju za nokte kako biste žljebove žice učinili dubljima
Upotrijebite nož ili turpiju za nokte kako biste žljebove žice učinili dubljima

Žičani utori za elemente 2 i 3 su previše plitki.

Korak 18: Konstruirajte ruku

Konstruirajte ruku
Konstruirajte ruku

Konstruirajte ruku prema ovdje danim uputama. Možda ćete morati turpijati dijelove tako da odgovaraju

Korak 19: Instalirajte Processing i Arduino

Obrada i Arduino

Korak 20: Zalijepite Code programe

Kôd se nalazi pri dnu ove stranice

Korak 21: Spojite servo upravljačke pinove na Arduino

Spojite servo upravljačke pinove na Arduino
Spojite servo upravljačke pinove na Arduino

Priključio sam prvi motor na treći digitalni pin, drugi motor na četvrti digitalni pin i tako dalje. Uvjerite se da je pin za uzemljenje još uvijek spojen na - terminalni blok.

Korak 22: Pritisnite dugme Reset u obradi, ovo će postaviti sve ruke na 90 stepeni

Korak 23: Horizontalno pričvrstite servo poluge na motor

Korak 24: Provucite žice kroz ruke tako da nema opuštanja

Provucite žicu kroz što više rupa, jer će je privremeno zadržati i lako ukloniti.

Korak 25: Testirajte ruku i pritegnite ili otpustite žice prema potrebi

Korak 26: Vruće zalijepite žice na servo poluge kako bi bile trajne

Korak 27: Napomene

Napomene
Napomene

Koristio sam žicu za nakit od 0,5 mm, ali 0,4 mm bi trebalo biti u redu. U originalnom dizajnu korištena je PVC žica, ali se ona previše lako slomila i bilo je teško raditi s njom.

Ako ćete kretati ruku u automobilu ili biciklu, omotajte zglobove ruku trakom kako biste bili sigurni da neće iskočiti. Ovo je posebno važno za element 1.

Kad sam započeo ovaj projekt, pitao sam se zašto mogu pronaći samo jedan vodič o tome kako napraviti ruku kontroliranu žicama. Sada razumijem zašto ovo nije najčešći način izrade hobot robotske ruke. Žice ponekad ispadnu iz njihovih utora i cijela je stvar nekako slabašna. Ne znam jesu li problemi u tome što nemam puno iskustva ili je cijela ideja problematična, iako sam siguran da bi bilo čvršće da znam što radim.

Korak 28: Rješavanje problema

Rupe za žice su zatvorene u 3D štampanim elementima:

Dodali ste podršku cijelom elementu umjesto samo rupa za vijke. Ili ponovno odštampajte element ili otvorite rupe jako vrućom iglom.

COM port je zatvoren, ne možete komunicirati s arduinom:

Vaš arduino možda ne prihvaća USB 3 portove (moj nije), možete kupiti USB 2 produžni kabel ili koristiti računalo koje ima USB 2 portove

Kod ne radi:

Slijedite ovaj vodič i izmijenite ga da napravite vlastiti kod

Dio ruke se ne miče:

Žice su se možda zaplele, da biste to provjerili, skinite servo krak sa serva i pokušajte ručno povući žice. Raspetljajte žice i ako je i dalje teško povući žice, pokušajte upotrijebiti neki WD-40 ili mazivo za lakše kretanje

Korak 29: Veze

Non Robotic Arm:

Arm 3D ispisi:

Moja ruka 3D štampanje:

Arduino i obrada:

Korak 30: Kodirajte

Izmijenjeno iz ovog koda

Arduino kod:

#include // Deklarirajte motore Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Svi su motori prema zadanim postavkama postavljeni na 90 stupnjeva int current1 = 90; int struja2 = 90; int struja3 = 90; int struja4 = 90; int struja5 = 90; int struja6 = 90; // Minimalni i maksimalni stupanj koji motori mogu doseći 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; // Stepeni koji se dodaju ili oduzimaju od trenutne pozicije intgreesFoward = 5; // Odgoda tako da se dvije funkcije ne dogode u pogrešnom redoslijedu int delayBetweenSteps = 100; void setup () {// Postavite kontrolne pinove za svaki motor myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Postavi sve motore na zadane postavke myservo1.write (current1); myservo2.write (current2); myservo3.write (current3); myservo4.write (current4); myservo5.write (current5); myservo6.write (current6); // pokretanje serijske komunikacije @9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// ako su podaci dostupni za čitanje char val = Serial.read (); // stavi u ovaj znak // Kontrola motora if (val == 'a' && current1 + stupnjevi naprijed mini1) {myservo1.write (trenutni1 - stupnjevi naprijed); struja1 = struja1 - stupnjevi naprijed; delay (delayBetweenSteps); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - stupnjevi naprijed); struja2 = struja2 - stepeniForward; delay (delayBetweenSteps); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - stupnjevi naprijed); struja3 = struja3 - stupnjevi naprijed; delay (delayBetweenSteps); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - stupnjevi naprijed); current4 = current4 - stupnjevi naprijed; delay (delayBetweenSteps); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - stupnjevi naprijed); current5 = current5 - stupnjevi naprijed; delay (delayBetweenSteps); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - stupnjevi naprijed); current6 = current6 - stupnjevi naprijed; delay (delayBetweenSteps); } // Kontrola brzine if (val == 'w') {// Ako je pritisnuto dugme za brzinu 1 stepeniFoward = 1; delay (delayBetweenSteps); } if (val == 'x') {// Ako pritisnete dugme brzine 5 stepeniFoward = 5; delay (delayBetweenSteps); } if (val == 'y') {// Ako pritisnete dugme za brzinu 10 stepeniFoward = 10; delay (delayBetweenSteps); } if (val == 'z') {// Ako pritisnete dugme brzine 20 stepeniFoward = 20; delay (delayBetweenSteps); } if (val == 'r') {// Ako je pritisnuto dugme brzine 20 myservo1.write (90); struja1 = 90; myservo2.write (90); struja2 = 90; myservo3.write (90); struja3 = 90; myservo4.write (90); struja4 = 90; myservo5.write (90); struja5 = 90; myservo6.write (90); struja6 = 90; delay (delayBetweenSteps); }}}

Kod obrade:

import processing.serial.*; kontrola uvozaP5.*; // uvoz ControlP5 biblioteke Serijski port; ControlP5 cp5; // kreiramo font PFont objekta ControlP5; void setup () {// isto što i veličina arduino programa (300, 700); // veličina prozora, (širina, visina) printArray (Serial.list ()); // ispisuje sve dostupne serijske portove // Ako imate problem, vjerovatno dolazi odavde. String portName = Serial.list () [0]; port = novi serijski (ovaj, portName, 9600); // povezao sam arduino sa com3, bilo bi drugačije u linux -u i mac os -u // dopuštamo dodavanje butona u prazan prozor cp5 = novi ControlP5 (ovo); font = createFont ("Arial", 13); // prilagođeni fontovi za dugmad i naslov // Dugmad za kontrolu brzine cp5.addButton ("One") // "One" je naziv dugmeta.setPosition (50, 50) // x i y koordinate gornjeg lijevog ugla dugmeta.setSize (55, 25) // (širina, visina).setFont (font); cp5.addButton ("Pet").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 ("Reset").setPosition (110, 2).setSize (55, 25).setFont (font); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (font); // Gumbi za upravljanje motorom 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) // (širina, visina).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) // (širina, visina).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 () {// isto što i petlja u arduino pozadini (192, 215, 249); // boja pozadine prozora (r, g, b) ili (0 do 255) // Dodavanje teksta koji kaže da je kontrola brzine popunjavanje kontrole brzine (0, 10, 25); // boja teksta (r, g, b) textFont (font); tekst ("Kontrola brzine", 50, 40); // ("tekst", x koordinata, y koordinata)} // omogućava dodavanje nekih funkcija našim gumbima // pa kad pritisnete bilo koje dugme, šalje određeni znak preko serijskog porta // Siguran sam da je moguće slati nizove umjesto znakova, i imalo bi više smisla, ali ne znam kako se to radi // Naredbe za kontrolu brzine void One () {port.write ('w'); } void Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // Naredbe za kontrolu motora void 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'); }

Korak 31: Više slika

Preporučuje se: