Innholdsfortegnelse:

XYZ -punktskanner ved bruk av redde roterende kodere: 5 trinn
XYZ -punktskanner ved bruk av redde roterende kodere: 5 trinn

Video: XYZ -punktskanner ved bruk av redde roterende kodere: 5 trinn

Video: XYZ -punktskanner ved bruk av redde roterende kodere: 5 trinn
Video: SCP-610 Плоть, что ненавидит (все документы и журналы) 2024, Juli
Anonim
XYZ -punktskanner ved bruk av redde roterende kodere
XYZ -punktskanner ved bruk av redde roterende kodere

Etter å ha skaffet meg et stort antall kastede roterende optiske kodere fra arbeidsplassen min, bestemte jeg meg endelig for å gjøre noe morsomt/nyttig med dem.

Jeg har nylig kjøpt en ny 3D -skriver for hjemmet mitt, og hva kan komplimentere det bedre enn en 3D -skanner! Dette prosjektet ga meg også den perfekte muligheten til å bruke 3D -skriveren min til å produsere de nødvendige delene.

Rekvisita

Optiske kodere og tilsvarende optiske sensorer

Arduino UNO

valgfritt prototypeskjold

stålskinner

tilgang til en 3D -skriver

Trinn 1: De optiske koderne

De optiske koderne
De optiske koderne
De optiske koderne
De optiske koderne
De optiske koderne
De optiske koderne

Nesten hvilken som helst roterende encoder kan brukes til dette prosjektet, så lenge det gir deg et relativt høyt antall klikk per mm. Tydeligvis vil forskjellige kodere kreve en passende monteringsløsning.

Jeg brukte en kontinuitetsmåler for å spore koblingsskjemaet for fotosensorene.

Trinn 2: 3D -trykte deler

3D -trykte deler
3D -trykte deler
3D -trykte deler
3D -trykte deler

Disse delene huser de roterende koderne og gir et lysbilde for skinnen. Enkeltkoderhuset har to hull på baksiden for tverrskinnene å montere på. Dobbelkoderhuset er ganske enkelt to enkelthus smeltet sammen i rette vinkler.

Jeg designet disse festene på fusion360 for å passe til mitt valg av kodere og skinner, akselen på koderen har et kort stykke slangeskudd av gummi, for å hjelpe den med å gripe rustfritt stålaksel bedre.

Du vil at akselen skal gli fritt og falle gjennom huset når den holdes vertikalt, men den må utøve nok trykk på giveren for ikke å skli. Det som fungerte for meg var å la sklien for akselen overlappe med encoder akselen med 0,5 mm. Slangegummien er myk nok til å deformeres med den mengden og gir god trekkraft.

Trinn 3: Koblingsskjema

Koblingsskjema
Koblingsskjema

Kretsen er veldig enkel. Optosensorene krever litt strøm for IR-emitterdiodene, en jord og opptrekksmotstander for fotodiodene.

Jeg bestemte meg for 5mA for emitterdioder i serien, i denne koder er spenningsfallet over dioder 3,65V. Jeg bruker en 5V forsyning fra Arduino, som etterlater 1,35V for motstanden, ved 5mA fungerer dette til å være 270 ohm.

10k ohm ble valgt for pull-ups da fotodiodene bare kan synke en liten strøm, 10k ohm ble også brukt til trykknappen. Det er en knapp tilgjengelig for bruk på prototypekortet som allerede er koblet til bakken, bare gi den en opptrekkmotstand og koble den til ønsket inngangspinne.

Trinn 4: Arduino -kode

Arduino -koden
Arduino -koden
Arduino -koden
Arduino -koden
Arduino -koden
Arduino -koden

Koden trenger en liten forklaring, siden driften kanskje ikke er umiddelbart åpenbar, men den måtte optimaliseres på denne måten for å kunne behandle 3 kodere raskt nok.

For det første vil vi bare behandle retningsdata HVIS det har vært en endring i koderposisjonen.

endringer = ny_verdi ^ lagret verdi;

For å få mer oppløsning fra koderne mine måtte jeg behandle både stigende og fallende kanter.

På oppsettet mitt er oppløsningen min 24 klikk per 1 cm.

Dette etterlater oss noen få scenarier.

S1 er konstant 0 og S2 byttet fra 0 til 1

S1 er konstant 0 og S2 byttet fra 1 til 0

S1 er konstant 1 og S2 bytter fra 0 til 1

S1 er konstant 1 og S2 veksler fra 1 til 0

S2 er konstant 0 og S1 byttet fra 0 til 1

S2 er konstant 0 og S1 byttet fra 1 til 0

S2 er konstant 1 og S1 bytter fra 0 til 1

S2 er konstant 1 og S1 bytter fra 1 til 0

Disse forholdene er bedre forstått i sannhetstabellene ovenfor, også gir hver betingelse en 'retning', vilkårlig kalt 0 eller 1.

Diagrammene gir oss to viktige ledetråder:

1) det ene diagrammet er hele inversen av det andre, så hvis vi har det ene, kan vi enkelt beregne det andre ved ganske enkelt å snu utgangen. Vi inverterer utgangen bare hvis den ene pinnen endres og ikke den andre, vi kan velge en vilkårlig.

2) selve diagrammet er ganske enkelt XOR for S1- og S2 -signalene. (det andre diagrammet er IKKE av dette).

Nå er forståelsen av koden enkel.

// les i PORT parallelt // husk tilstøtende par tilhører samme kodertilstand = PINB & 0x3f; // hvilke pins har endret seg hvis noen diff = hold ^ state; // XOR tilstøtende S1 og S2 signaler for å få sannhetstabellen // den enkleste måten er å lage en kopi av den nåværende tilstanden // og flytte den til høyre med en bit oppslag = tilstand >> 1; // nå er biter justert for XOR dir = oppslag ^ tilstand; // husk, tabellen må inverteres hvis en // av inngangene forble konstant, vi trenger ikke en IF // -setning for dette. For øyeblikket er ønsket retningsbit // høyre bit for hvert par i "dir" -variabelen // venstre bit er meningsløs // "diff" -variabelen har biten som endret "sett" // så vi enten har '01' eller '10' // XOR dette med 'dir' byte vil enten // invertere eller ikke den meningsfulle biten. dir ^= diff; // oppdater nå hold variabel hold = state; // hvis en av bitene har endret seg for denne koderen hvis (diff & 0x03) {// bestemme retningen hvis (dir & 0x01) {// basert på hadware og ledninger enten ++ eller ---z; } annet {++ z; }} // ditto for resten hvis (diff & 0x0c) {if (dir & 0x04) {++ y; } annet { -y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } annet {++ x; }}

Når du trykker på knappen, sender vi den nåværende XYZ -verdien til et terminalprogram.

Seriell data er treg, men under normal drift vil posisjonene til koderne uansett ikke endre seg i løpet av denne tiden.

Dataene sendes som råtall. Du kan gjøre regnestykket og sende dataene i mm eller tommer osv. Jeg synes råverdier er like gode fordi vi kan skalere objektet senere i programvare.

Trinn 5: Første skanning

Første Skann
Første Skann
Første Skann
Første Skann
Første Skann
Første Skann
Første Skann
Første Skann

Å samle poengene er en langsom prosess, jeg gulv sonden øverst i venstre hjørne og tilbakestiller Arduino.

Dette nuller posisjonen som hjem.

Flytt deretter sonden til stedet på målet, hold den stødig og trykk på "øyeblikksbilde" -knappen.

For dette ganske store prøvestykket tok jeg bare ~ 140 poeng, så detaljene er ikke gode på sluttproduktet.

Lagre dataene i en. PCD -fil, og legg til overskriften

#. PCD v.7 - Point Cloud Data filformatVERSJON.7 FELT x y z STØRRELSE 4 4 4 TYPE F F F TELLE 1 1 1 BREDDE (poengtallet) HØYDE 1 VISNINGSPUNKT 0 0 0 1 0 0 0 PUNKTER (poengtalet ditt)

Sett poengtellingen i overskriften, dette er enkelt for alle redaktører som gir deg linjenumre.

Over prikkene kan du se i freeCad, eksporteres de deretter fra freeCad som. PLY -fil.

Åpne. PLY på MeshLab og overflate objektet. Ferdig !!

Anbefalt: