Sadržaj:

Skener točke XYZ pomoću spašenih rotacijskih davača: 5 koraka
Skener točke XYZ pomoću spašenih rotacijskih davača: 5 koraka

Video: Skener točke XYZ pomoću spašenih rotacijskih davača: 5 koraka

Video: Skener točke XYZ pomoću spašenih rotacijskih davača: 5 koraka
Video: SCP-610 Плоть, что ненавидит (все документы и журналы) 2024, Srpanj
Anonim
Skener točke XYZ pomoću spašenih rotacijskih davača
Skener točke XYZ pomoću spašenih rotacijskih davača

Nabavivši prilično velik 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 pisač za svoj dom i što bi mu moglo biti kompliment bolje od 3D skenera! Ovaj projekt mi je također pružio savršenu priliku da uposlim svoj 3D pisač za proizvodnju potrebnih dijelova.

Pribor

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

Arduino UNO

opcijski štit za izradu prototipova

čelične šine

pristup 3D pisač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 ispisani dijelovi

3D ispisani dijelovi
3D ispisani dijelovi
3D ispisani dijelovi
3D ispisani dijelovi

Ovi dijelovi smještaju rotacijske davače i pružaju kliznik za tračnicu. Kućište jednog davača ima stražnje dvije rupe za montiranje poprečnih tračnica. 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 davača i tračnica, osovina davača ima kratki komad gumiranog omotača praćke kako bi bolje prianjao na osovinu 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 dovoljno je 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 IC odašiljača, uzemljenje i otpornike za izvlačenje za foto-diode.

Odlučio sam se za 5mA za serijske odašiljačke diode, u ovom posebnom 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 odabrano je za izvlačenje jer foto-diode mogu potopiti samo malu struju, 10 k ohma je također korišteno za tipku. Gumb je dostupan za upotrebu na prototipnoj ploči koja je već spojena na masu, samo mu priložite pull-up otpornik i spojite ga na željeni ulazni pin.

Korak 4: Arduino kod

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

Kôd treba malo objasniti 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;

Kako bih dobio veću razlučivost od svojih kodera, morao sam obraditi i rastuće i padajuće rubove.

Na mojim postavkama moja razlučivost 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 mijenja od 0 do 1

S1 je konstanta 1, a S2 mijenja od 1 do 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 mijenja od 0 do 1

S2 je konstanta 1, a S1 mijenja od 1 do 0

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

Grafikoni nam daju dva vitalna traga:

1) jedan je grafikon potpuna inverznost drugog, 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 čitanje u PORT -u // zapamtite da susjedni parovi pripadaju istom stanju kodera = PINB & 0x3f; // koji su se pinovi promijenili ako je bilo koji diff = hold ^ stanje; // XOR susjedni signali S1 i S2 za dobivanje tablice istinitosti // najjednostavniji način je napraviti kopiju trenutnog stanja // i pomaknuti ga udesno za jedno pretraživanje bita = stanje >> 1; // sada su bitovi poravnati za XOR dir = lookup ^ stanje; // zapamtite, tablicu je potrebno preokrenuti 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 s 'dir' bajtom će ili // obrnuti ili ne smisleni bit. dir ^= razlika; // sada ažuriraj varijablu zadržavanja hold = stanje; // ako se bilo koji bit promijenio za ovaj koder if (diff & 0x03) {// odredi smjer if (dir & 0x01) {// na temelju vašeg hardvera i ožičenja ili ++ ili ---z; } else {++ z; }} // isto za ostalo if (diff & 0x0c) {if (dir & 0x04) {++ y; } else {--y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } else {++ x; }}

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

Serijski podaci su spori, ali tijekom normalnog rada položaji davača 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

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

Ovo nulira poziciju doma.

Zatim pomaknite sondu na mjesto na meti, držite je mirno i pritisnite gumb '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 točaka VERSION.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 POGLEDA 0 0 0 1 0 0 0 BODOVA (vaš broj bodova)

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

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

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

Preporučeni: