Indholdsfortegnelse:

XYZ -punktscanner ved hjælp af bjærgede roterende encodere: 5 trin
XYZ -punktscanner ved hjælp af bjærgede roterende encodere: 5 trin

Video: XYZ -punktscanner ved hjælp af bjærgede roterende encodere: 5 trin

Video: XYZ -punktscanner ved hjælp af bjærgede roterende encodere: 5 trin
Video: 3 февраля прибыльный четверг нарисуйте эту цифру на руке. Как быстро привлечь деньги в свою жизнь 2024, Juli
Anonim
XYZ -punktscanner ved hjælp af bjærgede roterende encodere
XYZ -punktscanner ved hjælp af bjærgede roterende encodere

Efter at have erhvervet et stort antal kasserede roterende optiske encodere fra mit arbejdssted, besluttede jeg endelig at gøre noget sjovt/nyttigt med dem.

Jeg har for nylig købt en ny 3D -printer til mit hjem, og hvad kunne komplimentere den bedre end en 3D -scanner! Dette projekt gav mig også den perfekte mulighed for at anvende min 3D -printer til at fremstille de nødvendige dele.

Forbrugsvarer

Optiske encodere og tilsvarende optiske sensorer

Arduino UNO

valgfri prototypeskjold

stålskinner

adgang til en 3D -printer

Trin 1: De optiske kodere

De optiske kodere
De optiske kodere
De optiske kodere
De optiske kodere
De optiske kodere
De optiske kodere

Næsten enhver roterende encoder kunne bruges til dette projekt, så længe det gav dig et relativt højt antal 'klik' pr. Mm. Det er klart, at forskellige encodere vil kræve en passende monteringsløsning.

Jeg brugte en kontinuitetsmåler til at spore ledningsdiagrammet til fotosensorerne.

Trin 2: 3D -printede dele

3D -trykte dele
3D -trykte dele
3D -trykte dele
3D -trykte dele

Disse dele huser de roterende encodere og udgør et dias til skinnen. Enkelt encoderhuset har to huller i ryggen, som tværskinnerne kan monteres på. Dobbelt encoderhuset er simpelthen to enkelthuse smeltet sammen i de rette vinkler.

Jeg designede disse beslag på fusion360, så de passede til mit valg af encodere og skinner, akselens encoder har et kort stykke slynge af gummiskede, der hjælper med at gribe det rustfrie stålaksel bedre.

Du vil have akslen til at glide frit og falde gennem huset, når den holdes lodret, men den skal udøve nok tryk på encoderen til ikke at glide. Det, der fungerede for mig, var at lade slæden til akslen overlappe med encoderakslen med 0,5 mm. Slangeskumgummiet er blødt nok til at deformeres med den mængde og giver god trækkraft.

Trin 3: Ledningsdiagram

Ledningsdiagram
Ledningsdiagram

Kredsløbet er meget enkelt. Optosensorerne kræver noget strøm til IR-emitterdioderne, en jord og pull-up modstande til fotodioderne.

Jeg besluttede mig for 5mA for seriens emitterdioder, i denne særlige encoder er spændingsfaldet over dioderne 3,65V. Jeg bruger en 5V forsyning fra Arduino, der efterlader 1,35V for modstanden, ved 5mA virker det til at være 270 ohm.

10k ohm blev valgt til pull-ups, da fotodioderne kun kan synke en lille strøm, 10k ohm blev også brugt til trykknappen. Der er en knap til rådighed til brug på prototypekortet, der allerede er forbundet til jorden, bare forsyn den med en pull-up-modstand og led den til den ønskede input-pin.

Trin 4: Arduino -kode

Arduino kode
Arduino kode
Arduino kode
Arduino kode
Arduino kode
Arduino kode

Koden har brug for en lille forklaring, da dens drift muligvis ikke umiddelbart er indlysende, men alligevel skulle den optimeres på denne måde for at kunne behandle 3 encodere hurtigt nok.

For det første vil vi kun behandle retningsdata, HVIS der er sket en ændring i encoderpositionen.

ændringer = ny_værdi ^ lagret værdi;

For at få mere opløsning fra mine encodere måtte jeg behandle både stigende og faldende kanter.

På mit setup er min opløsning 24 klik pr. 1 cm.

Dette efterlader os med et par scenarier.

S1 er konstant 0 og S2 skiftede fra 0 til 1

S1 er konstant 0 og S2 skiftede fra 1 til 0

S1 er konstant 1 og S2 skifter fra 0 til 1

S1 er konstant 1 og S2 skifter fra 1 til 0

S2 er konstant 0 og S1 skiftede fra 0 til 1

S2 er konstant 0 og S1 skiftede fra 1 til 0

S2 er konstant 1 og S1 skifter fra 0 til 1

S2 er konstant 1 og S1 skifter fra 1 til 0

Disse betingelser er bedre forstået i sandhedstabellerne ovenfor, også hver betingelse giver en 'retning', der vilkårligt hedder 0 eller 1.

Diagrammerne giver os to vigtige spor:

1) det ene diagram er det fuldstændige inverse af det andet, så hvis vi har et, kan vi let beregne det andet ved blot at vende output. Vi inverterer kun output, hvis den ene pin ændrer sig og ikke den anden, vi kan vælge en vilkårligt.

2) selve diagrammet er simpelthen XOR for S1- og S2 -signalerne. (det andet diagram er IKKE af dette).

Nu er forståelsen af koden enkel.

// læs parallelt i PORT // husk tilstødende par tilhører samme encoder -tilstand = PINB & 0x3f; // hvilke pins har ændret sig, hvis nogen diff = hold ^ tilstand; // XOR tilstødende S1 og S2 signaler for at få sandhedstabel // den letteste måde er at lave en kopi af den aktuelle tilstand // og flytte den til højre med et bit opslag = tilstand >> 1; // nu er bits justeret til XOR dir = opslag ^ tilstand; // husk, tabellen skal vendes, hvis en // af inputene forblev konstant, vi har ikke brug for en IF // -sætning til dette. I øjeblikket er den ønskede retningsbit // højre bit for hvert par i 'dir' -variablen // venstre bit er meningsløs //' diff '-variablen har den bit, der ændrede' set '// så vi enten har '01' eller '10' // XOR dette med 'dir' byte vil enten // invertere eller ikke den meningsfulde bit. dir ^= diff; // opdater nu hold variabel hold = tilstand; // hvis en bit har ændret sig til denne encoder hvis (diff & 0x03) {// bestemme retningen hvis (dir & 0x01) {// baseret på din hadware og ledninger enten ++ eller ---z; } andet {++ z; }} // ditto for resten hvis (diff & 0x0c) {if (dir & 0x04) {++ y; } andet { -y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } andet {++ x; }}

Når der trykkes på knappen, sender vi den aktuelle XYZ -værdi til et terminalprogram.

De serielle data er langsomme, men under normal drift ændres positionerne for koderne alligevel ikke i løbet af denne tid.

Dataene sendes som råtællinger. Du kan lave matematik og sende data i mm eller tommer osv. Jeg finder råværdier lige så gode, fordi vi kan skalere objektet senere i software.

Trin 5: Første scanning

Første scanning
Første scanning
Første scanning
Første scanning
Første scanning
Første scanning
Første scanning
Første scanning

Det er en langsom proces at samle punkterne, jeg gulvfører sonden i øverste venstre hjørne og nulstiller Arduino.

Dette nuller positionen som hjem.

Flyt derefter sonden til placeringen på målet, hold den stille og tryk på knappen 'snapshot'.

For dette temmelig store prøveemne tog jeg kun ~ 140 point, så detaljer er ikke store på det endelige produkt.

Gem dataene i en. PCD -fil, og tilføj overskriften

#. PCD v.7 - Point Cloud Data filformatVERSION.7 FELTER x y z STØRRELSE 4 4 4 TYPE F F F TÆL 1 1 1 BREDDE (dit pointtal) HØJDE 1 VIEWPOINT 0 0 0 1 0 0 0 PUNKTER (dit pointtal)

Sæt din pointtælling i overskriften, dette er let for enhver editor, der giver dig linjenumre.

Over prikkerne kan ses i freeCad, eksporteres de derefter fra freeCad som. PLY -fil.

Åbn. PLY på MeshLab og overflade objektet. Færdig!!

Anbefalede: