Aìna: pantografo 500x500 a ponte basso, due viti Y, KFlop

Sezione dedicata alla tua CNC: Costruzione, descrizione, foto, accorgimenti ed errori di progettazione.
Rispondi
Avatar utente
Zebrauno
God
God
Messaggi: 9670
Iscritto il: venerdì 18 settembre 2009, 18:24
Località: Savigliano/Torino
Contatta:

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da Zebrauno » mercoledì 2 ottobre 2013, 21:54

Mi auguro che a macchina finita tu possa, voglia fare un piccolo video con un preambolo pari pari alla tua descrizione del bambino :wink:

medy2
Newbie
Newbie
Messaggi: 7
Iscritto il: giovedì 15 ottobre 2009, 14:30
Località: Spoleto - Maranello

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da medy2 » mercoledì 2 ottobre 2013, 23:39

Aìna promette bene!
Ti seguo con interesse...
Non ho particolari talenti, sono solo appassionatamente curioso. (A. E.)

Avatar utente
Framoro
Junior
Junior
Messaggi: 157
Iscritto il: martedì 18 novembre 2008, 19:42
Località: Rimini

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da Framoro » giovedì 3 ottobre 2013, 8:06

Molto bella,ti seguo con molto interesse!

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su

Messaggio da walgri » giovedì 3 ottobre 2013, 9:33

Grazie ragazzi !

@Zebrauno: mi hai dato una idea che spero si possa trasformare in qualcosa di più di un preambolo :-)
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

billielliot
Senior
Senior
Messaggi: 1748
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da billielliot » giovedì 3 ottobre 2013, 15:18

Ciao walgri,

vedo con piacere che la faccenda sta' diventando moooolto seria (non che non lo fosse!).

Stai passando da "hobby" a "Impresa famigliare" :-)

Ciao :-)

Mauro

P.S. ti rubo la battuta: GO! GO! GO!
Amat victoria curam

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da walgri » giovedì 3 ottobre 2013, 16:50

Grazie Mauro !
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da walgri » domenica 6 ottobre 2013, 1:58

Quello che segue è lo schetch per Arduino Mega 2560 che monitorerà  le due viti di Y finchè non avrò sistemato la KFlop/KAnalog.

Il motivo per cui sono stato costretto ad utilizzare un Arduino anziche la ChipKit è che nella implementazione della Api di ChipKit manca la possibilità  di collegare una ISR al cambiamento dello stato di un pin. Posso collegare una ISR al fronte in salita OPPURE al fronte in discesa, quindi è impossibile (allo stato attuale) leggere un encoder in quadratura senza far riferimento a librerie o artifici vari.

Il motivo per cui ho dovuto utilizzare il Mega (che avevo in casa) è che permette di gestire gli interrupt su cinque pin, anzichè su due pin solamente (come accade negli UNO).

Codice: Seleziona tutto

// Sketch per verificare che le posizioni di due encoder 
// non diferiscano più di una certa soglia
// (c) 2013 Walgri - walgri (@) gmail (.) com

// Mappa dei pins
byte encoder1APin = 2;
byte encoder1BPin = 3;
byte encoder2APin = 21;
byte encoder2BPin = 20;
byte clearPin = 8; // Per evenutuale tasto reset del Delta
byte emergencyPin = 11; // Pin che guida un relais in serie alla catena di emergenza
byte ledPin = 13;

int maxDelta = 100; //Soglia di intervento

// Posizione attuale degli encoders
volatile long int encoder1Pos = 0;
volatile long int encoder2Pos = 0;
int lastDelta = 0; // Differenza di posizione tra i due encoders
int delta = 0; // Differenza attuale di posizione tra i due encoders

// Stato dei canali dei due encoders
boolean status_1A = false;
boolean status_1B = false;
boolean status_2A = false;
boolean status_2B = false;

void setup() {
    pinMode(encoder1APin, INPUT); 
    pinMode(encoder1BPin, INPUT); 
    pinMode(encoder2APin, INPUT); 
    pinMode(encoder2BPin, INPUT);
    pinMode(clearPin, INPUT);
    digitalWrite(encoder1APin, HIGH);  // attiva pullup
    digitalWrite(encoder1BPin, HIGH);  // attiva pullup
    digitalWrite(encoder2APin, HIGH);  // attiva pullup
    digitalWrite(encoder2BPin, HIGH);  // attiva pullup
    digitalWrite(clearPin, HIGH);
    
    // pin di output
    pinMode(emergencyPin, OUTPUT);
    digitalWrite(emergencyPin, HIGH);  // comportamento NC (chiude il relais)
    
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);  // led  di Emergenza    

    attachInterrupt(0, leggiEncoder1A, CHANGE);
    attachInterrupt(1, leggiEncoder1B, CHANGE);
    
    attachInterrupt(2, leggiEncoder2A, CHANGE);
    attachInterrupt(3, leggiEncoder2B, CHANGE); 

    Serial.begin(115200);
    Serial.println("Test sincronia encoder\n");
}


void loop(){ 

    delta = encoder1Pos - encoder2Pos;

    if (lastDelta != delta) {
          if (abs(delta) > maxDelta){
              digitalWrite(emergencyPin, LOW);
              digitalWrite(ledPin, HIGH);
              Serial.print("Emergenza! ");
          } else {
              digitalWrite(emergencyPin, HIGH);
              digitalWrite(ledPin, LOW);
          }
        Serial.println(delta, DEC);
        lastDelta = delta;
    }
    if (digitalRead(clearPin) == LOW)  {
        lastDelta = 0;
        delta = 0;
        digitalWrite(ledPin, LOW);
    }
}


// ISR
// Funzioni di lettura dei segnali dell'encoder 1
    
void leggiEncoder1A(){
    status_1A = digitalRead(encoder1APin) == HIGH;
    encoder1Pos += (status_1A != status_1B) ? +1 : -1;
}

void leggiEncoder1B(){
    status_1B = digitalRead(encoder1BPin) == HIGH;
    encoder1Pos += (status_1A == status_1B) ? +1 : -1;
}
    
// e per l'encoder 2 -- identiche al caso precedente
void leggiEncoder2A(){
    status_2A = digitalRead(encoder2APin) == HIGH;
    encoder2Pos += (status_2A != status_2B) ? +1 : -1;
}
    
void leggiEncoder2B(){
    status_2B = digitalRead(encoder2BPin) == HIGH;
    encoder2Pos += (status_2A == status_2B) ? +1 : -1;
}

Il codice è stato testato con due encoders volanti e pare funzionare a dovere, tempo permettendo domani cerco di sistemare la parte hardware.

Il significato dei pins è inserito nei commenti del codice, peraltro piuttosto banale.
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da walgri » domenica 6 ottobre 2013, 23:51

Ho modificato leggermente il codice, rimuovendo la codice relativo al tasto reset, ridondante rispetto al reset a bordo dell'Arduino. Tanto questa situazione è molto provvisoria e l'arduino starà a cielo aperto.

Codice: Seleziona tutto

// Sketch per verificare che le posizioni di due encoder 
// non diferiscano più di una certa soglia
// (c) 2013 Walgri - walgri (@) gmail (.) com

// Mappa dei pins
byte encoder1APin = 2;
byte encoder1BPin = 3;
byte encoder2APin = 21;
byte encoder2BPin = 20;
byte emergencyPin = 11; // Pin che guida un relais in serie alla catena di emergenza
byte ledPin = 13;

int maxDelta = 100; //Soglia di intervento

// Posizione attuale degli encoders
volatile long int encoder1Pos = 0;
volatile long int encoder2Pos = 0;
int lastDelta = 0; // Differenza di posizione tra i due encoders
int delta = 0; // Differenza attuale di posizione tra i due encoders

// Stato dei canali dei due encoders
boolean status_1A = false;
boolean status_1B = false;
boolean status_2A = false;
boolean status_2B = false;

void setup() {
    pinMode(encoder1APin, INPUT); 
    pinMode(encoder1BPin, INPUT); 
    pinMode(encoder2APin, INPUT); 
    pinMode(encoder2BPin, INPUT);
    digitalWrite(encoder1APin, HIGH);  // attiva pullup
    digitalWrite(encoder1BPin, HIGH);  // attiva pullup
    digitalWrite(encoder2APin, HIGH);  // attiva pullup
    digitalWrite(encoder2BPin, HIGH);  // attiva pullup
    
    // pin di output
    pinMode(emergencyPin, OUTPUT);
    digitalWrite(emergencyPin, HIGH);  // comportamento NC (chiude il relais)
    
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);  // led  di Emergenza    

    attachInterrupt(0, leggiEncoder1A, CHANGE);
    attachInterrupt(1, leggiEncoder1B, CHANGE);
    
    attachInterrupt(2, leggiEncoder2A, CHANGE);
    attachInterrupt(3, leggiEncoder2B, CHANGE); 

    Serial.begin(115200);
    Serial.println("Test sincronia encoder\n");
}


void loop(){ 

    delta = encoder1Pos - encoder2Pos;

    if (lastDelta != delta) {
          if (abs(delta) > maxDelta){
              digitalWrite(emergencyPin, LOW);
              digitalWrite(ledPin, HIGH);
              Serial.print("Emergenza! ");
          } else {
              digitalWrite(emergencyPin, HIGH);
              digitalWrite(ledPin, LOW);
          }
        Serial.println(delta, DEC);
        lastDelta = delta;
    }
}


// ISR
// Funzioni di lettura dei segnali dell'encoder 1
    
void leggiEncoder1A(){
    status_1A = digitalRead(encoder1APin) == HIGH;
    encoder1Pos += (status_1A != status_1B) ? +1 : -1;
}

void leggiEncoder1B(){
    status_1B = digitalRead(encoder1BPin) == HIGH;
    encoder1Pos += (status_1A == status_1B) ? +1 : -1;
}
    
// e per l'encoder 2 -- identiche al caso precedente
void leggiEncoder2A(){
    status_2A = digitalRead(encoder2APin) == HIGH;
    encoder2Pos += (status_2A != status_2B) ? +1 : -1;
}
    
void leggiEncoder2B(){
    status_2B = digitalRead(encoder2BPin) == HIGH;
    encoder2Pos += (status_2A == status_2B) ? +1 : -1;
}

Ho anche creato un repository pubblico da cui scaricare direttamente il file ed avere accesso a tutte le revisioni dei files: https://bitbucket.org/walgri/screwcheck/src

_______________________________________

Voglio spendere due parole per esprimere la mia soddisfazione, orgoglio e gratitudine nel poter lavorare a questo progetto con mio padre.

Nel frattempo ho riprovato gli assi separatamente, poi abbiamo proceduto ad un primo assemblaggio e provato il tutto:
Ponte_su_struttura_IMG_1060.JPG
Ed infine abbiamo aggiunto anche il gruppo Z (sullo sfondo della foto seguente) e ho accrocchiato un supporto provvisorio degli encoder Y:
Supporto_Encoder_IMG_1066.JPG
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Zebrauno
God
God
Messaggi: 9670
Iscritto il: venerdì 18 settembre 2009, 18:24
Località: Savigliano/Torino
Contatta:

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da Zebrauno » lunedì 7 ottobre 2013, 0:26

Che bella foto quella con tuo padre...grazie per avercelo presentato :)
Sei molto fortunato ad avere quest'occasione, anche il mio avrebbe condiviso volentieri il montaggio se non ci fossero quei 1000km di mezzo...e fa piacere vedere che ti stai godendo questi momenti con lo spirito che dimostri.

Procedi velocissimo ma ora abbiamo scoperto il segreto :D

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da walgri » lunedì 7 ottobre 2013, 12:34

In realtà io faccio solo le foto :mrgreen:

Alla mia età, e alla sua età, mi pare l'unica cosa sensata da fare, e ho una irripetibile fortuna a poterlo fare.

Certo, nel posto dove facciamo pausa pranzo penseranno che siamo ben strambi a pasticciare di disegni le loro tovaglie di carta, ma si sta anche questo 8)
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da walgri » martedì 8 ottobre 2013, 14:52

Ho appena misurato la resistenza elettrica tra asse portapinza e corpo dell'elettromandrino. Il mio multimetrino segna 3.7MOhm (mega). Può dare qualche indicazione sul materiale dei cuscinetti ?

Chiedo questo perchè tra corpo e piano (passando quindi per le sfere di carrelli e chiocciole) ottengo 0.5 Ohm.
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Zebrauno
God
God
Messaggi: 9670
Iscritto il: venerdì 18 settembre 2009, 18:24
Località: Savigliano/Torino
Contatta:

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da Zebrauno » martedì 8 ottobre 2013, 15:14

Mhhh....ottieni sempre lo stesso valore anche se misuri tra boccole per i tubi dell'acqua e asse mandrino?

Nei miei la resistenza e' vicina a 0, dici che in China hanno trovato il modo di fare cuscinetti di plastica?
Perche' dubito violentemente che mettano cuscinetti ceramici senza nemmeno vantarsene...e da soli costerebbero come tutto il mandrino.

ciao

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da walgri » martedì 8 ottobre 2013, 22:00

Si, la resistenza si attesta sempre su quei valori, tra i 3 e i 4 MOhm. Anche dopo aver fatto girare l'asse a mano per qualche minuto. Nella inserzione Ebay compariva la solita scritta (credo farlocca) German imported etc etc.

Hanno usato qualche mastice per tenere i cuscinetti in sede :shock:

Finisce che hanno inventato le sedi interne dei cuscinetti in plastica :-)

Fatto sta che anche se volessi, non potrei azzerare l'utensile con il classico metodo della basetta. Se non inventando un coccodrillo da stringere all'asse - cosa che non mi passa neanche per l'anticamera del cervello.
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Zebrauno
God
God
Messaggi: 9670
Iscritto il: venerdì 18 settembre 2009, 18:24
Località: Savigliano/Torino
Contatta:

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da Zebrauno » martedì 8 ottobre 2013, 22:11

Potresti risolvere costruendo una sorta di spazzola strisciante sull'asse, appena esce dal mandrino, montata su una molla come quella delle mollette per il bucato.
Oppure rendere la spazzola retrattile, per non lasciare segni sul mandrino...

Su 3 mandrini comprati non mi e' mai capitato, forse c'e' veramente una sorta di mastice correttivo per la sede del cuscinetto, ma possibile che non batta da nessuna parte?

Lo avessi tra le mani lo aprirei giusto per capirlo.

Hai anche un'altra via...aprire la calotta posteriore (cosa che forse farai per montare un altro connettore) e arrangiare un contatto con la terra, quindi tra l'esterno e l'asse del mandrino.
In quel punto hai accesso al cuscinetto posteriore e alle molle a tazza, potresti usare queste per creare un ponte con il corpo esterno.

ciao

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Aìna: pantografo 500x500 a ponte basso con due viti su Y

Messaggio da walgri » mercoledì 9 ottobre 2013, 10:49

Grazie Zebrauno,

la sostituzione del connettore è sicuramente prevista, non appena trovo il tempo di selezionarlo tra i milioni di connettori IP65 / IP67 disponibli :roll:

Quando aprirò la calotta vedrò che cosa si può fare, perchè delle due una: o trovo un modo permanente ed affidabile di ripristinare la continuità, oppure farò uso del solo tastatore da banco isolato dalla macchina. Non credo di aver tanta voglia di trafficare vicino alla fresa a macchina accesa.

Questa cosa del mastice mi lascia piuttosto perplesso: chissà quale sarà la sua tenuta e l'allineamento nel tempo. Vorrà dire che al minimo dubbio prenderà il volo.

Ciao
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Rispondi

Torna a “La mia CNC”