Sommario:
- Forniture
- Passaggio 1: gli encoder ottici
- Passaggio 2: parti stampate in 3D
- Passaggio 3: schema elettrico
- Passaggio 4: codice Arduino
- Passaggio 5: prima scansione
Video: Scanner di punti XYZ con codificatori rotanti recuperati: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Avendo acquistato un numero piuttosto elevato di encoder ottici rotanti scartati dal mio posto di lavoro, alla fine ho deciso di fare qualcosa di divertente/utile con loro.
Di recente ho acquistato una nuova stampante 3D per la mia casa e cosa potrebbe complimentarmi meglio di uno scanner 3D! Questo progetto mi ha anche fornito l'opportunità perfetta di utilizzare la mia stampante 3D per produrre le parti richieste.
Forniture
Encoder ottici e corrispondenti sensori ottici
Arduino UNO
scudo di prototipazione opzionale
binari in barra d'acciaio
accesso a una stampante 3D
Passaggio 1: gli encoder ottici
Quasi tutti i codificatori rotanti potrebbero essere utilizzati per questo progetto, purché forniscano un numero relativamente elevato di "clic" per mm. Ovviamente encoder diversi richiederanno una soluzione di montaggio adeguata.
Ho usato un misuratore di continuità per tracciare lo schema elettrico dei fotosensori.
Passaggio 2: parti stampate in 3D
Queste parti ospitano gli encoder rotativi e forniscono una guida per la guida. L'alloggiamento dell'encoder singolo ha due fori nella parte posteriore per il montaggio delle guide trasversali. Il doppio alloggiamento dell'encoder è semplicemente due alloggiamenti singoli fusi insieme ad angolo retto.
Ho progettato questi supporti su fusion360 per adattarsi alla mia scelta di encoder e binari, l'albero dell'encoder ha un breve pezzo di guaina in gomma a fionda, per aiutarlo a stringere meglio l'albero in acciaio inossidabile.
Si desidera che l'albero scorra liberamente e cada attraverso l'alloggiamento quando è tenuto verticalmente, tuttavia deve esercitare una pressione sufficiente sull'encoder per non scivolare. Ciò che ha funzionato per me è stato consentire alla slitta per l'albero di sovrapporsi all'albero dell'encoder di 0,5 mm. La gomma della fionda è abbastanza morbida da deformarsi di quella quantità e fornire una buona trazione.
Passaggio 3: schema elettrico
Il circuito è molto semplice. Gli optosensori richiedono un po' di corrente per i diodi emettitori IR, una massa e resistori di pull-up per i fotodiodi.
Ho deciso per 5 mA per i diodi emettitori in serie, in questo particolare encoder la caduta di tensione sui diodi è di 3,65 V. Sto usando un'alimentazione a 5 V dall'Arduino, che lascia 1,35 V per il resistore, a 5 mA risulta essere 270 ohm.
Sono stati selezionati 10k ohm per i pull-up poiché i fotodiodi possono assorbire solo una piccola corrente, 10k ohm sono stati utilizzati anche per il pulsante. C'è un pulsante disponibile per l'uso sulla scheda prototipo già collegata a terra, basta dotarla di una resistenza di pull-up e collegarla al pin di ingresso desiderato.
Passaggio 4: codice Arduino
Il codice necessita di una piccola spiegazione in quanto il suo funzionamento potrebbe non essere immediatamente ovvio, tuttavia doveva essere ottimizzato in questo modo per poter elaborare 3 codificatori abbastanza rapidamente.
Innanzitutto vogliamo elaborare i dati di direzione solo SE c'è stato un cambiamento nella posizione dell'encoder.
modifiche = nuovo_valore ^ valore memorizzato;
Per ottenere una maggiore risoluzione dai miei encoder ho dovuto elaborare sia i fronti di salita che di discesa.
Sulla mia configurazione la mia risoluzione è di 24 clic per 1 cm.
Questo ci lascia con alcuni scenari.
S1 è costante 0 e S2 commutato da 0 a 1
S1 è costante 0 e S2 commutato da 1 a 0
S1 è costante 1 e S2 passa da 0 a 1
S1 è costante 1 e S2 passa da 1 a 0
S2 è costante 0 e S1 commutato da 0 a 1
S2 è costante 0 e S1 commutato da 1 a 0
S2 è costante 1 e S1 passa da 0 a 1
S2 è costante 1 e S1 passa da 1 a 0
Queste condizioni sono meglio comprese nelle tabelle di verità sopra, inoltre ogni condizione produce una "direzione", arbitrariamente denominata 0 o 1.
I grafici ci danno due indizi vitali:
1) un grafico è l'inverso completo dell'altro, quindi se ne abbiamo uno, possiamo facilmente calcolare l'altro semplicemente invertendo l'output. Invertiamo l'output solo se cambia un pin e non l'altro, possiamo sceglierne uno arbitrariamente.
2) il grafico stesso è semplicemente lo XOR dei segnali S1 e S2. (l'altro grafico è il NON di questo).
Ora capire il codice è semplice.
// legge in PORT in parallelo//ricorda che le coppie adiacenti appartengono allo stesso stato dell'encoder = PINB & 0x3f; // quali pin sono cambiati se ce ne sono diff = hold ^ state; // Segnali XOR adiacenti S1 e S2 per ottenere la tabella di verità // il modo più semplice è fare una copia dello stato corrente // e spostarlo a destra di un bit lookup = state >> 1; // ora i bit sono allineati per XOR dir = lookup ^ state; // ricorda, la tabella deve essere invertita se uno // degli input è rimasto costante, non abbiamo bisogno di un'istruzione IF // per questo. Attualmente il bit di direzione desiderato // è il bit di destra di ogni coppia nella variabile 'dir' // il bit di sinistra non ha significato // la variabile 'diff' ha il bit che ha cambiato 'set' // quindi abbiamo '01' o '10' // XOR questo con il byte 'dir' // invertirà o meno il bit significativo. dir ^= diff; // ora aggiorna la variabile di attesa hold = state; // se uno dei due bit è cambiato per questo codificatore if(diff & 0x03) { // determina la direzione if(dir & 0x01) { // in base al tuo hardware e cablaggio ++ o -- --z; } else { ++z; } } // idem per il resto if(diff & 0x0c) { if(dir & 0x04) { ++y; } else { --y; } } if(diff & 0x30) { if(dir & 0x10) { --x; } else { ++x; } }
Quando si preme il pulsante, inviamo il valore XYZ corrente a un programma terminale.
I dati seriali sono lenti, ma durante il normale funzionamento le posizioni degli encoder non cambieranno comunque durante questo tempo.
I dati vengono inviati come conteggi grezzi. Potresti fare i conti e inviare i dati in mm o pollici, ecc. Trovo che i valori grezzi siano altrettanto buoni perché possiamo ridimensionare l'oggetto in un secondo momento nel software.
Passaggio 5: prima scansione
La raccolta dei punti è un processo lento, appoggio la sonda nell'angolo in alto a sinistra e resetto Arduino.
Questo azzera la posizione come home.
Quindi sposta la sonda nella posizione sul bersaglio, tienila ferma e premi il pulsante "istantanea".
Per questo campione piuttosto grande ho preso solo ~140 punti, quindi il dettaglio non è eccezionale sul prodotto finale.
Salva i dati in un file. PCD e aggiungi l'intestazione
#. PCD v.7 - Formato file dati nuvola di puntiVERSIONE.7 CAMPI x y z DIMENSIONE 4 4 4 TIPO F F F CONTEGGIO 1 1 1 LARGHEZZA (il tuo conteggio dei punti) ALTEZZA 1 PUNTO DI VISTA 0 0 0 1 0 0 0 PUNTI (il tuo conteggio dei punti)
Metti il conteggio dei punti nell'intestazione, questo è facile su qualsiasi editor che ti fornisce i numeri di riga.
Sopra i punti possono essere visualizzati in freeCad, vengono quindi esportati da freeCad come file. PLY.
Apri. PLY su MeshLab e fai emergere l'oggetto. Fatto!!
Consigliato:
Il preamplificatore valvolare fai-da-te PA1: costruito in modo efficiente con componenti recuperati: 13 passaggi
Il preamplificatore valvolare fai-da-te PA1: costruito in modo efficiente con componenti recuperati: ci sono molte risorse sulla costruzione di preamplificatori valvolari sul web e sulla stampa, quindi ho pensato di condividere qualcosa di un po' diverso. Questo istruibile copre la costruzione di un preamplificatore valvolare open source del mio progetto e non solo questo è un u
Sistema di scaffalature rotanti Space Farm: 5 passaggi
Sistema di cremagliera rotante Space Farm: questa è una voce professionale per il concorso Growing Beyond Earth Maker. Questo sistema utilizza tre serie di rastrelliere rotanti che accoppiano ciascuna serie di lattuga con un'altra in una fase precedente per massimizzare l'area utilizzabile. Quando i semi sono inizialmente germi
Macchina per massaggi rotanti V1.0 (prototipo): 7 passaggi
Rotary Massage Machine V1.0 (Prototipo): Rotary Massage Machine, è un dispositivo che ti aiuta a rilassare i muscoli quando sono tesi. Può anche aiutare a districare i nodi muscolari o può essere utilizzato per il trattamento dei tessuti profondi. Le due manopole sul fondo hanno un'area rialzata per sporgere il tessuto m
Cosa fare con le collezioni di motori casuali: Progetto 2: Luci rotanti (modello UFO): 12 passaggi (con immagini)
Cosa fare con le collezioni di motori casuali: Progetto 2: Luci rotanti (modello UFO): Quindi, ho ancora una collezione di motori casuali… Cosa farò? Bene, pensiamo. Che ne dici di uno spinner con luce a LED? (Non a mano, scusate gli amanti del fidget spinner.) Sembra un po' un UFO, suona come un mix tra uno spaccaerba e un frullatore
Lanci rotanti a LED guidati da un motore Stirling (eVoltis Stirlingmachine): 12 passaggi (con immagini)
Lanci rotanti a LED azionati da un motore Stirling (eVoltis Stirlingmachine): Questa è una macchina ad aria calda (stirlingengine), costruita con alcune vecchie parti di computer (dissipatore di calore e la testa di un vecchio disco rigido). Questo motore Stirling (e anche tutti gli altri) funziona con una differenza di temperatura tra il lato inferiore caldo (ad es. Heatet con un