Braccio robotico con Arduino

laboratorio
Braccio robotico con Arduino
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 2
Avanzamento Avanzamento: laboratorio completa al 100%.

Questa risorsa descrive come realizzare un braccio robotico comandato con Arduino.

DescrizioneModifica

Il sistema è composto da cinque servo motori che pilotano mano, polso, gomito spalla e base, azionati con opportuni comandi provenienti dal computer.

Di seguito i comandi per pilotare il braccio robotico.

Comandi
Comando Azione
w Spalla indietro
s Spalla avanti
a Base a destra
d Base a sinistra
t Gomito su
g Gomito giu
f Polso verso sinistra
h Polso verso destra
z Apri mano
x Chiudi mano

Software aggiuntivoModifica

Per il corretto funzionamento di questo programma è necessario installare un software aggiuntivo, l'emulatore di terminale Tera Term[1]. Diversamente, utilizzando il sistema di connessione con la porta seriale dell'IDE di Arduino, per ogni movimento di un grado, si è costretti a premere il tasto Invio, cosa che risulterebbe molto scomoda.

Naturalmente, essendo un software che gestisce la porta seriale, va disattivato quando si carica il codice su Arduino per evitare conflitti di gestione.

Impostazioni di Tera TermModifica

Il software non richiede installazione essendo un singolo file eseguibile.

  1. Nella prima finestra che compare si deve selezionare Serial e la corrispondente porta seriale a cui è connesso Arduino;
  2. Dopodiché selezionando il menù Setup e la prima voce Terminal... bisogna spuntare il flag Local echo, così da inviare tutti i dati ricevuti alla porta seriale precedentemente selezionata.

Questo è tutto. Arduino (dove il programma è già stato caricato in precedenza) riceverà tutto quello che viene digitato sulla tastiera.


Schema di montaggioModifica

Di seguito lo schema di montaggio nella sua parte elettrica. Si noti che i cinque servomotori hanno bisogno di un'alimentazione aggiuntiva.

Schema elettricoModifica

 
Singola batteria18650 3,7 V agli ioni di litio.

Per alimentare il braccio è richiesta un'alimentazione di   e  .

Dato che con le batterie al litio si riescono a raggiungere   ma si sfora con la tensione a  , per abbassarla a   bisogna utilizzare lo stabilizzatore LM7806C che regola la tensione in uscita a  , ma la corrente a  , pertanto occorre collegarne due in parallelo per ottenere una corrente pari a  .

Nella rete di alimentazione, sono stati inseriti un diodo e due condensatori, i quali svolgono la seguente funzione:

  • il diodo serve per evitare anomalie in caso di batterie inserite con la polarità errata;
  • il primo condensatore serve per evitare problemi ai due stabilizzatori in caso di sbalzi di tensione;
  • il secondo condensatore serve per proteggere i servomotori se ci sono degli sbalzi di tensione nel circuito precedente.

CodiceModifica

Il codice è stato diviso in tre parti per una sua migliore comprensione.

InizializzazioneModifica

In questa sezione del codice vengono specificate tutte le costanti e variabili globali e i tasti che si desidera utilizzazione, per la movimentazione del braccio robotico. Va inserita nella stessa directory del programma principale, col nome inizializzazione.h.

/*
 * Variabili globali per il controllo di servomotori del braccio robotico tramite PC
 * CC BY-SA 4.0
 * Nicolo' Bertuccioli, 4A/EN, a.s. 2021/2022
 * ITIS "Enrico Mattei", Urbino
 * 
 */

// Nomina dei servo
Servo mano;
Servo polso;
Servo gomito;
Servo spalla;
Servo base;

// Pedinatura
#define PinMano  11
#define PinPolso 10
#define PinGomito 9
#define PinSpalla 6
#define PinBase 5

// Tasti per la movimentazione
// (P incrementa, M decrementa)
const char keymanoP   = 'x';
const char keymanoM   = 'z';
const char keypolsoP  = 'h'; 
const char keypolsoM  = 'f';
const char keygomitoP = 't';
const char keygomitoM = 'g';
const char keyspallaP = 'w';
const char keyspallaM = 's';
const char keybaseP   = 'd';
const char keybaseM   = 'a';

// Angoli di partenza (in gradi)
int angpolso;
int angmano;
int anggomito;
int angspalla;
int angbase;

//delay
int Delay = 10;

// Acquisizione dei tasti premuti
char tastiera;

ControlloModifica

Questo è il cuore del codice, dove viene movimentato il braccio robotico.

/*
 * Controllo di servomotori per braccio robotico tramite PC
 * CC BY-SA 4.0
 * Nicolo' Bertuccioli, 4A/EN, a.s. 2021/2022
 * ITIS "Enrico Mattei", Urbino
 * 
 */

#include <Servo.h>
#include "inizializzazione.h"

void setup() {
  // inizializzazione della porta seriale
  Serial.begin(9600);
  mano.attach(PinMano);
  polso.attach(PinPolso);
  gomito.attach(PinGomito);
  spalla.attach(PinSpalla);
  base.attach(PinBase);
}

void loop() {
  if(Serial.available()){
    tastiera = Serial.read();

    switch (tastiera) {     
      case keymanoP:              // movimentazione mano
        mano.write(angmano++);
        break;
      case keymanoM:
        mano.write(angmano--);
        break;      
      case keypolsoP:             // movimentazione polso
        polso.write(angpolso++);
        break;
      case keypolsoM:
        polso.write(angpolso--);
        break;
      case keygomitoP:            //movimentazione gomito
       gomito.write(anggomito++);
       break;
      case keygomitoM:
       gomito.write(anggomito--);
       break;
      case keyspallaP:            //movimentazione spalla
       spalla.write(angspalla++);
       break;
      case keyspallaM:
       spalla.write(angspalla--);
       break; 
      case keybaseP:              //movimentazione base
       base.write(angbase++);
       break;
      case keybaseM:
       base.write(angbase--);
       break;
      default:                    // ignora ogni altro comando        
        // svuota la cache
        Serial.flush();
        break;
    }
    delay(Delay);
  }
}

Espansioni suggeriteModifica

Possibili espansioni di questo progetto sono il controllo remoto tramite joystick, via Bluetooth o Wi-Fi.

Un'altra possibilità è dotare il sistema di intelligenza artificiale per eseguire comandi prestabiliti (come all'interno di una catena di montaggio), o intervenire autonomamente in determinate situazioni che richiedono il suo intervento.

NoteModifica

  1. Il software Tera Term, è scaricabile presso questo indirizzo.