Sadržaj:

Skener XYZ tačaka pomoću spašenih rotacionih davača: 5 koraka
Skener XYZ tačaka pomoću spašenih rotacionih davača: 5 koraka

Video: Skener XYZ tačaka pomoću spašenih rotacionih davača: 5 koraka

Video: Skener XYZ tačaka pomoću spašenih rotacionih davača: 5 koraka
Video: 04 - Primjenjena geodezija - Polarni obrazac. Kartiranje točaka (GTŠ Rijeka) 2024, Novembar
Anonim
XYZ skener tačaka pomoću spašenih rotacionih kodera
XYZ skener tačaka pomoću spašenih rotacionih kodera

Nabavivši veliki broj odbačenih rotacijskih optičkih kodera sa svog radnog mjesta, konačno sam odlučio učiniti s njima nešto zabavno/korisno.

Nedavno sam kupio novi 3D štampač za svoj dom i šta bi mu moglo biti kompliment bolje od 3D skenera! Ovaj projekat mi je također pružio savršenu priliku da uposlim svoj 3D štampač za proizvodnju potrebnih dijelova.

Supplies

Optički koderi i odgovarajući optički senzori

Arduino UNO

opcionalni prototipni štit

čelične šipke

pristup 3D štampaču

Korak 1: Optički koderi

Optički koderi
Optički koderi
Optički koderi
Optički koderi
Optički koderi
Optički koderi

Gotovo bilo koji rotacijski koder mogao bi se koristiti za ovaj projekt, pod uvjetom da vam omogući relativno veliki broj "klikova" po mm. Očigledno je da će različiti koderi zahtijevati odgovarajuće rješenje za montažu.

Koristio sam mjerač kontinuiteta da pronađem dijagram ožičenja za foto-senzore.

Korak 2: 3D štampani dijelovi

3D štampani delovi
3D štampani delovi
3D štampani delovi
3D štampani delovi

Ovi dijelovi sadrže rotacijske davače i pružaju klizni okvir za šinu. Kućište pojedinačnog kodera ima dvije rupe na stražnjoj strani na koje se mogu montirati poprečne šine. Dvostruko kućište kodera jednostavno su dva pojedinačna kućišta spojena pod pravim kutom.

Dizajnirao sam ove nosače na fusion360 kako bi odgovarali mom izboru kodera i šina. Vratilo kodera ima kratki komad gumiranog omotača praćke koji mu pomaže da bolje prianja uz vratilo od nehrđajućeg čelika.

Želite da osovina slobodno klizi i da pada kroz kućište ako se drži okomito, ali mora vršiti dovoljan pritisak na davač da ne sklizne. Ono što mi je uspjelo bilo je dopustiti da se klizač vratila preklopi s vratilom kodera za 0,5 mm. Guma za praćku je dovoljno mekana da se za tu količinu deformira i osigura dobro prianjanje.

Korak 3: Shema ožičenja

Shema ožičenja
Shema ožičenja

Krug je vrlo jednostavan. Opto-senzori zahtijevaju određenu struju za diode s IC odašiljačem, uzemljenje i pull-up otpornike za foto-diode.

Odlučio sam se za 5mA za serijske emiterske diode, u ovom koderu pad napona na diodama je 3,65V. Koristim napajanje od 5V iz Arduina, koje ostavlja 1,35 V za otpornik, na 5 mA ovo radi na 270 ohma.

10 k ohma je odabrano za izvlačenje jer foto-diode mogu potopiti samo malu struju, 10 k oma je također korišteno za pritiskanje tipke. Dostupno je dugme za upotrebu na prototipnoj ploči koja je već spojena na masu, samo mu priložite pull-up otpornik i povežite ga sa željenim ulaznim pinom.

Korak 4: Arduino kod

Arduino kod
Arduino kod
Arduino kod
Arduino kod
Arduino kod
Arduino kod

Kodu je potrebno malo objašnjenja jer njegov rad možda nije odmah očit, no ipak ga je trebalo optimizirati na ovaj način da bi mogao dovoljno brzo obraditi 3 kodera.

Prvo želimo samo obraditi podatke o smjeru AKO je došlo do promjene položaja davača.

promjene = nova_vrijednost ^ pohranjena vrijednost;

Da bih dobio veću rezoluciju od svojih kodera, morao sam obraditi i rastuće i padajuće rubove.

Na mojim postavkama moja rezolucija je 24 klika po 1 cm.

Ovo nam ostavlja nekoliko scenarija.

S1 je konstanta 0 i S2 se prebacuje s 0 na 1

S1 je konstanta 0 i S2 se prebacuje s 1 na 0

S1 je konstanta 1 i S2 prebacuje od 0 do 1

S1 je konstanta 1 i S2 prebacuje sa 1 na 0

S2 je konstanta 0 i S1 se prebacuje s 0 na 1

S2 je konstanta 0 i S1 se prebacuje s 1 na 0

S2 je konstanta 1 i S1 prebacuje od 0 do 1

S2 je konstanta 1 i S1 prebacuje sa 1 na 0

Ovi uvjeti su bolje razumljivi u gornjim tablicama istine, a svaki uvjet daje 'smjer', proizvoljno nazvan 0 ili 1.

Grafikoni nam daju dva vitalna traga:

1) jedan grafikon je potpuno inverzan drugom, pa ako ga imamo, možemo lako izračunati drugi jednostavnim preokretanjem izlaza. Invertiramo izlaz samo ako se mijenja jedan pin, a drugi ne, jedan možemo izabrati proizvoljno.

2) sam grafikon je jednostavno XOR signala S1 i S2. (drugi grafikon je NE ovoga).

Sada je razumijevanje koda jednostavno.

// paralelno čitati u PORT -u // zapamtiti susjedni parovi pripadaju istom stanju kodera = PINB & 0x3f; // koji su se pinovi promijenili ako je bilo koji diff = hold ^ stanje; // XOR susjedni S1 i S2 signali za dobijanje tablice istinitosti // najjednostavniji način je napraviti kopiju trenutnog stanja // i pomaknuti ga udesno pomoću jednog pretraživanja bita = stanje >> 1; // sada su bitovi poravnati za XOR dir = lookup ^ stanje; // zapamtite, tablicu je potrebno obrnuti ako je jedan od ulaza ostao konstantan, za to nam ne treba IF // izraz. Trenutno je željeni bit smjera // desni bit svakog para u 'dir' varijabli // lijevi bit je besmislen // varijabla 'diff' ima bit koji je promijenio 'set' // pa imamo ili '01' ili '10' // XOR ovo sa 'dir' bajtom će ili // obrnuti ili ne smisleni bit. dir ^= razlika; // sada ažuriraj varijablu hold hold = state; // ako se bilo koji bit promijenio za ovaj koder if (diff & 0x03) {// odredite smjer if (dir & 0x01) {// na osnovu vašeg hardvera i ožičenja ili ++ ili ---z; } else {++ z; }} // isto za ostale if (diff & 0x0c) {if (dir & 0x04) {++ y; } else {--y; }} if (razlika & 0x30) {if (red & 0x10) {--x; } else {++ x; }}

Kada pritisnete gumb, šaljemo trenutnu vrijednost XYZ u terminalni program.

Serijski podaci su spori, ali tijekom normalnog rada položaji kodera se ionako neće mijenjati za to vrijeme.

Podaci se šalju kao neobrađeni brojevi. Mogli biste izračunati i poslati podatke u mm ili inčima itd. Smatram da su sirove vrijednosti jednako dobre jer kasnije možemo skalirati objekt u softveru.

Korak 5: Prvo skeniranje

Prvo skeniranje
Prvo skeniranje
Prvo skeniranje
Prvo skeniranje
Prvo skeniranje
Prvo skeniranje
Prvo skeniranje
Prvo skeniranje

Prikupljanje bodova je spor proces, spustio sam sondu u gornji lijevi kut i resetirao Arduino.

Ovo poništava poziciju doma.

Zatim pomaknite sondu na lokaciju na meti, držite je mirno i pritisnite dugme 'snapshot'.

Za ovaj prilično veliki uzorak uzeo sam samo ~ 140 bodova, pa detalji nisu sjajni na konačnom proizvodu.

Spremite podatke u. PCD datoteku i dodajte zaglavlje

#. PCD v.7 - Format datoteke podataka u oblaku tačaka VERZIJA, 7 POLJA x y z VELIČINA 4 4 4 TIP F F F CO COUNT 1 1 1 ŠIRINA (vaš broj bodova) VISOKA 1 VIEWPOINT 0 0 0 1 0 0 0 BODOVA (vaš broj bodova)

Stavite broj bodova u zaglavlje, to je lako za bilo koji uređivač koji vam daje brojeve redova.

Iznad točaka možete vidjeti u freeCad -u, zatim se izvoze iz freeCad -a kao. PLY datoteku.

Otvorite. PLY na MeshLabu i isplovite objekt. Gotovo !!

Preporučuje se: