Braccio robotico con Arduino
Questa risorsa descrive come realizzare un braccio robotico comandato con Arduino.
Descrizione
modificaIl 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.
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 aggiuntivo
modificaPer 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 Term
modificaIl software non richiede installazione essendo un singolo file eseguibile.
- Nella prima finestra che compare si deve selezionare
Serial
e la corrispondente porta seriale a cui è connesso Arduino; - Dopodiché selezionando il menù
Setup
e la prima voceTerminal...
bisogna spuntare il flagLocal 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 montaggio
modificaDi seguito lo schema di montaggio nella sua parte elettrica. Si noti che i cinque servomotori hanno bisogno di un'alimentazione aggiuntiva.
Schema elettrico
modificaPer 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.
Codice
modificaIl codice è stato diviso in tre parti per una sua migliore comprensione.
Inizializzazione
modificaIn 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;
Controllo
modificaQuesto è 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 suggerite
modificaPossibili 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.
Note
modifica- ↑ Il software Tera Term, è scaricabile presso questo indirizzo.