Pit Braccio V2
PitBraccio V2 è l'evoluzione di PitBraccio un esempio di braccio meccanico comandato tramite Arduino via Blueetooth.
Il braccio meccanico ancora non c'è, per il momento ci sono i 6 servomotori di un braccio con 6 gradi di libertà.
Al momento l'interfaccia è tra Processing che gira su PC e Arduino collegato alla porta seriale dello stesso.
Po si passerà al controllo tramite Smartphone Android che sarà usato come telecomando di controllo.
Cosa serve:
- Arduino
- Scheda Pit HC-05 - con Modulo HC-05 (negli sviluppi futuri);
- Servomotori MG996R
- Cavetti
- Display a cristalli liquidi completo di interfaccia I2C;
- Smartophone Android (negli sviluppi futuri);
- Display a cristalli liquidi completo di interfaccia I2C;
- Processing
- PC
Preparativi (come nel precedente esempio):
- Installare Processing completo del Mode Android (vedasi l'interessantissima e completa guida "Sviluppare app con Processing" a cura dell’ing. MIRCO SEGATELLO - su Elettronica IN fine 2015 - Inizio 2016)
Software lato Processing:
- PitBraccio è stato elaborato modificando l'esempio BluetoothCursors - Ketai Library for Android: http://KetaiProject.org di Daniel Sauter
- Sono state implementate delle routine per disegnare il braccio meccanico che a sua volta parte dal disegno di un'asta (UI_Braccio)
- Sono state implementate delle routine per il controllo di arduino - si è in particolare creata una piccola libreria (UI_PitButtonSliderLib) che contiene tre oggetti Pulsante (Button), interruttore (Switch) e cursore (Slider) per il controllo dei servomotori
Software lato Arduino:
- PitBraccio sul lato Arduino è un programma molto semplice la cosa da vedere è la modalità di lettura dalla Seriale e la traduzione del portocollo (PitProto) con cui vengono passati i comandi
- Il protocollo utilizzato rappresenta il comandi ad Arduino attraverso stringhe nella forma 1 3 4 (0 000 0000);
- il primo carattere di controllo (CTR - HEADER) identifica che si stà passando un comando (nel nostro caso la lettera "Z" - si puo scegliere evidentemente qualsiasi carattere che normalmente non viene utilizzato nella comunicazione);
- i tre carattri successivi costituiscono l'ID del componenti - nel nostro caso:
- S01 (Servo dellla spalla del braccio);
- S02 (Servo dellla gomito del braccio);
- S03 (Servo dellla polso - definisce l'inclinazione della mano);
- S04 (Servo delle dita - apertura della pinza);
- S05 (Servo dellla mano definisce la rotazione della pinza);
- S06 (Servo del busto definisce la rotazione alla base del braccio);
- L01 (Stato del controllo movimento pinza orizzontale);
- L03 (Stato del controllo movimento guidato - muove i due servomotori 1 e 2 spalla e gomito in modo da ottenere un movimento pseudo orizzontale o pseudo verticale);
- i quattro caratteri successivi costituicono il dato/parametro (nel nostro caso 0000 o 0001 per identificare lo stato dei led - acceso/spento, 0000 - 0180 - l'angolo cui posizionare i rispettivi servomotori);
- Attenzione ogni volta che viene identificato il codice di controlllo (CTR) Arduino legge sempre 7 caratteri dalla seriale e quindi come si vede ad esempio per i led per passare lo stato 0/1 si usa una stringa di 4 caratteri 0000/0001. Volendo questa parte puo essere resa più funzionale ma per il nostro scopo funziona egregiamente anche così.
// --------------------------------
// Protocollo comando (PitProto)
//
// D
// C A
// T I T
// R D O
//
// 0 000 0000
// --------------------------------
String ItoS (int ii, int nn)
{
String gg;
int ll;
gg.concat(ii);
gg = " " + gg;
ll = gg.length();
gg = gg.substring(ll - nn,ll);
return gg;
}
void ReadPitProtoCMD ()
{
if(Serial.available() > 0)
{
char CDummy;
CDummy = Serial.read();
val = CDummy;
Serial.print (CDummy);
if (CDummy == CT_PitProto)
{
ID_PitProto = "";
int i = 0;
//delay (10);
while (i <= 2)
{
if(Serial.available() > 0)
{
CDummy = Serial.read();
//if(Serial.available() > 0)
//{
ID_PitProto += CDummy;
i++;
//}
}
}
DT_PitProto = "";
i = 0;
delay (10);
while (i <= 3)
{
if(Serial.available() > 0)
{
CDummy = Serial.read();
//if (isAlphaNumeric(CDummy))
//{
DT_PitProto += CDummy;
i++;
//}
}
}
Serial.println ( "ID_PitProto : " + ID_PitProto );
Serial.println ( "DT_PitProto : " + DT_PitProto );
}
}
}
void DeCodeBT (String S)
{
String Cod000;
Cod000 = S.substring(2,5);
CodCM = S.substring(0,2);
IntCM = Cod000.toInt();
}
Circuito ed elettronica:
- I servomotori sono alimentati separatamante in quanto la scheda Arduino non è in grado di alimentarli - al momento si stà usando un vecchio alimentatore per pc in grado di dare 5 V e 3 A. Come si vede dallo schema Fritzing. La massa (GND) viene messa in comune mentre le alimentazioni delle varie parti sono autonome
Il braccio in funzione:
- Il braccio originariamente doveva essere a 6 gradi di libertà ma uno dei motori non ha una coppia sufficiente e quindi è stato tolto ottendeno un braccio a 5 gradi di libertà.
Codice Sorgente:
ZappocoS - 10 febbraio/2 aprile 2017