Sommario:

Braccio robotico Arduino: 5 passaggi
Braccio robotico Arduino: 5 passaggi

Video: Braccio robotico Arduino: 5 passaggi

Video: Braccio robotico Arduino: 5 passaggi
Video: How to assemble and control a 4 DOF robot mechanical arm kit with Arduino | Step by step 2024, Luglio
Anonim
Image
Image
Braccio robotico Arduino
Braccio robotico Arduino
Braccio robotico Arduino
Braccio robotico Arduino

Dato che è il mio primo progetto dopo i 15 tutorial del mio starter kit Arduino, il vero scopo è ottenere critiche, consigli, suggerimenti, idee da chiunque ne sappia più di me.

Questo progetto riguarda un braccio robotico, con 4 dof e una presa. Con un budget discretamente contenuto: la struttura è stata tagliata da un amico, i 4 servi erano 30€, i 2 joystick 4€, bulloni vite ecc. a meno di 10€ e tutto il resto (Arduino, cavi, servo grip ecc.) era già incluso nel mio kit di partenza. Per un totale di 40-45€ che sono circa 45-50 dollari USA (lo stesso prezzo di un kit me-arm, ma ehi, è stato divertente doverlo costruire da solo (e rovinare qualcosa di tanto in tanto) e non seguire le istruzioni come una macchina).

Dato che questo è stato il mio primo progetto e Instructable, ho partecipato al "First Time Author" e ad un paio di altri concorsi, quindi se ti piace, votalo:)

Fase 1: PROGETTAZIONE E ASSEMBLAGGIO:

Per prima cosa avevo bisogno di una struttura: questa era sicuramente la parte più lunga. Dato che non volevo copiare e incollare il progetto da qualcun altro, ho preso un progetto come riferimento e io (e un paio di compagni di classe più abili che mi hanno davvero salvato) iniziato a modificarlo in base alle nostre esigenze (diversi servi con coppia, peso e dimensioni diverse, ecc.). Ho dovuto ricostruirlo un paio di volte, ognuna di esse ho trovato qualcosa che non andava, e abbiamo dovuto ritagliare alcuni pezzi e riprovare. Ho allegato il file.dxf nel caso volessi usarlo. Poi ho dovuto comprare l'elettronica:La maggior parte delle parti erano standard, la parte difficile era scegliere i servi. Ho calcolato la coppia richiesta con la regola empirica, in seguito ho provato un calcolo più accurato e ho scoperto che avrei potuto esagerare un po'. Apparentemente 6 kg/cm sarebbero stati sufficienti per il 2° servo (dalla base), e il mio fornisce 9-11 kg/cm. Bene, questo mi dà un po' di sicurezza e la possibilità di caricare fino a 2 kg di carico (che è impossibile, ma mi piace che tecnicamente potrei farlo). Avrei potuto anche acquistare servi diversi, con una coppia decrescente allontanandomi dalla base, ma acquistare servi identici dallo stesso venditore era di gran lunga l'opzione più economica. Alimentazione: L'Arduino non era sicuramente sufficiente per i servi, poiché ogni mg995 350mA e il microservo 9g assorbe 100mA, per un totale di 350*4 +100 = 1500mA. Quindi ho recuperato un caricabatterie (6V 1,5A) e vi ho saldato due cavi di collegamento (se alcuni di voi potrebbero aver bisogno di istruzioni reali, basta chiedere nei commenti e farò del mio meglio per creare un passo dopo passo guida)Elenco materiali:- Struttura- Vite M5x7cm x5, Bulloni M5 x15 (base)- Vite M3x16mm x18*- Vite M3x20mm x13*- Bulloni M3 x40*- Vite M3x8cm x3 - Morsetto (altrimenti cadrà)- 3 tasselli- Arduino (o qualcos'altro per controllarlo, deve avere almeno 5 PWM)- Qualcosa per fornire 5-6V e almeno 1,5A - 3x joystick tipo ps2- 4x servo TowerPro mg995- 1x microservo TowerPro 9g (per l'impugnatura)- Molti ponticelli - Tagliere*(Ho usato bulloni e viti per poter montare e smontare velocemente, altrimenti potevi sostituirli quasi tutti con viti per falegnameria)

Passaggio 2: CODICE:

L'idea è di controllare ogni servo con uno dei due assi di un joystick simile a ps2. Ogni joystick sembrava avere diversi "valori di riposo" (il valore tra 0-1023 quando è fermo) sia per l'asse y che per quello x. era un problema, poiché la differenza era tutt'altro che piccola (uno aveva lo zero su y a 623) e volevo usare la funzione mappa per convertire da 0-1023 in gradi. Ma la funzione map pensa che il valore di riposo sia 1023/2. Il che ha portato a muovere ogni servo non appena accendo Arduino, non va bene. Sono riuscito a aggirare questo problema trovando manualmente la differenza tra il valore di lettura e ogni diverso valore di riposo (che ho calcolato separatamente per ogni joystick), quindi a rendere il codice più breve e più intelligente, gli ho fatto leggere i valori di resto nella funzione di configurazione e salvarli in alcune variabili. Il nuovo algoritmo si basa sulla conversione dell'incremento in gradi, ma volevo una quantità molto bassa di gradi per il mio incremento, quindi Ho dovuto dividerlo per una costante: ho provato molti valori, fino a quando non sono arrivato ai 200 finali (potrei aggiungere un potenziometro per modificare manualmente questo valore in quello desiderato). Il resto del codice è piuttosto standard, immagino, anche se potrebbe essere più elegante inserire il calcolo dell'incremento all'interno di una funzione separata.

Fase 3: ELETTRONICA:

ELETTRONICA
ELETTRONICA

Il cablaggio è lo stesso mostrato nell'immagine o nel file fritzing:segnali servi ai pin: 5-6-9-10-11 e asse del joystick ai pin analogici: A0-A1-A2-A3-A4Il problema principale che ho riscontrato era che i joystick DOVREBBERO ESSERE forniti dall'Arduino, NON dal caricatore che uso per i servi. Altrimenti il servo impazzirebbe muovendosi casualmente avanti e indietro. Penso che potrebbe essere perché, se fornisco loro il caricabatterie, l'Arduino non sarà in grado di dire con precisione la differenza di potenziale quando li sposto, ma poi di nuovo: Sono molto nuovo nell'elettronica, quindi è solo un'ipotesi. Collegare la massa di Arduino e la messa a terra del caricatore attraverso la breadboard ha aiutato a prevenire movimenti casuali e imprevisti, suppongo per un motivo simile della fornitura dei joystick.

Passaggio 4: ATTUALMENTE IN CORSO DI MIGLIORAMENTO:

ATTUALMENTE IN MIGLIORAMENTO
ATTUALMENTE IN MIGLIORAMENTO

Dato che ogni joystick può controllare 2 servi (1 per asse), ho bisogno di 3 servi per controllare l'intero braccio, ma sfortunatamente ho solo 2 pollici. Così ho pensato che, invece di controllare ogni servo, avrei potuto controllare solo la posizione xyz del grip e apri-chiudi il grip, per un totale di 4 assi, 2 joystick e 2 pollici! Ho scoperto che quel problema è noto come Inverse Kinematics, ho anche scoperto che è tutt'altro che facile. L'idea è scrivere (equazioni non lineari) per trovare lo stato di ogni effettore (angoli per i servi) data la posizione finale. Ho caricato un foglio scritto a mano con le equazioni e attualmente sto lavorando a un nuovo codice per usarle. Non dovrebbe essere troppo difficile, in pratica devo leggere i joystick, usare le loro letture per modificare le coordinate xyz dell'impugnatura, e poi darle alle mie equazioni, calcolare gli angoli dei servi e scriverle.

Fase 5: MIGLIORAMENTI FUTURI:

Quindi, sono abbastanza soddisfatto del risultato e considerando che sono totalmente nuovo nell'elettronica non far saltare in aria qualcosa o me stesso è stata già una grande vittoria. Come ho detto all'inizio, qualsiasi idea per miglioramenti futuri, sia software che hardware, è più che benvenuto! Finora ho pensato a: 1. Il potenziometro per modificare la “sensibilità” dei joystick.2. Nuovo codice per fargli “registrare” alcuni movimenti e rifarli (magari più veloci e brevi dell'input umano)3. Una sorta di input visivo/distanza/vocale ed essere in grado di ottenere oggetti senza che qualcuno utilizzi i joystick4. Saper disegnare figure geometriche Qualche altra idea? Non esitate a commentare con qualsiasi suggerimento. Grazie

Consigliato: