Hacking di un braccio robot con Arduino

braccio robot

Trasformiamo un braccio robot con funzionalità davvero ridotte, in un braccio robot controllabile via software mediante l’utilizzo di Arduino

Vediamo come trasformare un braccio robot con funzionalità davvero ridotte, in un braccio robot controllabile via software mediante l’utilizzo di Arduino.

Il braccio robot in questione è quello del kit “Edge robotic arm”, esso è dotato di ben 5 motori in grado di muovere le diverse articolazioni del braccio; facendo un’analogia con un braccio umano possiamo dire che la parte meccanica si compone di: una mano, un polso, un gomito, una spalla ed una base per la rotazione dell’intero sistema. La base può ruotare di 270 gradi, mentre polso, gomito e spalla possono ruotare rispettivamente di 120, 300 e 180 gradi; alla mano (pinza) sono consentiti i soli movimenti di apertura e chiusura. Così come viene fornito il kit base (acquistabile per circa 40 euro), è dotato di 5 motori semplici DC, dove per “semplici” intendo dire che non si tratta di motori servo o stepper; i comandi ai motori vengono dati tramite manualmente agendo sugli switch presenti sul modulo di comando direttamente collegato al braccio meccanico.

Tornando a quanto vogliamo realizzare diciamo subito che dovendo utilizzare un sistema di comando che fa uso di microcontrollore, possiamo scollegare gli switch per il comando manuale cercando di recuperare comunque i fili che vanno ai motori in maniera tale da agevolare poi le connessioni tra motori e sistema di controllo. Il sistema più adatto per pilotare motori del genere, è quello di utilizzare un ponte H, ciò consentirebbe di controllare più accuratamente la rotazione in senso orario ed antiorario di ciascun motore. Possiamo costruire da noi dei ponti H, oppure (semplificando il tutto) possiamo ricorrere a degli integrati che effettuano tale funzione; tra questi ci sono gli L293 e gli SN754410.

Mediante un ponte H possiamo sostanzialmente controllare il verso della corrente circolante nei rotori dei motorini e quindi stabilire il verso di rotazione, tenere il motore a folle o frenarlo. Per questo progetto la scelta è caduto sull’integrato SN754410, tale IC semplifica notevolmente le cose in quanto ci consente di pilotare 2 motori; ogni integrato ha 4 input (2 per ogni motore, più due ENABLE) agendo sui quali si ha il controllo completo dei movimenti di ciascun motore; essendo il braccio robot dotato di 5 motori ovviamente utilizzeremo 3 integrati.

Quello che faremo è quindi collegare gli input di questi tre chip agli output di Arduino in maniera tale da poter gestire i motori via software, in particolare vediamo come effettuare i collegamenti al SN754410 dopo aver montato il circuito su bread board:

Shoulder motor
chip 1, pin 1 to Arduino pin 14 (Analog pin o)
chip 1, pin 2 to Arduino pin 15 (Analog pin 1)
chip 1, pin 7 to Arduino pin 16 (Analog pin 2)
Base motor
chip 1, pin 9 to Arduino pin 2
chip 1, pin 10 to Arduino pin 3
chip 1, pin 15 to Arduino pin 4
Elbow motor
chip 2, pin 1 to Arduino pin 8
chip 2, pin 2 to Arduino pin 9
chip 2, pin 7 to Arduino pin 10
Wrist motor
chip 2, pin 9 to Arduino pin 5
chip 2, pin 10 to Arduino pin 6
chip 2, pin 15 to Arduino pin 7
Hand motor
chip 3, pin 9 to Arduino pin 11
chip 3, pin 10 to Arduino pin 17 (Analog pin 3)
chip 4, pin 15 to Arduino pin 18 (Analog pin 4)

Rispettare lo schema di collegamento esposto sopra non è l’unica possibilità, però se rispettiamo tale schema possiamo utilizzare direttamente lo sketch Arduino riportato di seguito (presente anche a questo link) senza effettuare ulteriori modifiche. Ad ogni modo nulla di complicato, anzi il tutto potrebbe essere ancora semplificato (ad esempio con l’utilizzo di registri a scorrimento si potrebbe ridurre il numero di SN754410 variando opportunamente lo sketch).

int baseMotorEnablePin = 2;
int baseMotorPin1 = 3;
int baseMotorPin2 = 4;
int shoulderMotorEnablePin = 14;
int shoulderMotorPin1 = 15;
int shoulderMotorPin2 = 16;
int elbowMotorEnablePin = 8;
int elbowMotorPin1 = 9;
int elbowMotorPin2 = 10;
int wristMotorEnablePin = 5;
int wristMotorPin1 = 6;
int wristMotorPin2 = 7;
int handMotorEnablePin = 11
int handMotorPin1 = 17;
int handMotorPin2 = 18;
void setup() {
// set the motor pins as outputs:
// set all chips to enabled state
pinMode(baseMotorPin1, OUTPUT);
pinMode(baseMotorPin2, OUTPUT);
pinMode(baseMotorEnablePin, OUTPUT);
digitalWrite(baseMotorEnablePin, HIGH);
pinMode(shoulderMotorPin1, OUTPUT);
pinMode(shoulderMotorPin2, OUTPUT);
pinMode(shoulderMotorEnablePin, OUTPUT);
digitalWrite(shoulderMotorEnablePin, HIGH);
pinMode(elbowMotorPin1, OUTPUT);
pinMode(elbowMotorPin2, OUTPUT);
pinMode(elbowMotorEnablePin, OUTPUT);
digitalWrite(elbowMotorEnablePin, HIGH);
pinMode(wristMotorPin1, OUTPUT);
pinMode(wristMotorPin2, OUTPUT);
pinMode(wristMotorEnablePin, OUTPUT);
digitalWrite(wristMotorEnablePin, HIGH);
}
void loop() {
/*
// SET either one to HIGH to turn the motor on.
// e.g.
digitalWrite(baseMotorPin1, LOW);
digitalWrite(baseMotorPin2, HIGH);
*/
digitalWrite(baseMotorPin1, LOW);
digitalWrite(baseMotorPin2, LOW);
/*
// more motors here added.
digitalWrite(shoulderMotorPin1, LOW);
digitalWrite(shoulderMotorPin2, LOW);
digitalWrite(elbowMotorPin1, LOW);
digitalWrite(elbowMotorPin2, LOW);
digitalWrite(wristMotorPin1, LOW);
digitalWrite(wristMotorPin2, LOW);
*/
}

Possiamo alimentare il tutto con le batterie in dotazione nel kit (4 batterie serie ‘D’) facendo attenzioni a collegare gli integrati SN754410 e Arduino alla stessa GND. Terminati i collegamenti il nostro braccio robot sarà pronto per essere programmato per specifici taks; ricordiamoci che il peso massimo sollevabile resta quello nominale di 100 grammi. Se volessimo pilotare il tutto da PC in tempo reale dobbiamo solo modificare lo sketch predisponendolo alla lettura dei valori da USB.

Sarebbe interessante, ad esempio,dar vita ad un sistema completo in cui vi sia l’interazione di più bracci robot coordinati da un’unita centrale (PC) per lo svolgimento di tasks complessi. Si tratta solo di un esempio, in realtà avendo a disposizione un robot pilotato da un microcontrollore, sarà compito della nostra fantasia trovare le applicazioni più interessanti.

Arduino è disponibile da Farnell

STAMPA     Tags:,

6 Comments

  1. Emanuele 30 aprile 2012
  2. divivoma 13 dicembre 2011
  3. divivoma 13 dicembre 2011
  4. divivoma 13 dicembre 2011
  5. Fabrizio87 14 dicembre 2011
  6. Emanuele 3 ottobre 2012

Leave a Reply