Taula de continguts:

Escàner de punts XYZ amb codificadors rotatius recuperats: 5 passos
Escàner de punts XYZ amb codificadors rotatius recuperats: 5 passos

Vídeo: Escàner de punts XYZ amb codificadors rotatius recuperats: 5 passos

Vídeo: Escàner de punts XYZ amb codificadors rotatius recuperats: 5 passos
Vídeo: RunPod Fix For DreamBooth & xFormers - How To Use Automatic1111 Web UI Stable Diffusion on RunPod 2024, Desembre
Anonim
Escàner de punts XYZ que utilitza codificadors rotatius recuperats
Escàner de punts XYZ que utilitza codificadors rotatius recuperats

Després d’haver adquirit un bon nombre de codificadors òptics rotatius rebutjats del meu lloc de treball, finalment vaig decidir fer alguna cosa divertida / útil amb ells.

Recentment he comprat una nova impressora 3D per a casa meva, i què podria complementar-la millor que un escàner 3D? Aquest projecte també em va proporcionar l'oportunitat perfecta d'utilitzar la meva impressora 3D per fabricar les peces necessàries.

Subministraments

Codificadors òptics i corresponents sensors òptics

Arduino UNO

protecció opcional de prototips

baranes d'acer

accés a una impressora 3D

Pas 1: els codificadors òptics

Els codificadors òptics
Els codificadors òptics
Els codificadors òptics
Els codificadors òptics
Els codificadors òptics
Els codificadors òptics

Es podria utilitzar gairebé qualsevol codificador rotatiu per a aquest projecte, sempre que us proporcionés un nombre relativament elevat de "clics" per mm. Differentbviament, diferents codificadors requeriran una solució de muntatge adequada.

Vaig utilitzar un mesurador de continuïtat per traçar el diagrama de cablejat dels fotosensors.

Pas 2: peces impreses en 3D

Parts impreses en 3D
Parts impreses en 3D
Parts impreses en 3D
Parts impreses en 3D

Aquestes parts contenen els codificadors rotatius i proporcionen una corredissa per al carril. La carcassa d'un únic codificador té dos orificis a la part posterior per muntar els rails transversals. La carcassa de doble codificador és simplement dues carcasses simples fusionades en angle recte.

Vaig dissenyar aquests muntatges a fusion360 per adaptar-se a la meva elecció de codificadors i rails, l’eix del codificador té una peça curta de funda de goma estirada per ajudar-lo a agafar millor l’eix d’acer inoxidable.

Voleu que l’eix llisqui lliurement i caigui per la carcassa quan es manté vertical, però ha d’exercir prou pressió sobre el codificador per no relliscar. El que em va funcionar va ser permetre que la corredissa de l’eix es superposés amb l’eix del codificador en 0,5 mm. La goma de la fona és prou tova per deformar-se en aquesta quantitat i proporcionar una bona tracció.

Pas 3: Esquema de cablejat

Esquema de cablejat
Esquema de cablejat

El circuit és molt senzill. Els opto-sensors requereixen una mica de corrent per als díodes emissors d’IR, un sòl i resistències de tracció per als fotodíodes.

Vaig decidir 5 mA per als díodes emissors de la sèrie, en aquest codificador en concret la caiguda de tensió dels díodes és de 3,65 V. Estic fent servir un subministrament de 5 V de l’Arduino, que deixa 1,35 V per a la resistència, a 5 mA, això resulta a 270 ohm.

Es van seleccionar 10 k ohmios per als pull-ups, ja que els fotodíodes només poden enfonsar un petit corrent, i també es van utilitzar 10k ohmis per al botó de pressió. Hi ha un botó disponible per utilitzar-lo a la placa prototip ja connectat a terra, només cal que proporcioneu una resistència de tracció i connecteu-lo al pin d’entrada desitjat.

Pas 4: Codi Arduino

Codi Arduino
Codi Arduino
Codi Arduino
Codi Arduino
Codi Arduino
Codi Arduino

El codi necessita una petita explicació, ja que pot ser que el seu funcionament no sigui immediatament evident, tot i que s’hauria d’optimitzar d’aquesta manera per poder processar 3 codificadors amb la suficient rapidesa.

En primer lloc, només volem processar dades de direcció SI hi ha hagut un canvi en la posició del codificador.

canvis = valor_nou ^ valor emmagatzemat;

Per obtenir més resolució dels codificadors, vaig haver de processar vores ascendents i descendents.

En la meva configuració, la meva resolució és de 24 clics per 1 cm.

Això ens deixa alguns escenaris.

S1 és constant 0 i S2 canvia de 0 a 1

S1 és constant 0 i S2 canvia d’1 a 0

S1 és constant 1 i S2 commuta de 0 a 1

S1 és constant 1 i S2 commuta de 1 a 0

S2 és constant 0 i S1 canvia de 0 a 1

S2 és constant 0 i S1 canvia d’1 a 0

S2 és constant 1 i S1 canvia de 0 a 1

S2 és constant 1 i S1 commuta de 1 a 0

Aquestes condicions s’entenen millor a les taules de veritat anteriors, a més, cada condició dóna una “direcció”, anomenada arbitràriament 0 o 1.

Els gràfics ens donen dues pistes vitals:

1) un gràfic és l’invers complet de l’altre, de manera que si en tenim un, podem calcular l’altre simplement invertint la sortida. Invertim la sortida només si canvia un pin i no l’altre, podem triar-ne un de forma arbitrària.

2) el gràfic en si és simplement el XOR dels senyals S1 i S2. (l'altre gràfic és el NO d'això).

Ara entendre el codi és senzill.

// llegir en PORT en paral·lel // recorda que els parells adjacents pertanyen al mateix estat del codificador = PINB & 0x3f; // quins pins han canviat si hi ha algun estat diff = hold ^; // XOR senyals S1 i S2 adjacents per obtenir la taula de veritat // la manera més ràpida és fer una còpia de l'estat actual // i canviar-la a la dreta per un bit lookup = state >> 1; // ara els bits estan alineats per a l'estat XOR dir = lookup ^; // recordeu, la taula s'ha d'invertir si una // de les entrades es manté constant, no necessitem una sentència IF // per a això. Actualment, el bit de direcció desitjat // és el bit de la dreta de cada parell de la variable 'dir' // el bit de la mà esquerra no té sentit // la variable 'diff' té el bit que ha canviat 'set' // així que o bé tenim '01' o '10' // XOR això amb el byte 'dir' // invertirà o no el bit significatiu. dir ^ = diff; // actualitza ara hold variable hold = state; // si qualsevol bit ha canviat per a aquest codificador if (diff & 0x03) {// determina la direcció if (dir & 0x01) {// segons el vostre hadware i el cablejat ++ o - --z; } else {++ z; }} // idem per a la resta if (diff & 0x0c) {if (dir & 0x04) {++ y; } else {--y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } else {++ x; }}

Quan es prem el botó, enviem el valor XYZ actual a un programa de terminal.

Les dades de sèrie són lentes, però durant el funcionament normal les posicions dels codificadors no canviaran durant aquest temps de totes maneres.

Les dades s’envien com a recomptes sense processar. Podríeu fer les matemàtiques i enviar les dades en mm o polzades, etc. Em sembla que els valors en brut són igual de bons, ja que podem escalar l'objecte més endavant amb el programari.

Pas 5: primer escaneig

Primer escaneig
Primer escaneig
Primer escaneig
Primer escaneig
Primer escaneig
Primer escaneig
Primer escaneig
Primer escaneig

La recopilació dels punts és un procés lent, toco la sonda a l'extrem superior esquerre i restableixo l'Arduino.

Això posa a zero la posició com a inici.

A continuació, moveu la sonda a la ubicació de l'objectiu, manteniu-la ferma i premeu el botó "instantània".

Per a aquesta peça de mostra força gran, només vaig agafar aproximadament 140 punts, de manera que els detalls del producte final no són excel·lents.

Deseu les dades en un fitxer. PCD i afegiu la capçalera

#. PCD v.7 - Format de fitxer de dades de núvol de puntsVERSIÓ.7 CAMPS x y z TALLA 4 4 4 TIPUS F F F COMPTE 1 1 1 AMPLADA (recompte de punts) ALÇADA 1 PUNT DE VISTA 0 0 0 1 0 0 0 PUNTS (recompte de punts)

Poseu el recompte de punts a la capçalera, això és fàcil en qualsevol editor que us proporcioni números de línia.

Per sobre dels punts es poden veure a freeCad, i després s’exporten des de freeCad com a fitxer. PLY.

Obriu el fitxer. PLY a MeshLab i cobreix l'objecte. Fet !!

Recomanat: