Braccio robotico controllato da Arduino

L’automazione e la robotica rappresentano i settori più promettenti in Italia in campo industriale e proliferano le aziende che realizzano soluzioni come macchine per assemblaggio automatico e robot; sicuramente il prodotto più apprezzato è il braccio robotico, perché capace di compiere molte lavorazioni, fissato verticalmente oppure orizzontalmente alla struttura portante e dotato di meccanismi anche molto complessi che consentono un elevato grado di libertà e notevole velocità nell’eseguire i movimenti richiesti.
Il braccio robotico è anche qualcosa di ambito dai maker, per il fascino che esercita in quanto primo, forse più significativo, passo verso la costruzione di un robot umanoide.
L’importanza assunta in vari settori da questa porzione di robot rende necessario disporre, nella scuola e nella ricerca e sviluppo, delle competenze e di supporti didattici e prototipali per sviluppare progetti nel settore della robotica. Il braccio che proponiamo in questo articolo è stato progettato proprio per muovere i primi passi e sperimentare e sviluppare applicazioni robotiche, scontrandosi con le problematiche come il motion control e il firmware correlato; è quindi rivolto sia agli hobbisti, sia alle scuole a indirizzo tecnico, dove può diventare una piattaforma didattica indispensabile, ed anche ai progettisti che debbano prototipare applicazioni robotiche, nonché sviluppare ed affinare i propri software e firmware di gestione di sistemi di automazione industriale più complessi.

Il progetto

Vediamo dunque di spiegare meglio in cosa consiste il progetto, che è composto da una struttura meccanica nella quale sono integrati gli azionamenti elettrici, oltre che da un’elettronica che governa questi ultimi per ottenere i movimenti desiderati.
Il braccio è di tipo articolato (detto anche antropomorfo) giacché tutti i giunti sono rotanti, caratterizzato da 4 gradi di libertà (rotazione base, movimento spalla, gomito, rotazione polso) che uniti alla pinza in cima conferiscono una certa abilità di posizionamento e orientamento di piccoli oggetti.
Partiamo dalla struttura meccanica, che è la parte più importante perché è in effetti il braccio robotico; l’elettronica è solo la parte che lo controlla. Il braccio ha una struttura interamente realizzata con parti in plexiglass da 3 e 5 mm di spessore tagliate a laser e assemblate tramite l’utilizzo di distanziali in ottone/ABS, viti e dadi.
Il braccio ha tre snodi per il movimento in alto e in avanti (è composto da un braccio e un avambraccio cui è intestata una pinza in funzione di mano) e può ruotare sul piano orizzontale grazie a una ralla in acciaio stampato a un giro di sfere, a sua volta avvitata alla base d’appoggio dell’insieme; a questa base è fissata anche la sezione che contiene l’elettronica. Il braccio può ruotare sulla base d’appoggio di ben 180 gradi e la ralla unisce la base del braccio alla base d’appoggio. La lunghezza di braccio e avambraccio è 160 mm e il braccio può estendersi in altezza per un massimo di 27 cm, che divengono 310 al polso (la giuntura su cui ruota la pinza) e ben 400 mm considerando anche la pinza.
La base è abbastanza ampia da sorreggere il braccio anche esteso, tuttavia se questo deve sollevare pesi rilevanti va fissata al piano d’appoggio; allo scopo abbiamo previsto quattro fori per avvitarla, ad esempio, a un tavolo, a un banco di lavoro o a un macchinario del quale si desidera che il braccio diventi parte. La pinza ha le ganasce concave lunghe 45 mm e dentate, così da favorire la presa di oggetti di varia natura.
L’azionamento del braccio avviene mediante due servo da 13 kg/cm con ingranaggi in metallo (venduti con il codice prodotto SERVO213): uno comanda la rotazione del primo tratto e il secondo alza o abbassa l’avambraccio sull’articolazione del gomito. In corrispondenza di quest’ultima si trova un bilanciere che, grazie a una biella imperniata sulla base rotante e ad un’altra imperniata sul sostegno della pinza, assicura che la stessa rimanga orizzontale indipendentemente da quanto si estende o si ritrae il braccio.
La rotazione del braccio è di 180° e viene comandata da un ulteriore servo da 13 kg/cm con ingranaggi in metallo identico ai due precedenti; notate che per kg/cm si intende la forza esercitata dal servomotore per una data lunghezza della leva, considerata all’estremità della leva stessa, quindi 13 kg/cm vuol dire che il servo esercita una forza di 13 kg a un centimetro dall’asse del suo alberino, mentre a 2 cm i 13 kg dimezzano (diventano 6,5) e via di seguito. Ciò è logico essendo il sistema meccanico composto dall’albero del servo e dalla leva di azionamento, una leva svantaggiosa (potenza sul fulcro e resistenza a una certa distanza).


La base di appoggio dispone di una ralla in acciaio a un giro di sfere che permette all’intero braccio di ruotare attorno al suo asse; l’angolo di rotazione è determinato dall’angolo massimo di escursione del perno del servo utilizzato (nel nostro caso 180°). L’utilizzo di un servomotore a rotazione continua permetterebbe l’analoga rotazione dell’intero braccio, tuttavia l’esistenza del un cavo di alimentazione esterno collegato alla scheda di controllo ne limita, in pratica, l’escursione. Il problema può essere evitato installando sul braccio stesso la fonte di alimentazione (ad esempio una batteria) che eliminerebbe detto collegamento. In questo caso, però, si avrebbero limiti di autonomia.
La ralla permette di ottenere una rotazione fluida e con un ridottissimo attrito, consentendo movimenti precisi con il minimo sforzo del servo interessato.
La pinza è montata su una base (polso) a sua volta imperniata sull’avambraccio e può ruotare di 180 gradi mediante un servo miniatura da 1,2 kg/cm (codice Futura Elettronica SERVO206); lo stesso tipo di servo viene montato nell’azionamento che consente apertura e chiusura delle ganasce della pinza, le quali possono aprirsi fino a stringere oggetti larghi 65 mm. La parte posteriore del braccio è predisposta per alloggiare schede di controllo quali Raspberry Pi e Arduino UNO, oltre che dispositivi idonei (pompa a vuoto elettrica ed elettrovalvola a due vie) per realizzare un sistema pick and place con ventosa: un add-on del braccio robotico che descriveremo in un prossimo articolo.
Dalle prove effettuate in laboratorio il braccio (con la base opportunamente ancorato al piano d’appoggio) ha dimostrato di essere in grado di sollevare al livello del polso (non con la pinza) un carico massimo di 250 g, contrariamente a quanto lascerebbe pensare il materiale utilizzato per la struttura; infatti, sebbene il plexiglass con ridotti spessori sia abbastanza fragile e flessibile, se ogni singolo elemento sottoposto ad elevata sollecitazione viene fatto lavorare “in costa” (cioè di traverso) raggiunge gradi di resistenza sorprendenti, anche se i suoi limiti di sollecitazione meccanica non sono paragonabili a quelli del metallo. I servocomandi sono stati scelti (almeno i tre da 13 kg/cm) con ingranaggi in metallo onde evitare la rottura dei denti a causa dell’elevato sforzo cui vengono sottoposti in condizioni di massima estensione e carico. Il braccio non utilizza cuscinetti a sfere nei punti di articolazione, poiché non sarebbero giustificati dal carico gestibile.
Le ganasce della pinza sono sincronizzate nel movimento l’una con l’altra grazie alla dentatura presente in corrispondenza del punto in cui sono imperniate. Il loro azionamento avviene mediante un mini servo e un sistema di leve che permette di esercitare una pressione massima di circa 160÷170 g (@5,5V) in chiusura.

L’elettronica di controllo

Passiamo adesso alla parte elettronica del sistema, che, lo precisiamo, è un optional e potete scegliere a vostra discrezione: nell’applicazione qui descritta, il controllo del braccio viene affidato ad Arduino UNO REV3 (o Fishino UNO) equipaggiata con lo shield Octopus, specifico per la gestione dei servocomandi. Questo shield, compatibile con le schede Arduino e con la nostra Fishino Uno, impiegando un minimo di risorse hardware permette di avere a disposizione ben 16 uscite in PWM e 16 ingressi/uscite digitali aggiuntivi. Non solo, è possibile impilare fino a un massimo di 8 shield Octopus (ma nel nostro braccio robotico una basta e avanza…) consentendo di gestire con Arduino e Fishino fino a 128 I/O digitali e 128 uscite PWM aggiuntive; il tutto reso completamente trasparente all’utilizzatore tramite una libreria specifica denominata Octopus, dotata di alcune particolarità che ne rendono semplicissimo l’utilizzo.
Lo shield serve perché le schede Arduino e compatibili hanno una ridotta quantità di uscite disponibili, specie di I/O cui si può assegnare il PWM, indispensabili al comando dei servo. Ora, è vero che una Arduino/Fishino UNO dispone di sei uscite PWM e permette il pilotaggio di altrettanti servocomandi, però gli I/O cui sono associati potrebbero servire per altre applicazioni, quindi ci è sembrato giusto dedicare lo shield di espansione Octopus che (sfruttando la sola connessione I²C-Bus di Arduino) si occupa da solo del controllo dei servocomandi. Inoltre Octopus non si limita a fornire i segnali di comando dei servo, ma eroga anche l’alimentazione a 5 V con tutta la corrente che i servocomandi da 13 kg/cm richiedono per funzionare. Senza shield avremmo comunque dovuto cablare a parte massa e +5V dei servo, ovvero creare un semplice shield capace di fornire l’alimentazione ai servo, quindi, alla fine ci è sembrato comodo adottare una scheda già pronta per il controllo dei servocomandi e per provvedere all’alimentazione in maniera indipendente, tramite un proprio alimentatore.
Realizzazione pratica
Bene, spiegato il braccio possiamo passare a vedere come costruirlo: tutte le parti occorrenti sono disponibili in kit di montaggio, in plexiglass tagliato a laser, con tanto di accessori per il montaggio come viti, bulloni ecc. Tuttavia nulla vieta di realizzarle da sè utilizzando, però, sempre materiale plastico e magari con la stampa 3D.
Ad ogni modo, una volta in possesso di tutte le parti componenti la meccanica si parte assemblando la base d’appoggio con la ralla e aggiungendo a questa il mozzo (hub) del servocomando che aziona la rotazione del braccio sulla base. L’hub in plastica in dotazione al servo va fissato mediante 4 viti autofilettanti 2,5×12 complete di rondella piana 3×6 (le viti non devono essere strette a fondo in modo da consentire il corretto allineamento dell’hub con il perno del servo di rotazione che verrà montato più avanti).
Sistemata la base d’appoggio passate ad assemblare il braccio, iniziando con la base rotante: prendete la spalla destra in plexiglass da 5 mm, alla quale dovete fissare il servo da 13 kg/cm con 4 viti M4x14 TCEI e 4 dadi M4 autobloccanti e di seguito infilare il cavetto nell’asola indicata. Montate anche sulla spalla opposta (SX) un servo analogo (interponendo però tra i due elementi 4 distanziali in ABS 4×4 mm) fissandolo con 4 viti M4x18 TCEI e 4 dadi autobloccanti M4. Anche in questo caso dovete infilare il cavetto del servo nell’apposita asola della spalla del robot.

Poi assemblate la parte bassa del braccio tramite le viti e i distanziali a colonnina esagonale, fissandone poi un fianco al mozzo del servocomando da 13 kg/cm montato sulla spalla, ottenendo l’insieme visibile nella figura.
Ora prendete i due elementi “braccio 2” in plexiglass da 3 mm e uniteli mediante viti M3x8 TB a croce complete di rondelle piane 3×6 e 2 distanziali esagonali F/F M3x15, ottenendo un blocco compatto. Avete così realizzato l’avambraccio, che poi unirete alla prima porzione del braccio e all’asta di rinvio. Prendete quindi questa asta in plexiglass da 3 mm e fissate l’estremità inferiore alle leva del servo corrispondente, il cui lato opposto andrà collegato tramite l’apposito hub al servocomando corrispondente (interponendo delle rondelle piane 3×6 mm). A questo punto applicate il sostegno intermedio della base rotante e in esso introducete l’asse di rotazione della parte iniziale del braccio, sul quale appoggeranno anche i mozzi dei due servo da 13 kg/cm contrapposti e la leva di azionamento dell’asta di rinvio che comanderà l’avambraccio.

Prima di fissare il tutto alla ralla, bisogna quantomeno aver completato la struttura essenziale del braccio, incernierando l’avambraccio alla prima porzione del braccio e applicando l’asta di rinvio e il bilanciere. Applicate quindi la base girevole con la prima parte del braccio e l’asta di rinvio, alla ralla, utilizzando le apposite viti M4 da introdurre dal basso nei fori della parte superiore della ralla e introducendole poi nei dadi M4 che avrete preventivamente incastrato nelle apposite sedi a croce ricavate nella parte inferiore della spalla o base girevole. A questo punto bisogna assemblare il raccordo (polso) tra avambraccio e pinza, incernierarlo tramite le boccole in plastica (si utilizzano dei distanziali) alla parte finale dell’avambraccio e all’asta di rinvio che parte dal bilanciere del gomito e che permetterà di sollevare e abbassare il raccordo stesso. Nell’interno del polso dovrete collocare, fissandolo come previsto, il piccolo servo che ruoterà la pinza.


Al polso va poi applicata la pinza con il suo azionamento e il relativo servocomando, che va accoppiato mediante la leva in dotazione al servo stesso e l’asta di rinvio che agirà su una delle due ganasce; questa ganascia andrà ingranata nell’altra prima di chiudere la pinza con le apposite viti 3MA, in modo da ottenere un insieme stabile.
La pinza, parte terminale del braccio robotico, può essere orientata in orizzontale o in verticale.

Utilizzo

Una volta completato il braccio robotico, al fine di garantirne la necessaria stabilità (soprattutto in condizioni di massima estensione e con eventuale carico) si rende necessario il fissaggio della base al piano di appoggio mediante viti o ventose. In alternativa è possibile contrastare la tendenza al ribaltamento in condizioni estreme applicando un contrappeso con adeguata massa in corrispondenza della board di controllo.


L’elemento di sostegno in plexiglass da 5 mm, presente tra gli hub dei due servo che azionano il braccio, permette di vincolare la spalla del braccio (il perno di alluminio) alla base di appoggio riducendo notevolmente le sollecitazioni che altrimenti graverebbero sui perni dei servo stessi.
Notate che siccome ad ogni accensione ciascun servo riporta rapidamente il proprio perno in posizione centrale, prima di spegnere il sistema conviene sempre posizionare gli elementi del braccio in modo che i servo siano a riposo; diversamente, il brusco riposizionamento all’accensione può sollecitare eccessivamente la meccanica e danneggiarla a lungo andare. Quanto all’elettronica, ricordate che il controller Octopus, essendo una periferica I²C-Bus, come tutte le periferiche del genere va indirizzata per assicurare l’univocità dei comandi diretti a ciascuno shield; allo scopo prevede tre jumper da impostare diversamente da uno shield all’altro, che consentono 8 combinazioni logiche.
Scelto l’indirizzo, bisogna riportarlo nella libreria richiamata dal firmware.

Listato

#include <Wire.h>
#include <Octopus.h>
#include <EEPROM.h>

//octopus output
#define basePin 0
#define shoulderPin 1
#define elbowPin 2
#define wristPin 3
#define gripperPin 4

int durata =15;
int frequenza = 45;
int gradi_servo = 180;
/////////////////////////////////////////////////////////
void setup(void)
{
  Wire.begin();
  Wire.setClock(100000);
  Octopus.setPWMFreq(frequenza);
}
//*******************************************************

void loop(void)
{
  int i;
  for (i=50; i<130; i++){
   Octopus.analogWrite(gripperPin, to(i));
   delay(durata);
  }

for (i=130; i>50; i–){
   Octopus.analogWrite(gripperPin, to(i));
   delay(durata);
   }
}

uint16_t to(int gradi)
{
float ms_min;
float ms_max;
float ms_gradi;
float valore_PWM;

ms_min = 120; //Rappresenta il valore PWM
//pari a 1 ms (posizione 0°)
ms_max = 470; //Rappresenta il valore PWM
//pari a 1 ms (posizione 180°)
ms_gradi = (ms_max – ms_min) / gradi_servo;
valore_PWM = ms_min + (ms_gradi * gradi);
return (valore_PWM);
}

 

Nel Listato proponiamo un semplice sketch di test che nella sezione Octopus output riporta l’assegnazione delle uscite dello shield (da non confondere con i pin di Arduino) ai servo delle porzioni di braccio; potete cambiare uscite ma dovete specificarle nello sketch; in esso, base è la spalla, wrist il polso ecc. Il loop esegue l’apertura e chiusura della pinza (gripper) facendo muovere in senso orario e antiorario alternativamente il servo corrispondente, con un’escursione tra 50 e 130°, con un periodo pari a 15 e una frequenza di valore 45.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Main Menu