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);
    1. 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);
    2. 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);
    3. 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à.

 

ozio_gallery_jgallery

Codice Sorgente:

 

 

ZappocoS - 10 febbraio/2 aprile 2017