INHOUDSOPGAWE:

XYZ -puntskandeerder met behulp van gebergde roterende enkoders: 5 stappe
XYZ -puntskandeerder met behulp van gebergde roterende enkoders: 5 stappe

Video: XYZ -puntskandeerder met behulp van gebergde roterende enkoders: 5 stappe

Video: XYZ -puntskandeerder met behulp van gebergde roterende enkoders: 5 stappe
Video: Part 6 - Walden Audiobook by Henry David Thoreau (Chs 16-18) 2024, Julie
Anonim
XYZ -puntskandeerder met behulp van gebergde roterende enkoders
XYZ -puntskandeerder met behulp van gebergde roterende enkoders

Nadat ek 'n groot aantal weggegooide roterende optiese encoders van my werk gekry het, het ek uiteindelik besluit om iets lekker/nuttig daarmee te doen.

Ek het onlangs 'n nuwe 3D -drukker vir my huis gekoop, en wat kan dit beter komplimenteer as 'n 3D -skandeerder! Hierdie projek het my ook die perfekte geleentheid gebied om my 3D -drukker te gebruik om die benodigde onderdele te vervaardig.

Voorrade

Optiese encoders en ooreenstemmende optiese sensors

Arduino UNO

opsionele prototipe skild

staalstaafrails

toegang tot 'n 3D -drukker

Stap 1: Die optiese enkoders

Die optiese enkoders
Die optiese enkoders
Die optiese enkoders
Die optiese enkoders
Die optiese enkoders
Die optiese enkoders

Byna elke roterende enkodeerder kan vir hierdie projek gebruik word, solank dit 'n relatief groot aantal 'klik' per mm bied. Dit is duidelik dat verskillende encoders 'n geskikte monteeroplossing benodig.

Ek het 'n kontinuïteitsmeter gebruik om die bedradingsdiagram vir die fotosensors op te spoor.

Stap 2: 3D -gedrukte onderdele

3D -gedrukte onderdele
3D -gedrukte onderdele
3D -gedrukte onderdele
3D -gedrukte onderdele

Hierdie dele huisves die draaikoders en bied 'n glybaan vir die spoor. Die enkel encoder behuising het twee gate in die rug vir die dwars relings om te monteer. Die dubbele encoder -behuising is eenvoudig twee enkelhuise wat in die regte hoeke saamgesmelt is.

Ek het hierdie houers op fusion360 ontwerp om by my keuse van encoders en relings te pas; die as van die encoder het 'n kort stuk slingervaste rubbermantel om dit beter by die as van vlekvrye staal te hou.

U wil hê die as moet vrylik gly en deur die behuizing val as dit vertikaal vasgehou word, maar dit moet genoeg druk op die encoder uitoefen om nie te gly nie. Wat vir my gewerk het, was om die skyfie vir die as met 0,5 mm te laat oorvleuel met die encoder -as. Die slingervel rubber is sag genoeg om met die hoeveelheid te vervorm en goeie trekkrag te bied.

Stap 3: Bedradingsdiagram

Bedradingsdiagram
Bedradingsdiagram

Die kring is baie eenvoudig. Die optosensors benodig 'n mate van stroom vir die IR-emitterdiodes, 'n grond- en optrekweerstand vir die fotodiodes.

Ek het besluit op 5mA vir die in-reeks emitterdiodes; in hierdie spesifieke encoder is die spanningsval oor die diodes 3,65V. Ek gebruik 'n 5V -toevoer van die Arduino, wat 1,35V oorlaat vir die weerstand, by 5mA werk dit uit op 270 ohm.

10k ohm is gekies vir die pull-ups, aangesien die fotodiodes slegs 'n klein stroom kan sink; 10k ohm is ook gebruik vir die drukknop. Daar is 'n knoppie beskikbaar vir gebruik op die prototipe-bord wat reeds op die aarde gekoppel is; voorsien dit net van 'n optrekweerstand en dra dit na die gewenste invoerpen.

Stap 4: Arduino -kode

Arduino -kode
Arduino -kode
Arduino -kode
Arduino -kode
Arduino -kode
Arduino -kode

Die kode benodig 'n bietjie verduideliking, aangesien die werking daarvan nie onmiddellik voor die hand liggend is nie, maar dit moes op hierdie manier geoptimaliseer word om 3 encoders vinnig genoeg te kon verwerk.

Eerstens wil ons slegs rigtingsdata verwerk AS daar 'n verandering in die encoder -posisie was.

veranderings = nuwe_waarde ^ gestoorde waarde;

Om meer resolusie van my encoders te kry, moes ek stygende en dalende rande verwerk.

Op my opstelling is my resolusie 24 klik per 1 cm.

Dit laat ons met 'n paar scenario's.

S1 is konstant 0 en S2 wissel van 0 na 1

S1 is konstant 0 en S2 wissel van 1 na 0

S1 is konstant 1 en S2 wissel van 0 na 1

S1 is konstant 1 en S2 wissel van 1 na 0

S2 is konstant 0 en S1 wissel van 0 na 1

S2 is konstant 0 en S1 wissel van 1 na 0

S2 is konstant 1 en S1 wissel van 0 na 1

S2 is konstant 1 en S1 wissel van 1 na 0

Hierdie toestande word beter verstaan in die waarheidstabelle hierbo, ook lewer elke voorwaarde 'n 'rigting', willekeurig 0 of 1 genoem.

Die kaarte gee ons twee belangrike leidrade:

1) die een grafiek is die volledige omgekeerde van die ander, so as ons een het, kan ons die ander een maklik bereken deur die uitset eenvoudig om te draai. Ons draai die uitset slegs om as die een pen verander en nie die ander nie, ons kan die een willekeurig kies.

2) die grafiek self is bloot die XOR van die S1- en S2 -seine. (die ander grafiek is die NIE hiervan nie).

Om die kode te verstaan, is eenvoudig.

// lees parallel in PORT // onthou aangrensende pare behoort tot dieselfde encoder -toestand = PINB & 0x3f; // watter penne verander het as daar enige verskil = hou ^ toestand is; // XOR aangrensende S1- en S2 -seine om die waarheidstabel te kry // die maklikste manier is om 'n afskrif van die huidige toestand te maak // en dit met 'n bietjie opsoek na regs te skuif = toestand >> 1; // nou word stukkies in lyn gebring vir XOR dir = opzoek ^ toestand; // onthou, die tabel moet omgekeer word as een // van die insette konstant bly; ons het nie 'n IF // verklaring hiervoor nodig nie. Tans is die gewenste rigtingbit // die regterkantste bit van elke paar in die 'dir' -veranderlike // die bit van die linkerkant is betekenisloos // die' diff 'veranderlike het die bit wat' set '// verander het, sodat ons óf het '01' of '10' // XOR dit met die 'dir' byte sal // die betekenisvolle bietjie omkeer of nie. dir ^= verskil; // werk nou hou veranderlike hou = toestand op; // as een van die bitjies vir hierdie encoder verander het as (diff & 0x03) {// bepaal die rigting as (dir & 0x01) {// gebaseer op jou hadware en bedrading óf ++ óf ---z; } anders {++ z; }} // dito vir die res as (diff & 0x0c) {if (dir & 0x04) {++ y; } anders { -j; }} if (diff & 0x30) {if (dir & 0x10) {--x; } anders {++ x; }}

As u op die knoppie druk, stuur ons die huidige XYZ -waarde na 'n terminale program.

Die reeksdata is stadig, maar tydens normale werking sal die posisies van die encoders in elk geval nie gedurende hierdie tyd verander nie.

Die data word as rou tellings gestuur. U kan die wiskunde doen en die data in mm of duim stuur, ens. Ek vind dat rou waardes net so goed is omdat ons die voorwerp later in sagteware kan skaal.

Stap 5: Eerste skandering

Eerste skandering
Eerste skandering
Eerste skandering
Eerste skandering
Eerste skandering
Eerste skandering
Eerste skandering
Eerste skandering

Dit is 'n stadige proses om die punte bymekaar te maak, ek vloer die sonde in die linker boonste hoek en stel die Arduino terug.

Dit nul die posisie as tuiste.

Beweeg dan die sonde na die plek op die teiken, hou dit konstant en druk op die 'snapshot' knoppie.

Vir hierdie taamlik groot monsterstuk het ek slegs ~ 140 punte geneem, so detail is nie goed oor die finale produk nie.

Stoor die data in 'n. PCD -lêer en voeg die opskrif by

#. PCD v.7 - Puntwolk -data lêerformaat VERSIE.7 VELDE x y z GROOTTE 4 4 4 TIPE F F F TEL 1 1 1 WIDTH (u puntetelling) HOOGTE 1 VIEWPOINT 0 0 0 1 0 0 0 PUNTE (u puntetelling)

Sit u puntetelling in die kop, dit is maklik vir enige redakteur wat u reëlnommers bied.

Bo die kolletjies kan in freeCad gesien word, word dit dan uit freeCad uitgevoer as 'n. PLY -lêer.

Maak die. PLY op MeshLab oop en maak die voorwerp oop. Klaar !!

Aanbeveel: