Përmbajtje:
- Furnizimet
- Hapi 1: Shtypni të gjithë përbërësit 3D
- Hapi 2: (Opsional) Bashkangjitni një dërrasë në pjesën e poshtme të kutisë tuaj për ta forcuar atë
- Hapi 3: Matni dhe Pritini një Dërrasë Druri për t'iu Përshtatur Kutisë
- Hapi 4: Shënoni Pozicionet e Motorëve
- Hapi 5: Shënoni Pozicionet e Kllapave dhe Tubave
- Hapi 6: Stërvitni një vrimë për kabllot që dalin nga kutia juaj (USB dhe energji elektrike)
- Hapi 7: Stërvitni dhe shihni të gjitha vrimat e shënuara
- Hapi 8: Bashkoni Motorët dhe Tubin në Dërrasë
- Hapi 9: Bashkojeni dërrasën në kutinë me kllapat L
- Hapi 10: Merrni blloqet tuaja të terminalit dhe bashkoni telat së bashku
- Hapi 11: Pritini fundin e kordonit të rrymës së përshtatësit dhe hiqni telat
- Hapi 12: Identifikoni dhe Shënoni Telat Plus dhe Minus
- Hapi 13: Bashkoni telat në blloqet e terminalit në mënyrë që të gjitha telat + servo dhe tela + nga kordoni i rrymës të lidhen, e njëjta gjë shkon edhe për telat
- Hapi 14: Pritini kokën nga një tela Breadboard
- Hapi 15: Stërvitni tre vrima në fund të kutisë për telat që dalin nga krahu juaj
- Hapi 16: Bashkoni lidhësin bazë në kutinë
- Hapi 17: Përdorni një thikë ose skedar gozhdë për t'i bërë brazdat me tela më të thella
- Hapi 18: Ndërtoni krahun
- Hapi 19: Instaloni Përpunimin dhe Arduino
- Hapi 20: Ngjitni Programet e Kodit
- Hapi 21: Lidhni kunjat e kontrollit të servo në Arduino
- Hapi 22: Shtypni butonin Reset në përpunim, kjo do të vendosë të gjithë krahët në 90 gradë
- Hapi 23: Fiksoni Servo Armët në Motor Horizontalisht
- Hapi 24: Vidhni telat nëpër krahë në mënyrë që të mos ketë përtaci
- Hapi 25: Provoni krahun dhe shtrëngoni ose lironi telat sipas nevojës
- Hapi 26: Ngjitini telat në krahët servo për ta bërë atë të përhershëm
- Hapi 27: Shënime
- Hapi 28: Zgjidhja e problemeve
- Hapi 29: Lidhjet
- Hapi 30: Kodi
- Hapi 31: Më shumë fotografi
Video: Krah Roboti i kontrolluar me tela: 31 hapa
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Ky është një mësim se si të bëni një krah robot të kontrolluar nga telat. Avantazhi i përdorimit të telave është se krahu juaj është më i lehtë dhe ju mund t'i keni të gjithë motorët tuaj në fund të krahut tuaj, duke e bërë më të lehtë ndërtimin dhe mirëmbajtjen. Këtu është një video e krahut në veprim. Unë planifikoj të shtoj një thua në të ardhmen në mënyrë që të mund t'i mbledhë gjërat dhe jo vetëm t'i shtyjë ato përreth.
Printime 3D:
Këtu dhe Këtu
Furnizimet
6 Servo Motors (MG995)
Arduino Uno
Rreth 6 metra tela çeliku të veshur me plastikë (0.5mm)
Kutia 23x33x10 (mund të jetë më e ngushtë, definitivisht nuk duhet të jetë më e shkurtër)
Dërrasë druri 33x10
Arra dhe bulona
Tub 14 cm (kjo është e nevojshme për të drejtuar telat)
4 kllapa L
Përshtatës 5 volt
2 blloqe terminale me 7 drejtime
Telat e bukës
Komponentët e Shtypur 3D (Nuk janë krijuar nga unë, lidhje me elementet në përshkrim):
3 "Bulona"
2 "Elementi 1"
1 "Elementi 2"
2 "Elementi 3"
1 Lidhës bazë
Hapi 1: Shtypni të gjithë përbërësit 3D
Ju mund të keni nevojë për mbështetje për vrimat dhe harqet e bulonave, por sigurohuni që të mos shtoni mbështetje në trupin e përbërësve tuaj; kjo do të mbyllë vrimat e vogla të telit dhe do t'ju duhet të bëni vrima të reja
Hapi 2: (Opsional) Bashkangjitni një dërrasë në pjesën e poshtme të kutisë tuaj për ta forcuar atë
Kutia ime ishte goxha e dobët, e jotja mund të mos jetë
Hapi 3: Matni dhe Pritini një Dërrasë Druri për t'iu Përshtatur Kutisë
Hapi 4: Shënoni Pozicionet e Motorëve
sigurohuni që asnjë prej krahëve të mos prekë njëri -tjetrin
Hapi 5: Shënoni Pozicionet e Kllapave dhe Tubave
Tubi duhet të vendoset rreth një centimetër para vrimës
Hapi 6: Stërvitni një vrimë për kabllot që dalin nga kutia juaj (USB dhe energji elektrike)
Hapi 7: Stërvitni dhe shihni të gjitha vrimat e shënuara
Hapi 8: Bashkoni Motorët dhe Tubin në Dërrasë
Hapi 9: Bashkojeni dërrasën në kutinë me kllapat L
Hapi 10: Merrni blloqet tuaja të terminalit dhe bashkoni telat së bashku
Hapi 11: Pritini fundin e kordonit të rrymës së përshtatësit dhe hiqni telat
Hapi 12: Identifikoni dhe Shënoni Telat Plus dhe Minus
Hapi 13: Bashkoni telat në blloqet e terminalit në mënyrë që të gjitha telat + servo dhe tela + nga kordoni i rrymës të lidhen, e njëjta gjë shkon edhe për telat
Hapi 14: Pritini kokën nga një tela Breadboard
Bashkangjitni skajin e zhveshur të telit të bukës në minus bllokun e terminalit dhe fundin e kunjës në kunjin e tokëzimit në arduino tuaj. Nëse nuk e bëni këtë, motorët do të lëvizin në mënyrë të çrregullt pa asnjë input.
Hapi 15: Stërvitni tre vrima në fund të kutisë për telat që dalin nga krahu juaj
Vrimat duhet të përputhen me vrimat në lidhësin bazë.
Hapi 16: Bashkoni lidhësin bazë në kutinë
Hapi 17: Përdorni një thikë ose skedar gozhdë për t'i bërë brazdat me tela më të thella
Brazdat e telit për elementët 2 dhe 3 janë shumë të cekët.
Hapi 18: Ndërtoni krahun
Ndërtoni krahun sipas udhëzimeve këtu mund t'ju duhet të paraqisni pjesët në mënyrë që ato të përshtaten
Hapi 19: Instaloni Përpunimin dhe Arduino
Përpunimi dhe Arduino
Hapi 20: Ngjitni Programet e Kodit
Kodi është në fund të kësaj faqe
Hapi 21: Lidhni kunjat e kontrollit të servo në Arduino
E lidha motorin e parë me pinin e tretë dixhital, motorin e dytë me pinin e katërt dixhital dhe kështu me radhë. Sigurohuni që kunja e tokëzimit është ende e lidhur me bllokun terminal.
Hapi 22: Shtypni butonin Reset në përpunim, kjo do të vendosë të gjithë krahët në 90 gradë
Hapi 23: Fiksoni Servo Armët në Motor Horizontalisht
Hapi 24: Vidhni telat nëpër krahë në mënyrë që të mos ketë përtaci
Sigurohuni që ta kaloni tela nëpër sa më shumë vrima që mundeni, kjo do ta mbajë atë përkohësisht dhe do të jetë e lehtë për tu hequr.
Hapi 25: Provoni krahun dhe shtrëngoni ose lironi telat sipas nevojës
Hapi 26: Ngjitini telat në krahët servo për ta bërë atë të përhershëm
Hapi 27: Shënime
Kam përdorur tela bizhuteri 0.5 mm, por 0.4 mm duhet të jetë mirë. Dizajni origjinal përdorte tela PVC por ai u prish shumë lehtë dhe ishte e vështirë të punohej me të.
Nëse do të lëvizni krahun në një makinë ose biçikletë, mbështillni nyjet e krahut në shirit për t'u siguruar që ato të mos dalin jashtë. Kjo është veçanërisht e rëndësishme për elementin 1.
Kur fillova këtë projekt po pyesja veten pse mund të gjeja vetëm një tutorial se si të bëja një krah të kontrolluar nga telat. Tani e kuptoj pse kjo nuk është mënyra më e zakonshme për të bërë një krah roboti hobi. Telat ndonjëherë bien nga brazdat e tyre dhe e gjithë gjë është disi e dobët. Nuk e di nëse problemet janë sepse nuk kam shumë përvojë apo nëse e gjithë ideja është problematike edhe pse jam i sigurt se do të ishte më solide nëse do ta dija se çfarë po bëja.
Hapi 28: Zgjidhja e problemeve
Vrimat e telave mbyllen në elementët e printuar 3D:
Ju shtuat mbështetje për të gjithë elementin në vend të vetëm vrimave të bulonave. Ose ribotoni elementin ose hapni vrimat me një gjilpërë vërtet të nxehtë.
Porta COM është e mbyllur, nuk mund të komunikoni me arduino:
Arduino juaj mund të mos pranojë porte USB 3 (imi nuk e pranoi), ose mund të blini një kabllo shtesë USB 2 ose të përdorni një kompjuter që ka porte USB 2
Kodi nuk punon:
Ndiqni këtë tutorial dhe modifikoni atë për të bërë kodin tuaj
Një pjesë e krahut nuk lëviz:
Telat mund të jenë ngatërruar, për ta kontrolluar këtë hiqeni krahun servo nga servo dhe provoni të tërhiqni telat me dorë. Zgjidhni telat dhe nëse është ende e vështirë të tërhiqni telat provoni të përdorni ndonjë WD-40 ose një lubrifikant për ta bërë lëvizjen më të lehtë
Hapi 29: Lidhjet
Krah jo robotik:
Shtypëset 3D të krahut:
Krahu im 3D i printueshëm:
Arduino dhe Përpunimi:
Hapi 30: Kodi
Ndryshuar nga ky kod
Kodi Arduino:
#include // Deklaroni motorët Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; // Të gjithë motorët janë vendosur në 90 gradë sipas parazgjedhjes int current1 = 90; rryma int2 = 90; rryma int3 = 90; rryma int4 = 90; rryma int5 = 90; rryma int6 = 90; // Shkallët minimale dhe maksimale motorët mund të arrijnë 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; // Shkallët që duhet shtuar ose zbritur nga pozicioni aktual int gradëFoward = 5; // Vonesa në mënyrë që dy funksione të mos ndodhin në rendin e gabuar int delayBetweenSteps = 100; void setup () {// Vendosni kunjat e kontrollit për secilin motor myservo1.attach (3); myservo2.attach (4); myservo3.tash (5); myservo4.tash (6); myservo5.tash (7); myservo6.tash (8); // Vendosni të gjithë motorët në cilësimin e paracaktuar myservo1.write (current1); myservo2.shkruaj (aktuale2); myservo3.shkruaj (aktuale3); myservo4.shkruaj (aktuale4); myservo5.shkruaj (aktuale5); myservo6.shkruaj (aktuale6); // filloni komunikimin serik @9600 bps Serial.begin (9600); } void loop () {if (Serial.available ()) {// nëse të dhënat janë në dispozicion për të lexuar char val = Serial.read (); // vendoseni në këtë shenjë // Motor Controls nëse (val == 'a' && current1 + gradëPër mini1) {myservo1.write (current1 - gradëFoward); aktuale1 = aktuale1 - gradëPërpara; vonesë (vonesë midis hapave); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - gradëFoward); aktuale2 = aktuale2 - gradëPërpara; vonesë (vonesë midis hapave); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - gradëFoward); aktuale3 = aktuale3 - gradëPërpara; vonesë (vonesë ndërmjet hapave); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - gradëFoward); aktuale4 = aktuale4 - gradëPërpara; vonesë (vonesë midis hapave); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - gradëFoward); aktuale5 = aktuale5 - gradëPërpara; vonesë (vonesë midis hapave); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - gradëFoward); aktuale6 = aktuale6 - gradëPërpara; vonesë (vonesë ndërmjet hapave); } // Kontrollet e shpejtësisë nëse (val == 'w') {// Nëse butoni i shpejtësisë 1 shtypet gradëFoward = 1; vonesë (vonesë ndërmjet hapave); } if (val == 'x') {// Nëse butoni i shpejtësisë 5 është shtypur gradëFoward = 5; vonesë (vonesë ndërmjet hapave); } if (val == 'y') {// Nëse butoni i shpejtësisë 10 është shtypur gradëFoward = 10; vonesë (vonesë ndërmjet hapave); } if (val == 'z') {// Nëse butoni shpejtësia 20 shtypet gradëFoward = 20; vonesë (vonesë midis hapave); } if (val == 'r') {// Nëse butoni i shpejtësisë 20 shtypet myservo1.write (90); aktuale1 = 90; myservo2.shkruaj (90); aktuale2 = 90; myservo3.shkruaj (90); aktuale3 = 90; myservo4.shkruaj (90); aktuale4 = 90; myservo5.shkruaj (90); aktuale5 = 90; myservo6.shkruaj (90); aktuale6 = 90; vonesë (vonesë ndërmjet hapave); }}}
Kodi i përpunimit:
përpunimi i importit.serial.*; kontrolli i importitP5.*; // importo bibliotekën ControlP5 Portin serik; ControlP5 cp5; // krijoni fontin PFont të objektit ControlP5; void setup () {// e njëjtë me madhësinë e programit arduino (300, 700); // madhësia e dritares, (gjerësia, lartësia) printArray (Serial.list ()); // printon të gjitha portet serike të disponueshme // Nëse keni ndonjë problem ndoshta vjen nga këtu String portName = Serial.list () [0]; port = Serial i ri (ky, emri port, 9600); // Unë kam lidhur arduino me com3, do të ishte ndryshe në linux dhe mac os // le të shtojmë buton në dritaren e zbrazët cp5 = new ControlP5 (kjo); font = createFont ("Arial", 13); // fontet e personalizuara për butonat dhe titullin // Butonat e kontrollit të shpejtësisë cp5.addButton ("One") // "One" është emri i butonit.setPosition (50, 50) // koordinatat x dhe y në këndin e sipërm të majtë të butonit.setSize (55, 25) // (gjerësia, lartësia).setFont (font); cp5.addButton ("Five").setPosition (110, 50).setSize (55, 25).setFont (font); cp5.addButton ("Dhjetë").setPosition (170, 50).setSize (55, 25).setFont (font); cp5.addButton ("Njëzet").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); // Butonat e Kontrollit të Motorit 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) // (gjerësia, lartësia).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) // (gjerësia, lartësia).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); } tërheqje e pavlefshme () {// njësoj si lak në sfond arduino (192, 215, 249); // ngjyra e sfondit të dritares (r, g, b) ose (0 në 255) // Shto tekst duke thënë se kontrolli i shpejtësisë është mbushje e kontrollit të shpejtësisë (0, 10, 25); // ngjyra e tekstit (r, g, b) textFont (font); tekst ("Kontrolli i Shpejtësisë", 50, 40); // ("teksti", koordinata x, koordinata y)} // lejon shtimin e disa funksioneve te butonat tanë // kështu që kur shtypni ndonjë buton, ai dërgon një shenjë të veçantë mbi portin serik // jam i sigurt që është e mundur të dërgoni vargje në vend të karaktereve, dhe do të kishte më shumë kuptim, por nuk e di si ta bëj // Komandat e Kontrollit të Shpejtësisë void One () {port.write ('w'); } void Five () {port.write ('x'); } void Dhjetë () {port.write ('y'); } void Twenty () {port.write ('z'); } // Komandat e Kontrollit Motor 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'); }