braccio_robotico
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedenteProssima revisioneEntrambe le parti successive la revisione | ||
braccio_robotico [2020/03/23 10:29] – [Creazione del componente LM2576] admin | braccio_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, | * l'uso di un barrel jack, più indicato in un prodotto commerciale, | ||
- | Si sceglie di alimentazione schede e motori con un alimentatore da banco a 12V e di utilizzare un morsetto. | + | Si sceglie di alimentazione schede e motori con un alimentatore da banco a 12V e di utilizzare un morsetto |
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 | + | * 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. | ||
+ | |||
+ | {{:: | ||
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 |
+ | |||
+ | 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:// | ||
+ | |||
+ | 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 // | ||
+ | |||
+ | 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' | ||
+ | * 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' | ||
+ | * 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' | ||
+ | * 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' | ||
+ | |||
+ | 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, | ||
+ | * 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:// | ||
+ | |||
+ | <code C> | ||
+ | /* da https:// | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | |||
+ | // per il range di valori vedi qui | ||
+ | // https:// | ||
+ | Servo base; // 1 0 - 180 | ||
+ | Servo shoulder; | ||
+ | Servo elbow; | ||
+ | Servo wrist_rot; | ||
+ | Servo gripper; | ||
+ | |||
+ | // posizione iniziale | ||
+ | byte pos[5] | ||
+ | // serve per la funzione goPos() | ||
+ | byte oldpos[5] = {90, | ||
+ | |||
+ | // sequenza coordinate | ||
+ | //byte seq[][5] = { | ||
+ | // {90, | ||
+ | // {110, | ||
+ | // {110, | ||
+ | // {110, | ||
+ | // {30, | ||
+ | // {30, | ||
+ | // {30, | ||
+ | // {90, | ||
+ | // {90, | ||
+ | // {90, | ||
+ | // {40, | ||
+ | // {40, | ||
+ | // {40, | ||
+ | // {70, | ||
+ | // {70, | ||
+ | // {70, | ||
+ | // {45, | ||
+ | // {45, | ||
+ | // {45, | ||
+ | // {90, | ||
+ | //}; | ||
+ | |||
+ | byte seq[][5] = { | ||
+ | {90, | ||
+ | {140, | ||
+ | {140, | ||
+ | {140, | ||
+ | {140, | ||
+ | {90, | ||
+ | {90, | ||
+ | {90, | ||
+ | }; | ||
+ | |||
+ | // 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 | + | for ( byte line=0; line < (sizeof(seq)/ |
+ | Serial.print(" | ||
+ | for( byte i=0; i<5; i++ ) { | ||
+ | Serial.print(" | ||
+ | pos[i] = seq[line][i]; | ||
+ | } | ||
+ | Serial.print(" | ||
+ | goPos(0, | ||
+ | goPos(1, | ||
+ | goPos(2,elbow, | ||
+ | goPos(3, | ||
+ | goPos(4, | ||
+ | delay(1000); | ||
+ | startStop(); | ||
+ | } | ||
+ | delay(2000); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void goPos(byte servo, Servo instance, byte pause) { | ||
+ | if (oldpos[servo] >= pos[servo]) { | ||
+ | for ( byte i = oldpos[servo]; | ||
+ | instance.write(i); | ||
+ | delay(pause); | ||
+ | } | ||
+ | } | ||
+ | if (oldpos[servo] <= pos[servo]) { | ||
+ | for ( byte i = oldpos[servo]; | ||
+ | instance.write(i); | ||
+ | delay(pause); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | } | ||
- | FIXME | + | void startStop() { |
+ | // se arriva del testo dal monitor seriale | ||
+ | if (Serial.available()> | ||
+ | // senza questo ritardo non legge tutti i dati del buffer! | ||
+ | delay(10); | ||
+ | Serial.println(" | ||
+ | Serial.print(" | ||
+ | Serial.println(Serial.available()); | ||
+ | // svuota il buffer | ||
+ | clearInputBuffer(); | ||
+ | Serial.print(" | ||
+ | Serial.println(Serial.available()); | ||
+ | // toggle della variabile che attiva la sequenza | ||
+ | run = !run; | ||
+ | Serial.print(" | ||
+ | Serial.println(run); | ||
+ | } | ||
+ | } | ||
- | * clearance | + | void clearInputBuffer() { |
- | | + | |
+ | char t = Serial.read(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
===== Risorse ===== | ===== Risorse ===== | ||
Linea 181: | Linea 379: | ||
* [[https:// | * [[https:// | ||
* [[alimentatori_switching# | * [[alimentatori_switching# | ||
+ | * {{ :: | ||
+ | * {{ : | ||
===== Navigazione ===== | ===== Navigazione ===== |
braccio_robotico.txt · Ultima modifica: 2023/03/07 08:23 da admin