Përmbajtje:

Krah Roboti i kontrolluar me tela: 31 hapa
Krah Roboti i kontrolluar me tela: 31 hapa

Video: Krah Roboti i kontrolluar me tela: 31 hapa

Video: Krah Roboti i kontrolluar me tela: 31 hapa
Video: Управление 32 сервомоторами с помощью PCA9685 и Arduino: V3 2025, Janar
Anonim
Krah Roboti i kontrolluar me tela
Krah Roboti i kontrolluar me tela

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

Shënoni pozicionet e kllapave dhe tubit
Shënoni pozicionet e kllapave dhe tubit

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)

Stërvitni një vrimë për kabllot që dalin nga kutia juaj (USB dhe energji elektrike)
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

Stërvitni dhe pa të gjitha vrimat e shënuara
Stërvitni dhe pa 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

Merrni blloqet tuaja të terminalit dhe bashkoni telat së bashku
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

Lidhni 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
Lidhni 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

Pritini kokën nga një tela Breadboard
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ë

Bashkangjitni lidhësin bazë në kuti
Bashkangjitni lidhësin bazë në kuti

Hapi 17: Përdorni një thikë ose skedar gozhdë për t'i bërë brazdat me tela më të thella

Përdorni një thikë ose skedar gozhdë për t'i bërë brazdat me tela më të thella
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
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

Lidhni kunjat e kontrollit të servo në Arduino
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

Shënime
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'); }

Hapi 31: Më shumë fotografi