Sommario:

Braccio robotico controllato da filo: 31 passaggi
Braccio robotico controllato da filo: 31 passaggi

Video: Braccio robotico controllato da filo: 31 passaggi

Video: Braccio robotico controllato da filo: 31 passaggi
Video: Braccio Robotico Controllato Da Arduino E Interfaccia Touch - Voiceover Instructables 2024, Dicembre
Anonim
Braccio robotico controllato da filo
Braccio robotico controllato da filo

Questo è un tutorial su come realizzare un braccio robotico controllato da fili. Il vantaggio dell'utilizzo dei cavi è che il tuo braccio è più leggero e puoi avere tutti i motori nella parte inferiore del braccio, facilitando la costruzione e la manutenzione. Ecco un video del braccio in azione. Ho intenzione di aggiungere un artiglio in futuro in modo che possa raccogliere le cose e non solo spingerle in giro.

Stampabili 3D:

Qui e qui

Forniture

6 servomotori (MG995)

Arduino Uno

Circa 6 metri di filo di acciaio rivestito in plastica (0,5 mm)

Scatola 23x33x10 (può essere più stretta, sicuramente non dovrebbe essere più corta)

Plancia di legno 33x10

Dadi e bulloni

Tubo 14 cm (necessario per guidare le corde)

4 staffe a L

Adattatore da 5 volt

2 morsettiere a 7 vie

Fili per tagliere

Componenti stampati in 3D (non progettati da me, collegamenti agli elementi nella descrizione):

3 “bulloni”

2 “Elemento 1”

1 “Elemento 2”

2 “Elemento 3”

1 connettore di base

Passaggio 1: stampa tutti i componenti 3D

Potrebbe essere necessario il supporto per i fori dei bulloni e gli archi, ma assicurati di non aggiungere supporto al corpo dei componenti; questo chiuderà i piccoli fori del filo e dovrai fare nuovi fori

Passaggio 2: (Facoltativo) Attacca un'asse di legno sul fondo della tua scatola per rafforzarla

La mia scatola era piuttosto debole, la tua potrebbe non esserlo

Passaggio 3: misura e taglia un'asse di legno per adattarla alla scatola

Passaggio 4: contrassegnare le posizioni dei motori

assicurati che nessuna delle braccia si tocchi l'un l'altra

Passaggio 5: contrassegnare le posizioni delle staffe e del tubo

Segna le posizioni delle staffe e del tubo
Segna le posizioni delle staffe e del tubo

Il tubo deve essere posizionato circa un centimetro davanti al foro

Passaggio 6: praticare un foro per i cavi che escono dalla scatola (USB e alimentazione)

Praticare un foro per i cavi che escono dalla scatola (USB e alimentazione)
Praticare un foro per i cavi che escono dalla scatola (USB e alimentazione)

Passaggio 7: praticare e segare tutti i fori contrassegnati

Praticare e segare tutti i fori contrassegnati
Praticare e segare tutti i fori contrassegnati

Passaggio 8: collegare i motori e il tubo alla tavola

Passaggio 9: attaccare la tavola alla scatola con le staffe a L

Passaggio 10: prendi le morsettiere e salda i fili insieme

Prendi le tue morsettiere e salda i fili insieme
Prendi le tue morsettiere e salda i fili insieme

Passaggio 11: tagliare l'estremità del cavo di alimentazione dell'adattatore e spellare i fili

Passaggio 12: identificare e contrassegnare i fili più e meno

Passaggio 13: collegare i fili alle morsettiere in modo che tutti i fili + servo e il filo + dal cavo di alimentazione siano collegati, lo stesso vale per i fili

Collegare i fili alle morsettiere in modo che tutti i fili + servo e il filo + dal cavo di alimentazione siano collegati, lo stesso vale per i fili
Collegare i fili alle morsettiere in modo che tutti i fili + servo e il filo + dal cavo di alimentazione siano collegati, lo stesso vale per i fili

Passaggio 14: tagliare la testa da un filo di breadboard

Taglia la testa da un filo di tagliere
Taglia la testa da un filo di tagliere

Attacca l'estremità spellata del filo della breadboard alla morsettiera meno e l'estremità del pin al pin di terra nel tuo arduino. Se non lo fai, i motori si muoveranno in modo irregolare senza alcun input.

Passaggio 15: praticare tre fori nella parte inferiore della scatola per i cavi che escono dal braccio

I fori devono corrispondere ai fori nel connettore di base.

Passaggio 16: collegare il connettore della base alla scatola

Attacca il connettore della base alla scatola
Attacca il connettore della base alla scatola

Passaggio 17: utilizzare un coltello o una lima per unghie per rendere più profonde le scanalature del filo

Usa un coltello o una lima per unghie per rendere più profonde le scanalature del filo
Usa un coltello o una lima per unghie per rendere più profonde le scanalature del filo

Le scanalature del filo per gli elementi 2 e 3 sono troppo basse.

Passaggio 18: costruire il braccio

Costruisci il braccio
Costruisci il braccio

Costruisci il braccio secondo le istruzioni qui, potresti dover archiviare le parti in modo che si adattino

Passaggio 19: installare Processing e Arduino

Elaborazione e Arduino

Passaggio 20: incolla i programmi di codice

Il codice è in fondo a questa pagina

Passaggio 21: collegare i pin di controllo del servo ad Arduino

Collega i pin di controllo del servo ad Arduino
Collega i pin di controllo del servo ad Arduino

Ho collegato il primo motore al terzo pin digitale, il secondo motore al quarto pin digitale e così via. Assicurarsi che il pin di terra sia ancora collegato alla morsettiera.

Passaggio 22: premere il pulsante di ripristino in elaborazione, questo imposterà tutti i bracci a 90 gradi

Passaggio 23: fissare i bracci del servo al motore orizzontalmente

Passaggio 24: infilare i fili attraverso le braccia in modo che non ci siano allentamenti

Assicurati di infilare il filo attraverso il maggior numero di fori possibile, questo lo terrà temporaneamente e sarà facile da rimuovere.

Passaggio 25: testare il braccio e stringere o allentare i fili secondo necessità

Passaggio 26: incollare a caldo i fili ai bracci del servo per renderlo permanente

Passaggio 27: note

Appunti
Appunti

Ho usato un filo per gioielli da 0,5 mm, ma 0,4 mm dovrebbe andare bene. Il design originale utilizzava filo in PVC ma si rompeva troppo facilmente ed era difficile lavorarci.

Se devi muovere il braccio in macchina o in bicicletta, avvolgi le articolazioni del braccio con del nastro adesivo per assicurarti che non fuoriescano. Questo è particolarmente importante per l'elemento 1.

Quando ho iniziato questo progetto mi chiedevo perché riuscivo a trovare solo un tutorial su come realizzare un braccio controllato da fili. Ora capisco perché questo non è il modo più comune per realizzare un braccio robotico per hobby. I fili a volte cadono dalle loro scanalature e il tutto è un po' fragile. Non so se i problemi sono perché non ho molta esperienza o se l'intera idea è problematica anche se sono sicuro che sarebbe più solido se sapessi cosa stavo facendo.

Passaggio 28: risoluzione dei problemi

I fori del filo sono chiusi negli elementi stampati in 3D:

Hai aggiunto il supporto per l'intero elemento invece che solo per i fori dei bulloni. Ristampa l'elemento o apri i fori con un ago molto caldo.

La porta COM è chiusa, non puoi comunicare con arduino:

Il tuo arduino potrebbe non accettare porte USB 3 (il mio no), puoi acquistare un cavo di prolunga USB 2 o utilizzare un computer dotato di porte USB 2

Il codice non funziona:

Segui questo tutorial e modificalo per creare il tuo codice

Una parte del braccio non si muove:

I fili potrebbero essersi aggrovigliati, per verificare ciò togliere il braccio del servo dal servo e provare a tirare i fili a mano. Districa i fili e se è ancora difficile tirare i fili prova a usare del WD-40 o un lubrificante per facilitare il movimento

Passaggio 29: collegamenti

Braccio non robotico:

Braccio stampabili 3D:

My Arm 3D Printable:

Arduino ed elaborazione:

Passaggio 30: codice

Modificato da questo codice

Codice Arduino:

#include //Dichiara i motori Servo myservo1; Servo mioservo2; Servo myservo3; Servo mioservo4; Servo mioservo5; Servo mioservo6; //Tutti i motori sono impostati a 90 gradi di default int current1 = 90; int corrente2 = 90; int corrente3 = 90; int corrente4 = 90; int corrente5 = 90; int corrente6 = 90; //Gradi Minimo e Massimo i motori possono raggiungere 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; //Gradi da aggiungere o sottrarre dalla posizione corrente int degreeFoward = 5; //Ritarda in modo che due funzioni non vengano eseguite nell'ordine sbagliato int delayBetweenSteps = 100; void setup() { //Imposta i pin di controllo per ogni motore myservo1.attach(3); myservo2.attach(4); myservo3.attach(5); myservo4.attach(6); myservo5.attach(7); myservo6.attach(8); //Imposta tutti i motori sull'impostazione predefinita myservo1.write(current1); myservo2.write(current2); myservo3.write(current3); myservo4.write(current4); myservo5.write(current5); myservo6.write(current6); //avvia comunicazione seriale @9600 bps Serial.begin(9600); } void loop(){ if(Serial.available()){ //se i dati sono disponibili per la lettura char val = Serial.read(); //inseriscilo in questo carattere //Controlli motore if(val == 'a' && current1 + degreeForward mini1){ myservo1.write(current1 - degreeForward); corrente1 = corrente1 - gradiAvanti; delay(delayBetweenSteps); } if(val == 'c' && current2 mini2){ myservo2.write(current2 - degreeForward); corrente2 = corrente2 - gradiAvanti; delay(delayBetweenSteps); } if(val == 'e' && current3 mini3){ myservo3.write(current3 - degreeForward); corrente3 = corrente3 - gradiAvanti; delay(delayBetweenSteps); } if(val == 'g' && current4 mini4){ myservo4.write(current4 - degreeForward); corrente4 = corrente4 - gradiAvanti; delay(delayBetweenSteps); } if(val == 'i' && current5 mini5){ myservo5.write(current5 - degreeForward); corrente5 = corrente5 - gradiAvanti; delay(delayBetweenSteps); } if(val == 'k' && current6 mini6){ myservo6.write(current6 - degreeForward); corrente6 = corrente6 - gradiAvanti; delay(delayBetweenSteps); } //Controlli la velocità if(val == 'w'){ //Se il pulsante della velocità 1 è stato premuto degreeForward = 1; delay(delayBetweenSteps); } if(val == 'x'){ //Se il pulsante della velocità 5 è stato premuto degreeForward = 5; delay(delayBetweenSteps); } if(val == 'y'){ //Se il pulsante della velocità 10 è stato premuto degreeForward = 10; delay(delayBetweenSteps); } if(val == 'z'){ //Se il pulsante della velocità 20 è stato premuto degreeForward = 20; delay(delayBetweenSteps); } if(val == 'r'){ //Se il pulsante della velocità 20 è stato premuto myservo1.write(90); corrente1 = 90; myservo2.write(90); corrente2 = 90; myservo3.write(90); corrente3 = 90; myservo4.write(90); corrente4 = 90; myservo5.write(90); corrente5 = 90; myservo6.write(90); corrente6 = 90; delay(delayBetweenSteps); } } }

Codice del trattamento:

import processing.serial.*; controllo importazione P5.*; //import la libreria ControlP5 Porta seriale; Controllo P5 cp5; //crea l'oggetto ControlP5 font PFont; void setup(){ //uguale alla dimensione del programma arduino (300, 700); //dimensione della finestra, (larghezza, altezza) printArray(Serial.list()); //stampa tutte le porte seriali disponibili //Se hai un problema probabilmente viene da qui String portName = Serial.list()[0]; port = new Serial(this, portName, 9600); // ho collegato arduino a com3, sarebbe diverso in linux e mac os // aggiungiamo il pulsante alla finestra vuota cp5 = new ControlP5 (questo); font = createFont("Arial", 13); // caratteri personalizzati per pulsanti e titolo // Pulsanti di controllo della velocità cp5.addButton("One") //"One" è il nome del pulsante.setPosition(50, 50) //coordinate x e y dell'angolo superiore sinistro del pulsante.setSize(55, 25) //(larghezza, altezza).setFont(font); cp5.addButton("Cinque").setPosition(110, 50).setSize(55, 25).setFont(font); cp5.addButton("Ten").setPosition(170, 50).setSize(55, 25).setFont(font); cp5.addButton("Venti").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); // Pulsanti di controllo motore 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) //(larghezza, altezza).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) //(width, height).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(){ //uguale al loop in arduino background(192, 215, 249); // colore di sfondo della finestra (r, g, b) o (da 0 a 255) //Aggiungi il testo che dice che il controllo della velocità è riempimento del controllo della velocità (0, 10, 25); //colore del testo (r, g, b) textFont(font); text("Controllo velocità", 50, 40); // ("testo", coordinata x, coordinata y) } //aggiungiamo alcune funzioni ai nostri pulsanti //così quando premi un pulsante qualsiasi, invia particolari caratteri sulla porta seriale //Sono sicuro che è possibile inviare stringhe invece di caratteri, e avrebbe più senso ma non so come farlo //Comandi di controllo velocità void One(){ port.write('w'); } void Five(){ port.write('x'); } void Dieci(){ port.write('y'); } void Twenty(){ port.write('z'); } //Comandi di controllo motore 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'); }

Passaggio 31: altre immagini

Consigliato: