Turinys:
- Prekės
- 1 žingsnis: išspausdinkite visus 3D komponentus
- 2 žingsnis: (neprivaloma) pritvirtinkite medžio lentą prie dėžutės apačios, kad ją sustiprintumėte
- 3 žingsnis: išmatuokite ir supjaustykite medžio lentą, kad tilptų dėžutė
- 4 žingsnis: pažymėkite variklių pozicijas
- 5 žingsnis: pažymėkite laikiklių ir vamzdžio vietas
- 6 veiksmas: gręžkite skylę kabeliams, išeinantiems iš dėžutės (USB ir maitinimas)
- 7 žingsnis: gręžkite ir pjaukite visas pažymėtas skyles
- 8 žingsnis: pritvirtinkite variklius ir vamzdžius prie lentos
- 9 veiksmas: pritvirtinkite lentą prie dėžutės su L formos skliaustais
- 10 veiksmas: paimkite gnybtų blokus ir lituokite laidus kartu
- 11 veiksmas: nukirpkite adapterio maitinimo laido galą ir nuimkite laidus
- 12 veiksmas: nustatykite ir pažymėkite pliuso ir minuso laidus
- 13 veiksmas: prijunkite laidus prie gnybtų blokų, kad visi + servo laidai ir + laidas iš maitinimo laido būtų prijungti, tas pats bus ir su - laidais
- 14 žingsnis: nukirpkite galvutę nuo duonos lentos
- 15 veiksmas: gręžkite tris skyles dėžutės apačioje, kad laidai išeitų iš rankos
- 16 veiksmas: pritvirtinkite pagrindinę jungtį prie dėžutės
- 17 veiksmas: naudokite peilį arba nagų dildę, kad vielos grioveliai būtų gilesni
- 18 žingsnis: sukurkite ranką
- 19 veiksmas: įdiekite „Processing“ir „Arduino“
- 20 veiksmas: įklijuokite kodo programas
- 21 veiksmas: prijunkite servo valdymo kaiščius prie „Arduino“
- 22 veiksmas: apdorojimo metu paspauskite atstatymo mygtuką, todėl visos rankos bus nustatytos į 90 laipsnių
- 23 veiksmas: pritvirtinkite servo svirtis prie variklio horizontaliai
- 24 veiksmas: perkiškite laidus per ginklus taip, kad nesusilpnėtų
- 25 žingsnis: išbandykite ranką ir priveržkite arba atlaisvinkite laidus, kaip reikia
- 26 žingsnis: Karštai klijuokite laidus prie servo ginklų, kad jie taptų nuolatiniai
- 27 žingsnis: pastabos
- 28 žingsnis: trikčių šalinimas
- 29 žingsnis: nuorodos
- 30 žingsnis: kodas
- 31 žingsnis: daugiau nuotraukų
Video: Laidu valdoma roboto svirtis: 31 žingsnis
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Tai pamoka, kaip padaryti roboto ranką, valdomą laidais. Laidų naudojimo pranašumas yra tas, kad jūsų ranka yra lengvesnė, o visus variklius galite laikyti rankos apačioje, todėl lengviau statyti ir prižiūrėti. Čia yra vaizdo įrašas apie ranką veikiant. Ateityje planuoju pridėti nagą, kad jis galėtų pasiimti daiktus, o ne tik juos stumdyti.
3D spausdintuvai:
Čia ir čia
Prekės
6 servo varikliai (MG995)
Arduino Uno
Apie 6 metrus plastikinės plieno vielos (0,5 mm)
23 x 33 x 10 langelis (gali būti siauresnis, tikrai neturėtų būti trumpesnis)
Medžio lenta 33x10
Veržlės ir varžtai
Vamzdis 14 cm (to reikia stygoms nukreipti)
4 L formos skliausteliuose
5 voltų adapteris
2 7 krypčių gnybtų blokai
Duonos lentos laidai
3D spausdinti komponentai (ne mano sukurta, nuorodos į aprašymo elementus):
3 „varžtai“
2 „1 elementas“
1 „2 elementas“
2 „3 elementas“
1 bazinė jungtis
1 žingsnis: išspausdinkite visus 3D komponentus
Jums gali prireikti varžtų skylių ir arkų atramos, tačiau įsitikinkite, kad nepridedate atramos prie savo komponentų korpuso; tai uždarys mažas vielos skyles ir turėsite padaryti naujas skyles
2 žingsnis: (neprivaloma) pritvirtinkite medžio lentą prie dėžutės apačios, kad ją sustiprintumėte
Mano dėžutė buvo gana silpna, jūsų gali būti ne
3 žingsnis: išmatuokite ir supjaustykite medžio lentą, kad tilptų dėžutė
4 žingsnis: pažymėkite variklių pozicijas
įsitikinkite, kad nė viena ranka neliečia viena kitos
5 žingsnis: pažymėkite laikiklių ir vamzdžio vietas
Vamzdis turi būti dedamas maždaug per centimetrą prieš skylę
6 veiksmas: gręžkite skylę kabeliams, išeinantiems iš dėžutės (USB ir maitinimas)
7 žingsnis: gręžkite ir pjaukite visas pažymėtas skyles
8 žingsnis: pritvirtinkite variklius ir vamzdžius prie lentos
9 veiksmas: pritvirtinkite lentą prie dėžutės su L formos skliaustais
10 veiksmas: paimkite gnybtų blokus ir lituokite laidus kartu
11 veiksmas: nukirpkite adapterio maitinimo laido galą ir nuimkite laidus
12 veiksmas: nustatykite ir pažymėkite pliuso ir minuso laidus
13 veiksmas: prijunkite laidus prie gnybtų blokų, kad visi + servo laidai ir + laidas iš maitinimo laido būtų prijungti, tas pats bus ir su - laidais
14 žingsnis: nukirpkite galvutę nuo duonos lentos
Pritvirtinkite duonos lentos laido galą prie minuso gnybtų bloko, o kaiščio galą prie įžeminimo kaiščio savo „arduino“. Jei to nepadarysite, varikliai judės netolygiai be jokių įėjimų.
15 veiksmas: gręžkite tris skyles dėžutės apačioje, kad laidai išeitų iš rankos
Skylės turi sutapti su skylėmis pagrindinėje jungtyje.
16 veiksmas: pritvirtinkite pagrindinę jungtį prie dėžutės
17 veiksmas: naudokite peilį arba nagų dildę, kad vielos grioveliai būtų gilesni
2 ir 3 elementų vielos grioveliai yra per seklūs.
18 žingsnis: sukurkite ranką
Sukurkite ranką pagal čia pateiktas instrukcijas, todėl gali prireikti paduoti dalis, kad jos tilptų
19 veiksmas: įdiekite „Processing“ir „Arduino“
Apdorojimas ir „Arduino“
20 veiksmas: įklijuokite kodo programas
Kodas yra šio puslapio apačioje
21 veiksmas: prijunkite servo valdymo kaiščius prie „Arduino“
Pirmąjį variklį prijungiau prie trečio skaitmeninio kaiščio, antrąjį - prie ketvirto skaitmeninio kaiščio ir pan. Įsitikinkite, kad įžeminimo kaištis vis dar prijungtas prie gnybtų bloko.
22 veiksmas: apdorojimo metu paspauskite atstatymo mygtuką, todėl visos rankos bus nustatytos į 90 laipsnių
23 veiksmas: pritvirtinkite servo svirtis prie variklio horizontaliai
24 veiksmas: perkiškite laidus per ginklus taip, kad nesusilpnėtų
Įsitikinkite, kad perveriate vielą per tiek skylių, kiek galite, tai laikys ją laikinai ir bus lengvai pašalinama.
25 žingsnis: išbandykite ranką ir priveržkite arba atlaisvinkite laidus, kaip reikia
26 žingsnis: Karštai klijuokite laidus prie servo ginklų, kad jie taptų nuolatiniai
27 žingsnis: pastabos
Aš naudoju 0,5 mm juvelyrinę vielą, bet 0,4 mm turėtų būti gerai. Pradiniame dizaine buvo naudojama PVC viela, tačiau ji per lengvai lūžo ir buvo sunku dirbti.
Jei ketinate judinti ranką automobilyje ar dviračiu, apvyniokite rankų sąnarius juostele, kad įsitikintumėte, jog jie neišlenda. Tai ypač svarbu 1 elementui.
Kai pradėjau šį projektą, man buvo įdomu, kodėl aš galiu rasti tik vieną pamoką, kaip padaryti ranką, valdomą laidais. Dabar aš suprantu, kodėl tai nėra labiausiai paplitęs būdas padaryti hobio roboto ranką. Laidai kartais iškrenta iš griovelių ir visa tai yra šiek tiek silpna. Nežinau, ar problemos kyla dėl to, kad neturiu daug patirties, ar visa idėja yra problemiška, nors esu tikras, kad būtų tvirtiau, jei žinotų, ką darau.
28 žingsnis: trikčių šalinimas
Vielos skylės uždaromos 3D spausdinimo elementuose:
Jūs pridėjote viso elemento palaikymą, o ne tik varžtų skyles. Iš naujo atspausdinkite elementą arba atidarykite skyles tikrai karšta adata.
COM prievadas uždarytas, negalite bendrauti su arduino:
Jūsų „arduino“gali nepriimti USB 3 prievadų (mano ne), galite nusipirkti USB 2 prailginimo kabelį arba naudoti kompiuterį, kuriame yra USB 2 prievadai
Kodas neveikia:
Sekite šią pamoką ir pakeiskite ją, kad sukurtumėte savo kodą
Dalis rankos nejuda:
Laidai galėjo susipainioti, norėdami tai patikrinti, nuimkite servo rankeną nuo servo ir pabandykite ištraukti laidus ranka. Išskleiskite laidus ir, jei vis tiek sunku ištraukti laidus, pabandykite naudoti WD-40 arba tepalą, kad būtų lengviau judėti
29 žingsnis: nuorodos
Ne robotų ranka:
Rankų 3D spausdintuvai:
Mano rankos 3D spausdinimas:
„Arduino“ir apdorojimas:
30 žingsnis: kodas
Pakeistas iš šio kodo
„Arduino“kodas:
#include // Deklaruoti variklius Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Pagal numatytuosius nustatymus visi varikliai yra nustatyti 90 laipsnių kampu int current1 = 90; int srovė2 = 90; int srovė3 = 90; int srovė4 = 90; int srovė5 = 90; int srovė6 = 90; // Minimalus ir maksimalus laipsniai, kuriuos varikliai gali pasiekti 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; // Laipsniai, kuriuos reikia pridėti arba atimti iš dabartinės padėties int laipsniųFoward = 5; // Delsimas, kad dvi funkcijos neatsitiktų netinkama tvarka int delayBetweenSteps = 100; void setup () {// Nustatykite kiekvieno variklio valdymo kaiščius myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Nustatykite visus variklius į numatytąjį nustatymą myservo1.write (current1); myservo2.write (dabartinis2); myservo3.write (dabartinis3); myservo4.write (dabartinis4); myservo5.write (dabartinis5); myservo6.write (dabartinis6); // pradėti serijinį ryšį @9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// jei yra duomenų, kuriuos galima perskaityti char val = Serial.read (); // įdėkite jį į šį simbolį // Motor Controls if (val == 'a' &&1 srovė1 = srovė1 - laipsniai uždelsimas (delayBetweenSteps); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - laipsniųFoward); srovė2 = srovė2 - laipsniai uždelsimas (delayBetweenSteps); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - laipsniųFoward); srovė3 = srovė3 - laipsniai uždelsimas (delayBetweenSteps); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - laipsniųFoward); srovė4 = srovė4 - laipsniai uždelsimas (delayBetweenSteps); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - laipsniųFoward); srovė5 = srovė5 - laipsniai uždelsimas (delayBetweenSteps); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - laipsniųFoward); srovė6 = srovė6 - laipsniai uždelsimas (delayBetweenSteps); } // Greitis Kontroliuoja, jei (val == 'w') {// Jei 1 greičio mygtukas paspaudžia laipsniusFoward = 1; uždelsimas (delayBetweenSteps); } if (val == 'x') {// Jei 5 greičio mygtukas paspaustas laipsniųFoward = 5; uždelsimas (delayBetweenSteps); } if (val == 'y') {// Jei 10 greičio mygtukas paspaustas laipsniųFoward = 10; uždelsimas (delayBetweenSteps); } if (val == 'z') {// Jei 20 greičio mygtukas paspaustas laipsniųFoward = 20; uždelsimas (delayBetweenSteps); } if (val == 'r') {// Jei paspaustas 20 greičio mygtukas myservo1.write (90); srovė1 = 90; myservo2.write (90); srovė2 = 90; myservo3.write (90); srovė3 = 90; myservo4.write (90); srovė4 = 90; myservo5.write (90); srovė5 = 90; myservo6.write (90); srovė6 = 90; uždelsimas (delayBetweenSteps); }}}
Apdorojimo kodas:
importo apdorojimas.serijinis.*; importo kontrolėP5.*; // importuoti „ControlP5“bibliotekos nuoseklųjį prievadą; „ControlP5 cp5“; // sukurti ControlP5 objekto PFont šriftą; void setup () {// toks pat kaip arduino programos dydis (300, 700); // lango dydis, (plotis, aukštis) printArray (Serial.list ()); // spausdina visus galimus nuoseklius prievadus // Jei turite problemų, tai tikriausiai iš čia String portName = Serial.list () [0]; uostas = naujas serijinis (šis, prievado pavadinimas, 9600); // aš prijungiau arduino prie com3, linux ir mac os būtų kitaip // leidžiame pridėti butoną prie tuščio lango cp5 = new ControlP5 (this); šriftas = createFont ("Arial", 13); // pasirinktiniai mygtukų ir pavadinimų šriftai // Greičio valdymo mygtukai cp5.addButton ("Vienas") // "Vienas" yra mygtuko.setPosition (50, 50) // x ir y koordinatės viršutiniame kairiajame mygtuko kampe.setSize (55, 25) // (plotis, aukštis).setFont (šriftas); cp5.addButton ("Penki").setPosition (110, 50).setSize (55, 25).setFont (šriftas); cp5.addButton ("Dešimt").setPosition (170, 50).setSize (55, 25).setFont (šriftas); cp5.addButton ("Dvidešimt").setPosition (230, 50).setSize (55, 25).setFont (šriftas); cp5.addButton ("Atstatyti").setPosition (110, 2).setSize (55, 25).setFont (šriftas); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (šriftas); // Variklio valdymo mygtukai cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_2_Foward").setPosition (50, 190).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_2_Back").setPosition (50, 240).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_3_Foward").setPosition (50, 290).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_3_Back").setPosition (50, 340).setSize (190, 40) // (plotis, aukštis).setFont (šriftas); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (plotis, aukštis).setFont (šriftas); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_5_Back").setPosition (50, 540).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_6_Foward").setPosition (50, 590).setSize (190, 40).setFont (šriftas); cp5.addButton ("Servo_6_Back").setPosition (50, 640).setSize (190, 40).setFont (šriftas); } void draw () {// tas pats kaip kilpa arduino fone (192, 215, 249); // lango fono spalva (r, g, b) arba (nuo 0 iki 255) // Pridėti tekstą, kuriame sakoma, kad greičio valdymas yra greičio kontrolės užpildymas (0, 10, 25); // teksto spalva (r, g, b) textFont (šriftas); tekstas („Greičio kontrolė“, 50, 40); // ("tekstas", x koordinatė, y koordinatė)} // leidžia pridėti kai kurias funkcijas prie mūsų mygtukų // taigi, kai paspaudžiate bet kurį mygtuką, jis siunčia tam tikrą simbolį per nuoseklųjį prievadą // Esu tikras, kad galima siųsti eilutes vietoj simbolių, ir tai būtų prasmingiau, bet aš nežinau, kaip tai padaryti // Greičio kontrolės komandos void One () {port.write ('w'); } void Five () {port.write ('x'); } void Ten () {port.write ('y'); } void Twenty () {port.write ('z'); } // Variklio valdymo komandos 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'); }