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
Prossima revisioneEntrambe le parti successive la revisione
braccio_robotico [2020/03/23 10:30] – [Creazione del componente LM2576] adminbraccio_robotico [2022/10/18 09:00] – [TUTTI I MOVIMENTI DA RITARARE!] admin
Linea 1: Linea 1:
 +
 +
 +
 ====== Braccio Robotico ====== ====== Braccio Robotico ======
  
Linea 82: Linea 85:
   * l'uso di un barrel jack, più indicato in un prodotto commerciale, complica le cose perché i piedini sono a linguetta e le dimensioni non sono standard   * l'uso di un barrel jack, più indicato in un prodotto commerciale, complica le cose perché i piedini sono a linguetta e le dimensioni non sono standard
  
-Si sceglie di alimentazione schede e motori con un alimentatore da banco a 12V e di utilizzare un morsetto. La tensione a valle di un diodo di protezione 1N4001 sarà collegata al piedino Vin per alimentare anche la scheda Arduino. +Si sceglie di alimentazione schede e motori con un alimentatore da banco a 12V e di utilizzare un morsetto a viteQuesta tensionea valle di un diodo di protezione 1N4001sarà collegata al piedino Vin per alimentare anche la scheda Arduino. 
  
 Per il dimensionamento del regolatore occorre sapere: Per il dimensionamento del regolatore occorre sapere:
Linea 89: Linea 92:
   * Imax = 2A (i servo più grandi assorbono al massimo 1,2A)   * Imax = 2A (i servo più grandi assorbono al massimo 1,2A)
 e scegliere: e scegliere:
-  * Cin (elettrolitico da 100uF?+  * Cin (elettrolitico da 100uF) 
-  * Cout (elettrolitico da 1000uF?+  * Cout (elettrolitico da 1000uF) 
-  * L1 (220uH o più piccolo?)+  * L1 (220uH)
   * D1 = 1N5822   * D1 = 1N5822
  
Linea 161: Linea 164:
   * R1 e R2 (package RES1300-700X250)   * R1 e R2 (package RES1300-700X250)
   * trimmer (package di default che tanto va cambiato)   * trimmer (package di default che tanto va cambiato)
 +
 +Lo schematico dovrebbe avere più o meno questo aspetto.
 +
 +{{::schematico-shield-braccio.png?800|}}
  
 Forward annotate sul file già salvato in Ultiboard, poi aggiustare i footprint di: Forward annotate sul file già salvato in Ultiboard, poi aggiustare i footprint di:
Linea 167: Linea 174:
   * R1 e R2 RES10   * R1 e R2 RES10
   * D2 DO-15   * D2 DO-15
-  * U1 TO220-T05B (forse va già bene quello scelto)+  * U1 TO220-T05B (va già bene quello scelto in Multisim, è solo brutto il render nella vista 3D) 
 + 
 +Tentare il primo sbroglio seguendo le indicazioni di figura 32 del datasheet (collegamenti in grassetto devono essere corti e grossi). Tracce da 1mm. Piazzole tonde con fori da 0.8 e diametro 2,6 dove possibile altrimenti ovali custom (vedi [[https://leonardocanducci.org/wiki/tp3/shield_293d?s[]=custom#come_creare_una_piazzola_custom|qui]] o [[https://leonardocanducci.org/wiki/tp4/simon#creare_una_piazzola_custom|qui]]). Io non sono riuscito a fare lo sbroglio solo sul bottom (ma Alifuoco e D'Agostino sì!) e ho dovuto piazzare 2 via e un collegamento sul top. 
 + 
 +Se è necessario realizzare dei collegamenti nel lato top bisogna piazzare delle via: 
 +  * dal menu Place scegliere //via// 
 +  * selezionare il collegamento (da bottom a top per la prima, da top a bottom per la seconda) 
 +  * collegare le due via con una pista sul lato top (pista verde) 
 + 
 +Al termine aggiungere il piano di massa: 
 +  * dal menu Place scegliere //power plane// 
 +  * selezionare la net 0 (massa) e il lato bottom 
 +  * impostare manualmente la clearance a 1mm dalle proprietà del piano di massa 
 + 
 +Controllare sempre: 
 +  * che la clearance sia corretta (possibilmente 1mm tra piste e piste e tra piste e piazzole, dove non possibile tentare comunque di non scendere sotto 0.6) 
 +  * dal menu Design scegliere //DRC and netlist check// e //Connectivity check//  
 + 
 +I piedini dei condensatori elettrolitici possono risultare invertiti. Lo si vede controllando il collegamenti in Ultiboard ma anche in Multisim se nella scheda //Display// delle proprietà del componente si mette la spunta su //show symbol pin names// e //show package pin names//. Per correggere si può procedere in due modi: 
 +  * aggiustando il mapping (l'abbinamento tra piedini del simbolo e piedini del footprint) in Multisim e riportando le modifiche in Ultiboard con //Forward Annotate//; per farlo selezionare il componente e cliccare //Edit package//  nella scheda //Value//, quindi abbinare correttamente //Symbol pin// e //Package pin// 
 +  * da Ultiboard col il //Netlist editor // dal menu tools: 
 +    * dalla net 0 (massa) eliminare il pin + di C2 selezionandolo e cliccando su Remove 
 +    * procedere allo stesso modo eliminando il pin - di C2 dall'altra net 
 +    * aggiungere i pin alla net giusta selezionando prima la net e aggiungendo i pin col pulsante con la freccia sotto al pulsante //Add// 
 + 
 +===== Collaudo ===== 
 + 
 +Montata la scheda single layer((da progetto degli studenti D'Agostino e Alifuoco)) con questi componenti: 
 +  * diodo di protezione 1N4007 
 +  * diodo shottky 1N5819 
 +  * Cin 100uF 
 +  * Cout 1000uF 
 +  * induttore 220uH 
 +  * morsetto a vite 
 +  * resistori da 1k e 2,7k 
 +  * trimmer da 500 
 +  * LM2576-ADJ((occhio che nel cassettino ci sono anche gli LM2576-5 a 5V fissi e occhio anche al verso!)) dopo aver piegato tre piedini 
 +  * stripline maschio-maschio lunghe 
 + 
 +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é. 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: 
 +  * pinza pin 5: 0 aperto, 60 chiuso 
 +  * polso2 pin 6: 0 90° a sinistra, 90 orizzontale, 180 90° a destra 
 +  * polso1 pin 9: 50 a terra, 120 tutto indietro 
 +  * braccio pin 10: stare tra 80 (alto) e 120 (basso) col braccio avanzato 
 +  * 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) {
  
-Tentare il primo sbroglio seguendo le indicazioni di figura 32 del datasheet (collegamenti in grassetto devono essere corti e grossi). Tracce da 1mmPiazzole tonde con fori da 0.8 e diametro 2,6 dove possibile altrimenti ovali [[https://leonardocanducci.org/wiki/tp3/shield_293d?s[]=custom#come_creare_una_piazzola_custom|custom]]. Io non sono riuscito a fare lo sbroglio solo sul bottom e ho dovuto piazzare 2 via e un collegamento sul top.+    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]; 
 +}
  
-FIXME+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); 
 +  } 
 +}
  
-  * clearance +void clearInputBuffer() { 
-  * immagine schematico+  while (Serial.available() > 0) { 
 +    char t = Serial.read(); 
 +  } 
 +}
  
 +</code>
 ===== Risorse ===== ===== Risorse =====
  
Linea 181: Linea 379:
   * [[https://www.futurashop.it/Allegato_PDF_IT/7100-FT1397M.pdf|shield per servo abbinato a Roboarm]]   * [[https://www.futurashop.it/Allegato_PDF_IT/7100-FT1397M.pdf|shield per servo abbinato a Roboarm]]
   * [[alimentatori_switching#l_integrato_lm2576|pagina sul regolatore LM2576]]   * [[alimentatori_switching#l_integrato_lm2576|pagina sul regolatore LM2576]]
 +  * {{ ::ultiboard11.pdf |guida Ultiboard del libro di testo di elettronica}}
 +  * {{ :shield_roboarm.zip |file progetto Multisim e Ultiboard}}
  
 ===== Navigazione ===== ===== Navigazione =====
braccio_robotico.txt · Ultima modifica: 2023/03/07 08:23 da admin