Strumenti Utente

Strumenti Sito


braccio_robotico

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
braccio_robotico [2021/07/16 19:50] – [Collaudo] adminbraccio_robotico [2023/03/07 08:23] (versione attuale) – [Collaudo] admin
Linea 1: Linea 1:
 +
 +
 +
 ====== Braccio Robotico ====== ====== Braccio Robotico ======
  
Linea 212: Linea 215:
 Per tutti i componenti punta da 0,8mm tranne che per: stripline, morsetto a vite, induttore, regolatore dove serve la punta da 1mm. Per tutti i componenti punta da 0,8mm tranne che per: stripline, morsetto a vite, induttore, regolatore dove serve la punta da 1mm.
  
-Ho usato la libreria servo e l'esempio 4 da [[https://forum.arduino.cc/t/serial-input-basics-updated/382007/3|qui]] per inviare i dati da monitor seriale. La scheda switching funziona e il regolatore senza dissipatore non scalda granché.+La scheda è stata collaudata usando un reostato come carico e 100mA di corrente e la tensione in uscita, regolata con l'aiuto del tester, a 5V. All'oscilloscopio osserviamo il ripple della tensione in uscita e la tensione al piedino Vout((scendendo sotto i 100mA il comportamento peggiora)): 
 + 
 +{{:regolatore_switching_oscilloscopio.jpeg?400|{{:regolatore_switching_oscilloscopio.jpeg?400|ripple della tensione in uscita e Vout sull'LM2576}} 
 + 
 + 
 +Si osserva un ripple di circa 20mV e il tipico andamento della tensione su Vout prodotta dalla commutazione del regolatore. 
 + 
 +===== Software ===== 
 + 
 + 
 +Ho usato la libreria servo e l'esempio 4 da [[https://forum.arduino.cc/t/serial-input-basics-updated/382007/3|qui]] per inviare i dati da monitor seriale. La scheda switching funziona e il regolatore senza dissipatore non scalda granché. Per calibrare ognuno dei servo si può usare {{ ::test_calibrazione_servo_braccio.zip |questo sketch}}. 
 + 
 +FIXME aggiustare i valori dopo la riparazione
  
 Range valori per i 5 attuatori: Range valori per i 5 attuatori:
Linea 221: Linea 236:
   * base pin 11: 80 sinistra 45°, 40 dritto, 0 45° a destra   * base pin 11: 80 sinistra 45°, 40 dritto, 0 45° a destra
  
 +Codice adattato da [[https://www.mauroalfieri.it/bricolage/posizionamento-braccio-robot.html#more-12400|qui]]:
 +
 +<code C>
 +/*  da https://www.mauroalfieri.it/bricolage/posizionamento-braccio-robot.html#more-12400
 +  aggiunto start-stop da seriale
 +  le posizioni vanno ricalibrate in base al nostro robot
 +  i movimenti sono rallentati usando la funzione goPos()
 + */
 +
 +#include <Servo.h>
 +
 +// per il range di valori vedi qui
 +// https://leonardocanducci.org/wiki/tp4/braccio_robotico#collaudo
 +Servo base;         // 1 0 - 180
 +Servo shoulder;     // 2 140 - 37
 +Servo elbow;        // 3 65 - 140
 +Servo wrist_rot;    // 4 0 - 180
 +Servo gripper;      // 5 0 - 75
 +
 +// posizione iniziale
 +byte pos[5]    = {90,90,90,90,0};
 +// serve per la funzione goPos()
 +byte oldpos[5] = {90,90,90,90,0};
 +
 +// sequenza coordinate
 +//byte seq[][5] = {
 +//  {90,90,90,90,0},
 +//  {110,90,130,90,0},
 +//  {110,63,130,90,50},
 +//  {110,90,110,90,50},
 +//  {30,90,110,90,50},
 +//  {30,63,110,90,0},
 +//  {30,90,110,90,0},
 +//  {90,90,130,90,0},
 +//  {90,63,130,90,40},
 +//  {90,90,110,90,40},
 +//  {40,90,110,90,40},
 +//  {40,63,110,90,0},
 +//  {40,90,110,90,0},
 +//  {70,90,130,90,0},
 +//  {70,63,130,90,40},
 +//  {70,90,110,90,40},
 +//  {45,90,110,90,40},
 +//  {45,63,110,90,0},
 +//  {45,90,110,90,0},
 +//  {90,90,90,90,75,}
 +//};
 +
 +byte seq[][5] = {
 +  {90,90,90,90,0},
 +  {140,110,60,90,0},
 +  {140,110,60,90,0},
 +  {140,110,60,90,35},
 +  {140,90,90,90,35},
 +  {90,90,90,90,60},
 +  {90,110,60,90,0},
 +  {90,90,90,90,0}
 +};
 +
 +// avvio se arriva del testo da seriale
 +bool run = false;
 +   
 +void setup() {
 +  Serial.begin(115200);
 +
 +  // abbinamento servo-pin
 +  base.attach(11);
 +  shoulder.attach(10);
 +  elbow.attach(9);
 +  wrist_rot.attach(6);
 +  gripper.attach(5);
 +
 +  // comando posizione iniziale
 +  base.write(pos[0]);
 +  shoulder.write(pos[1]);
 +  elbow.write(pos[2]);
 +  wrist_rot.write(pos[3]);
 +  gripper.write(pos[4]);
 + 
 +  Serial.println( "#### invia testo per avviare e per fermare la sequenza ####" );
 +}
 + 
 +void loop() {
 + 
 +  startStop();
 +  while (run) {
 +
 +    for ( byte line=0; line < (sizeof(seq)/5); line++ ) {
 +      Serial.print("Seq["); Serial.print(line); Serial.print("]:"); 
 +      for( byte i=0; i<5; i++ ) {
 +        Serial.print(" "); Serial.print(seq[line][i]); 
 +        pos[i] = seq[line][i];
 +      }
 +      Serial.print("\n");
 +      goPos(0,base,15);
 +      goPos(1,shoulder,15);
 +      goPos(2,elbow,15);
 +      goPos(3,wrist_rot,15);
 +      goPos(4,gripper,15);
 +      delay(1000);
 +      startStop();
 +    }
 +    delay(2000);
 +  }
 +}
 + 
 +void goPos(byte servo, Servo instance, byte pause) {
 +   if (oldpos[servo] >= pos[servo]) {
 +      for ( byte i = oldpos[servo]; i > pos[servo]; i--) {
 +        instance.write(i);
 +        delay(pause);
 +      }
 +   }
 +   if (oldpos[servo] <= pos[servo]) {
 +      for ( byte i = oldpos[servo]; i < pos[servo]; i++) {
 +        instance.write(i);
 +        delay(pause);
 +      }
 +   }
 +   oldpos[servo] = pos[servo];
 +}
 +
 +void startStop() {
 +  // se arriva del testo dal monitor seriale
 +  if (Serial.available()>0){
 +    // senza questo ritardo non legge tutti i dati del buffer!
 +    delay(10);
 +    Serial.println("buffer non vuoto");
 +    Serial.print("buffer dati: ");
 +    Serial.println(Serial.available());
 +    // svuota il buffer
 +    clearInputBuffer();
 +    Serial.print("buffer dati: ");
 +    Serial.println(Serial.available());
 +    // toggle della variabile che attiva la sequenza
 +    run = !run;
 +    Serial.print("run vale: ");
 +    Serial.println(run);
 +  }
 +}
 +
 +void clearInputBuffer() {
 +  while (Serial.available() > 0) {
 +    char t = Serial.read();
 +  }
 +}
 +
 +</code>
 ===== Risorse ===== ===== Risorse =====
  
Linea 228: Linea 391:
   * {{ ::ultiboard11.pdf |guida Ultiboard del libro di testo di elettronica}}   * {{ ::ultiboard11.pdf |guida Ultiboard del libro di testo di elettronica}}
   * {{ :shield_roboarm.zip |file progetto Multisim e Ultiboard}}   * {{ :shield_roboarm.zip |file progetto Multisim e Ultiboard}}
 +  * {{ ::sequenza_braccio.zip |sketch Arduino con controllo da seriale o con interruput sul pin D2}}
  
 ===== Navigazione ===== ===== Navigazione =====
braccio_robotico.1626465028.txt.gz · Ultima modifica: 2021/07/16 19:50 da admin