Talaan ng mga Nilalaman:

XYZ Point Scanner Gamit ang Salvaged Rotary Encoder: 5 Hakbang
XYZ Point Scanner Gamit ang Salvaged Rotary Encoder: 5 Hakbang

Video: XYZ Point Scanner Gamit ang Salvaged Rotary Encoder: 5 Hakbang

Video: XYZ Point Scanner Gamit ang Salvaged Rotary Encoder: 5 Hakbang
Video: 3D Scanned Point Cloud Dot PLY File Convert to STL For 3D Printing - Meshlab - Meshmixer 2024, Hulyo
Anonim
XYZ Point Scanner Gamit ang Salvaged Rotary Encoder
XYZ Point Scanner Gamit ang Salvaged Rotary Encoder

Ang pagkakaroon ng nakuha ng isang malaking bilang ng mga itinapon na umiinog na mga encoder ng optikal mula sa aking lugar ng trabaho, sa wakas ay nagpasya akong gumawa ng isang bagay na masaya / kapaki-pakinabang sa kanila.

Kamakailan ay bumili ako ng isang bagong 3D printer para sa aking tahanan at kung ano ang maaaring papuri nito nang mas mahusay kaysa sa isang 3D scanner! Ang proyektong ito ay nagbigay din sa akin ng perpektong pagkakataon na gamitin ang aking 3D printer upang makagawa ng mga kinakailangang bahagi.

Mga gamit

Mga optikong encoder at kaukulang optikong sensor

Arduino UNO

opsyonal na prototyping na kalasag

riles ng bakal-bar

pag-access sa isang 3D printer

Hakbang 1: Ang Mga Optical Encoder

Ang Mga Optical Encoder
Ang Mga Optical Encoder
Ang Mga Optical Encoder
Ang Mga Optical Encoder
Ang Mga Optical Encoder
Ang Mga Optical Encoder

Halos anumang rotary encoder ay maaaring magamit para sa proyektong ito, hangga't binigyan ka nito ng isang medyo mataas na bilang ng mga 'pag-click' bawat mm. Malinaw na ang iba't ibang mga encoder ay mangangailangan ng angkop na solusyon sa pag-mount.

Gumamit ako ng isang meter ng pagpapatuloy upang masubaybayan ang diagram ng mga kable para sa mga sensor ng larawan.

Hakbang 2: Mga Naka-print na Bahaging 3D

Mga Naka-print na Bahaging 3D
Mga Naka-print na Bahaging 3D
Mga Naka-print na Bahaging 3D
Mga Naka-print na Bahaging 3D

Ang mga bahaging ito ay nakalagay ang rotary encoder at nagbibigay ng slide para sa riles. Ang solong pabahay ng encoder ay may dalawang butas sa likod para sa mga daang-bakal na naka-mount sa. Ang dalawahang encoder na pabahay ay simpleng dalawang solong pabahay na pinagtagpo sa tamang mga anggulo.

Dinisenyo ko ang mga pag-mount na ito sa fusion360 upang umangkop sa aking pagpipilian ng mga encoder at daang-bakal, ang poste ng encoder ay may isang maikling piraso ng lambanog ng goma na tirador, upang matulungan itong mahawakan nang mas mahusay ang shaft na hindi kinakalawang na asero.

Nais mo na ang baras ay malayang mag-slide at mahulog sa pamamagitan ng pabahay kapag hinawakan nang patayo, ngunit dapat itong bigyan ng sapat na presyon sa encoder upang hindi madulas. Ang nagtrabaho para sa akin ay payagan ang slide para sa baras na magkakapatong sa encoder shaft ng 0.5mm. Ang slingshot rubber ay sapat na malambot upang mabago ang halaga sa pamamagitan ng halagang iyon at magbigay ng mahusay na lakas.

Hakbang 3: Diagram ng Mga Kable

Diagram ng Kable
Diagram ng Kable

Napaka-simple ng circuit. Ang mga opto-sensor ay nangangailangan ng ilang kasalukuyang para sa IR emitter diode, isang ground at pull-up resistors para sa mga photo-diode.

Nagpasya ako sa 5mA para sa mga in-series emitter diode, sa partikular na encoder na ito ng boltahe na bumaba sa mga diode ay 3.65V. Gumagamit ako ng isang 5V na supply mula sa Arduino, na nag-iiwan ng 1.35V para sa risistor, sa 5mA gumagana ito upang maging 270 ohm.

Ang 10k ohm ay napili para sa mga pull-up dahil ang mga photo-diode ay maaari lamang lumubog ng isang maliit na kasalukuyang, 10k ohm ay ginamit din para sa pindutan ng push. Mayroong isang pindutan na magagamit para magamit sa prototype board na konektado sa lupa, bigyan lamang ito ng isang pull-up risistor at i-wire ito sa nais na pin na input.

Hakbang 4: Arduino Code

Code ng Arduino
Code ng Arduino
Code ng Arduino
Code ng Arduino
Code ng Arduino
Code ng Arduino

Ang code ay nangangailangan ng kaunting paliwanag dahil ang operasyon nito ay maaaring hindi kaagad halata, subalit kailangang ma-optimize sa ganitong paraan upang maiproseso nang mabilis ang 3 encoder.

Una gusto lamang namin iproseso ang data ng direksyon KUNG nagkaroon ng pagbabago sa posisyon ng encoder.

mga pagbabago = new_value ^ nakaimbak na halaga;

Upang makakuha ng karagdagang resolusyon mula sa aking mga encoder kailangan kong iproseso ang parehong tumataas at bumabagsak na mga gilid.

Sa aking pag-set up ang aking resolusyon ay 24 na pag-click bawat 1cm.

Nag-iiwan ito sa amin ng ilang mga sitwasyon.

Ang S1 ay pare-pareho 0 at ang S2 ay nagpalipat-lipat mula 0 hanggang 1

Ang S1 ay pare-pareho 0 at ang S2 ay nagpalipat-lipat mula 1 hanggang 0

Ang S1 ay pare-pareho ang 1 at S2 na toggle mula 0 hanggang 1

Ang S1 ay pare-pareho ang 1 at S2 na toggle mula 1 hanggang 0

Ang S2 ay pare-pareho 0 at ang S1 ay na-toggle mula 0 hanggang 1

Ang S2 ay pare-pareho 0 at ang S1 ay na-toggle mula 1 hanggang 0

Ang S2 ay pare-pareho ang 1 at S1 na toggle mula 0 hanggang 1

Ang S2 ay pare-pareho ang 1 at S1 na toggle mula 1 hanggang 0

Ang mga kundisyong ito ay mas nauunawaan sa mga talahanayan ng katotohanan sa itaas, din ang bawat kundisyon ay magbubunga ng isang 'direksyon', na arbitraryong pinangalanang 0 o 1.

Binibigyan kami ng mga tsart ng dalawang mahahalagang pahiwatig:

1) ang isang tsart ay ang kumpletong kabaligtaran ng iba pa, kaya't kung mayroon tayong isa, madali nating makalkula ang iba pa sa pamamagitan lamang ng pagbaligtad ng output. Ibabaliktad lamang namin ang output kung ang isang pin ay nagbabago at hindi ang isa, maaari kaming pumili ng isang arbitraryo.

2) ang tsart mismo ay simpleng XOR ng mga S1 at S2 signal. (ang iba pang tsart ay HINDI sa mga ito).

Ngayon ang pag-unawa sa code ay simple.

// read in PORT in parallel // tandaan ang mga katabing pares na kabilang sa parehong estado ng encoder = PINB & 0x3f; // anong pin ang nagbago kung may diff = hold ^ state; // XOR katabi ng S1 at S2 na mga signal upang makakuha ng talahanayan ng katotohanan // pinakamasayang paraan ay upang makagawa ng isang kopya ng kasalukuyang estado // at ilipat ito sa kanan sa pamamagitan ng isang bit na pagtingin = estado >> 1; // now bits are align for XOR dir = lookup ^ state; // tandaan, ang talahanayan ay kailangang baligtarin kung ang isa // sa mga input ay nanatiling pare-pareho, hindi namin kailangan ng isang pahayag na IF // para dito. Sa kasalukuyan ang nais na direksyon bit // ay ang kanang kamay na bit ng bawat pares sa variable na 'dir' // walang kahulugan ang kaliwang kamay // ang variable na 'diff' ay may bit na nagbago ng 'set' // kaya't mayroon kaming alinman Ang '01' o '10' // XOR na ito sa pamamagitan ng 'dir' byte ay alinman sa // baligtarin o hindi ang makahulugang kaunting. dir ^ = naiiba; // now update hold variable hold = state; // kung alinman sa bit ay nagbago para sa encoder na ito kung (diff & 0x03) {// matukoy ang direksyon kung (dir & 0x01) {// batay sa iyong hadware at mga kable alinman sa ++ o - --z; } iba pa {++ z; }} // ditto para sa natitira kung (diff & 0x0c) {kung (dir & 0x04) {++ y; } iba pa {--y; }} kung (diff & 0x30) {kung (dir & 0x10) {--x; } iba pa {++ x; }}

Kapag pinindot ang pindutan ipinapadala namin ang kasalukuyang halaga ng XYZ sa isang programa ng terminal.

Ang serial data ay mabagal, ngunit sa panahon ng normal na operasyon ang mga posisyon ng mga encoder ay hindi magbabago sa oras na ito pa rin.

Ipinadala ang data bilang hilaw na bilang. Maaari mong gawin ang matematika at ipadala ang data sa mm o pulgada atbp. Nahanap ko ang mga hilaw na halaga ay kasing ganda dahil maaari nating sukatin ang bagay sa paglaon sa software.

Hakbang 5: Unang Pag-scan

Unang pagsususri
Unang pagsususri
Unang pagsususri
Unang pagsususri
Unang pagsususri
Unang pagsususri
Unang pagsususri
Unang pagsususri

Ang pagtitipon ng mga puntos ay isang mabagal na proseso, isinalaw ko ang pagsisiyasat sa kaliwang sulok sa itaas at i-reset ang Arduino.

Ito ang zero na posisyon bilang tahanan.

Pagkatapos ay ilipat ang probe sa lokasyon sa target, hawakan ito nang matatag at pindutin ang pindutan na 'snapshot'.

Para sa halip malaking sample na piraso na kinuha ko lamang ~ 140 puntos, kaya't ang detalye ay hindi maganda sa pangwakas na produkto.

I-save ang data sa isang. PCD file, at idagdag ang header

#. PCD v.7 - Point Cloud Data format formatVERSION.7 FIELDS x y z SIZE 4 4 4 TYPE F F F COUNT 1 1 1 LAKAS (bilang ng iyong puntos) HEIGHT 1 VIEWPOINT 0 0 0 1 0 0 0 POINTS (ang iyong bilang ng puntos)

Ilagay ang bilang ng puntos sa header, madali ito sa anumang editor na nagbibigay sa iyo ng mga numero ng linya.

Sa itaas ng mga tuldok ay makikita sa freeCad, pagkatapos ay mai-export mula sa freeCad bilang. PLY file.

Buksan ang. PLY sa MeshLab at i-ibabaw ang object. Tapos na !!

Inirerekumendang: