braccio robot sketch finale – quarta parte

In questo ultimo articolo dedicato al braccio robot leggerai come realizzare la versione finale del progetto di Enrico.

braccio robot sketch

Ho voluto dedicare spazio alla fase progettuale del braccio robot per chiarire che un progetto come questo non lo si realizza in pochi giorni, occorre una accurata fase progettuale e dei test di funzionamento che a volte possono risultare anche molto simili al risultato finale ma che solo attraverso i quali puoi avere un’idea precisa della fattibilità del tuo progetto.

Di tutti i miei progetti pubblico solo il risultato finale senza annoiarti con gli studi e le fasi di test che mi portano a realizzare il progetto stesso.

Tornando al braccio robot di Enrico puoi leggere i precedenti articoli introduttivi:

E sei quindi giunto all’ultimo articolo dedicato al progetto.

Il video del progetto arduino

Solitamente il video lo lascio per ultima chicca in ogni articolo, ma in questo caso preferisco mostrarti il video prima di descrivere lo sketch perché così ti sarà più chiaro il funzionamento dello sketch:

Braccio robot sketch

Questo lo sketch realizzato da Enrico:

#include <Servo.h>

Servo mioservo1;
Servo mioservo2;
Servo mioservo3;
Servo mioservo4;
Servo mioservo;
int angolo =0;

void setup() {
  mioservo.attach(8);
  mioservo1.attach(9); 
  mioservo2.attach(10);
  mioservo3.attach(11);
  mioservo4.attach(12);
}

void loop() {
   //Posizione iniziale//
   mioservo.write(155);
   mioservo1.write(85);
   mioservo2.write(77);
   mioservo3.write(75);
   mioservo4.write(5);
   delay(2000);

   // inizio presentazione movimenti//
   mioservo1.write(85);
   delay(2000);
   mioservo3.write(155);
   delay(2000);
   mioservo3.write(0);
   delay(2000);
   mioservo3.write(75);
   delay(2000);
   mioservo4.write(150);
   delay(1000);
   mioservo4.write(5);
   delay(1000);

   for(angolo = 77; angolo < 150; angolo += 1)  { 
    mioservo2.write(angolo);
    delay(20);
   }
   delay(2000);
   for(angolo = 150; angolo > 77; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(20);
   }
   delay(2000);
   mioservo3.write(30);
   delay(2000);
   mioservo2.write(26);
   delay(2000);
   mioservo4.write(150);
   delay(1000);
   mioservo4.write(5);
   delay(3000);
   
   // dimostrazione di rotazione//
   for(angolo = 150; angolo > 120; angolo -= 1) { 
    mioservo.write(angolo);
    delay(20);
   } 
   delay(500);
 
   for(angolo = 120; angolo > 90; angolo -= 1) { 
    mioservo.write(angolo);
    delay(20);
   } 
   delay(500);
 
   for(angolo = 90; angolo > 60; angolo -= 1) { 
    mioservo.write(angolo);
    delay(20);
   }
   delay(500);
 
   for(angolo = 60; angolo > 30; angolo -= 1) { 
    mioservo.write(angolo);
    delay(20);
   }
   delay(500);
 
   for(angolo = 30; angolo > 1; angolo -= 1) { 
    mioservo.write(angolo);
    delay(20);
   }
   delay(2000);
  
   for(angolo = 155; angolo > 35; angolo -= 1) { 
    mioservo.write(angolo);
    delay(40);
   }
   delay(2000);
   
   for(angolo = 30; angolo < 75; angolo += 1) { 
    mioservo3.write(angolo);
    delay(50);
   }

   for(angolo = 26; angolo < 150; angolo += 1) { 
    mioservo2.write(angolo);
    delay(10);
   }
   delay(1000);

   for(angolo = 85; angolo < 145; angolo += 1) { 
    mioservo1.write(angolo);
    delay(50);
   }

   for(angolo = 35; angolo < 155; angolo += 1) { 
    mioservo.write(angolo);
    delay(30);
   }
   delay(1000);

   mioservo4.write(150);
   delay(1000);
   mioservo4.write(5);
   delay(1000);

   // giro con alzamento braccio//
   for(angolo = 145; angolo > 125; angolo -= 1) { 
    mioservo1.write(angolo);
    delay(40);
  }
  for(angolo = 155; angolo > 125; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(40);
  }
  for(angolo = 150; angolo > 100; angolo -= 1) { 
    mioservo.write(angolo);
    delay(60);
  }
  for(angolo = 125; angolo > 105; angolo -= 1) { 
    mioservo1.write(angolo);
    delay(40);
  }
    
  for(angolo = 125; angolo > 100; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(40);
  }
  for(angolo = 100; angolo > 50; angolo -= 1) { 
    mioservo.write(angolo);
    delay(25);
  }
  for(angolo = 105; angolo > 85; angolo -= 1) { 
    mioservo1.write(angolo);
    delay(40);
  }
  for(angolo = 100; angolo > 75; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(40);
  }
  for(angolo = 50; angolo > 5; angolo -= 1) { 
    mioservo.write(angolo);
    delay(10);
  }
  delay(500);
  
  for(angolo = 5; angolo < 150; angolo += 1) { 
    mioservo.write(angolo);
    delay(30);
  }
  delay(2000);

  // riposizionamento //

  mioservo.write(150);
  mioservo1.write(85);
  mioservo2.write(35);
  mioservo3.write(35);
  mioservo4.write(5);
  
  // recupero pezzo //
  // angolo di presa pezzo //
  
  for(angolo = 150; angolo > 30; angolo -= 1)  { 
    mioservo.write(angolo);
    delay(25);
  }
  delay(500);
  for(angolo = 35; angolo < 75; angolo += 1) { 
    mioservo3.write(angolo);
    delay(25);
  }
  delay(500);
  for(angolo = 35; angolo < 150; angolo += 1) { 
    mioservo2.write(angolo);
    delay(25);
  }
  
  // abassamento braccio //
  for(angolo = 85; angolo < 149; angolo += 1) { // angolo abbassa// 
    mioservo1.write(angolo);
    delay(40);
  }
  delay(500);
  
  mioservo4.write(150);
  delay(1000);
  for(angolo = 75; angolo < 95; angolo += 1) { 
    mioservo3.write(angolo);
    delay(30);
  }
  delay(500);
  mioservo4.write(16);   // gradi presa  //
  delay(500);

  // rialzamento braccio //
  for(angolo = 149; angolo > 105 ; angolo -= 1) { 
    mioservo1.write(angolo);
    delay(30);
  }
  for(angolo = 150; angolo > 120; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(30);
  }
  for(angolo = 95; angolo > 80; angolo -= 1) { 
    mioservo3.write(angolo);
    delay(30);
  }
  for(angolo = 120; angolo > 100; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(40);
  }
  for(angolo = 80; angolo > 50; angolo -= 1) { 
    mioservo3.write(angolo);
    delay(30);
  }
  for(angolo = 100; angolo > 70; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(40);
  }
  for(angolo = 50; angolo > 35; angolo -= 1) { 
    mioservo3.write(angolo);
    delay(30);
  }
  
  // rotazione //
  for(angolo = 30; angolo < 128; angolo += 1) { 
    mioservo.write(angolo);
    delay(30);
  }
  // abbassamento pezzo //
  
  delay(1000);
  for(angolo = 70; angolo < 100; angolo += 1) { 
    mioservo2.write(angolo);
    delay(40);
  }
  for(angolo = 35; angolo < 100; angolo += 1) { 
    mioservo3.write(angolo);
    delay(30);
  }
  for(angolo = 100; angolo < 130; angolo += 1) { 
    mioservo2.write(angolo);
    delay(40);
  }
  for(angolo = 105; angolo < 130; angolo += 1) { 
    mioservo1.write(angolo);
    delay(40);
  }
  delay(1000);
  mioservo4.write(150);
  delay(1000);

  for(angolo = 100; angolo > 35; angolo -= 1) { 
    mioservo3.write(angolo);
    delay(2);
  }
  for(angolo = 130; angolo > 85; angolo -= 1) { 
    mioservo1.write(angolo);
    delay(25);
  }
  for(angolo = 130; angolo > 33; angolo -= 1) { 
    mioservo2.write(angolo);
    delay(25);
  }
  delay(1000);
  mioservo4.write(5);
  delay(20000);
}

commentiamolo insieme per capire bene come si muove ogni singolo servo:

linea 001: includi la classe Servo.h;

linee 003-007: definisci i 5 oggetti Servo a cui colleghi ciascun movimento del braccio robot, io ti suggerisco di chiamare ciascun oggetto con il nome dell’articolazione ad es.: mano, polso, gomito, ecc.. ti sarà più semplice programmare i movimenti del braccio;

linea 004: definisci una variabile angolo che userai per definire gli angoli da far realizzare al braccio;

linee 011-015: definisci i pin a cui sono collegati i singoli servo;

linee 020-025: imposta la posizione iniziale del braccio dando ad ogni servo la posizione da assumere ed attendi 2 secondi che tutti abbiano raggiunto la posizione indicata;

linee 028-039: impartisci a ciascun servo la posizione da raggiungere aggiungendo dopo ogni movimento un tempo necessario al raggiungimento della posizione desiderata;

linee 041-044: partendo da un angolo di 77 gradi incrementi di un grado alla volta fino ai 155 gradi del servo2, attendendo 20 millisecondi per ciascun grado da raggiungere;

linee 046-049: esegui il medesimo movimento delle linee 041-044 ma al contrario, tornando alla posizione iniziale;

linee 051-058: posiziona i servo 2,3 e 4 alle posizioni indicate;

linee 061-064: partendo dal grado 150 fino al grado 120 posiziona myservo al grado desiderato, attendendo per ciascun grado 20 millisecondi per consentire al servo di raggiungerlo;

linee 067-116: esegui altri spostamenti per gli altri servo con uguale metodo variando solo gradi e servo da spostare;

linee 119-122: posiziona il servo4 prima al grado 150 e dopo un secondo al grado 5;

linee 124-168: usando i metodi che hai appreso sopra, nella parte di dimostrazione del movimento puoi adesso impartire al braccio robot il movimento necessario a ruotare il braccio e contemporaneamente a sollevarlo;

linee 170-177: imposta i gradi dei servo per riposizionare il servo;

linee 178-211: prepara il braccio ed esegui la presa dell’oggetto;

linee 213-241: solleva il braccio con il pezzo preso;

linee 243-247: fai ruotare il braccio da 30 gradi a 128 gradi in modo da posizionare il pezzo nella sede di destinazione;

linee 248-285: posiziona il braccio per lasciare il pezzo raccolto nella posizione ideale e lascia la presa riportando il braccio lontano dall’oggetto appena posizionato.

Compreso il funzionamento del braccio e dello sketch che lo controlla potrai facilmente gestire il software per realizzare tutti i percorsi che ti vengono in mente e per far fare al tuo braccio tutti i movimenti che vuoi o che ti servono nel tuo progetto.

Grazie Enrico per aver condiviso con tutti noi questo progetto !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/braccio-robot-sketch-finale-quarta-parte.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.