Tartalomjegyzék:

XYZ pont szkenner mentett forgó kódolók használatával: 5 lépés
XYZ pont szkenner mentett forgó kódolók használatával: 5 lépés

Videó: XYZ pont szkenner mentett forgó kódolók használatával: 5 lépés

Videó: XYZ pont szkenner mentett forgó kódolók használatával: 5 lépés
Videó: Маурицио Серачини: Секретная жизнь картин 2024, Július
Anonim
XYZ pont szkenner mentett forgó kódolókkal
XYZ pont szkenner mentett forgó kódolókkal

Miután meglehetősen sok eldobott forgó optikai kódolót szereztem be a munkahelyemről, végül úgy döntöttem, hogy valami szórakoztató/hasznos dolgot csinálok velük.

Nemrégiben vásároltam egy új 3D nyomtatót az otthonomhoz, és mi bókolhatna vele jobban, mint egy 3D szkenner! Ez a projekt tökéletes lehetőséget biztosított számomra, hogy 3D nyomtatómat a szükséges alkatrészek gyártásához használjam.

Kellékek

Optikai kódolók és megfelelő optikai érzékelők

Arduino UNO

opcionális prototípuspajzs

acélrúd-sínek

hozzáférés a 3D nyomtatóhoz

Lépés: Az optikai kódolók

Az optikai kódolók
Az optikai kódolók
Az optikai kódolók
Az optikai kódolók
Az optikai kódolók
Az optikai kódolók

Szinte bármilyen forgó kódoló használható ebben a projektben, feltéve, hogy viszonylag nagy számú kattintást biztosít mm -enként. Nyilvánvalóan a különböző kódolók megfelelő szerelési megoldást igényelnek.

Folyamatossági mérőt használtam a fotoérzékelők kapcsolási rajzának felkutatásához.

2. lépés: 3D nyomtatott alkatrészek

3D nyomtatott alkatrészek
3D nyomtatott alkatrészek
3D nyomtatott alkatrészek
3D nyomtatott alkatrészek

Ezek az alkatrészek a forgó jeladókat tartalmazzák, és csúszást biztosítanak a sín számára. Az egykódolású ház hátsó részén két lyuk található a keresztlécek rögzítéséhez. A kettős kódolóház egyszerűen két egy ház, amelyek derékszögben össze vannak olvasztva.

Ezeket a rögzítéseket a fusion360 -ra terveztem, hogy megfeleljenek a választott jeladóknak és síneknek, az enkóder tengelyén egy rövid csúzliból készült gumihüvely található, hogy jobban megfogja a rozsdamentes acél tengelyt.

Azt szeretné, ha a tengely szabadon csúszna, és függőlegesen tartva esne át a házon, de kellő nyomást kell kifejtenie a jeladón, hogy ne csússzon el. Nekem az működött, hogy lehetővé tettem, hogy a tengely csúszda 0,5 mm -rel átfedésben legyen a jeladó tengelyével. A csúzli gumi elég puha ahhoz, hogy ilyen mértékben deformálódjon, és jó tapadást biztosítson.

3. lépés: bekötési rajz

Bekötési rajz
Bekötési rajz

Az áramkör nagyon egyszerű. Az opto-érzékelők némi áramot igényelnek az infravörös sugárzó diódákhoz, egy földelő és felhúzó ellenállást a fotodiódákhoz.

A soros emitter diódák esetében 5 mA mellett döntöttem, ebben a kódolóban a diódák feszültségcsökkenése 3,65 V. Az Arduino 5V -os tápegységét használom, ami 1.35V -ot hagy az ellenállásnak, 5mA -nál ez 270 ohm.

A felhúzásokhoz 10 k ohmot választottak, mivel a fotódiodák csak kis áramot képesek elnyelni, a nyomógombhoz 10 k ohmot is használtak. Van egy gomb a prototípus táblán való használathoz, amely már csatlakoztatva van a földhöz, csak szereljen fel egy felhúzó ellenállást, és kösse be a kívánt bemeneti csapba.

4. lépés: Arduino kód

Arduino kód
Arduino kód
Arduino kód
Arduino kód
Arduino kód
Arduino kód

A kód egy kis magyarázatra szorul, mivel a működése nem feltétlenül azonnal nyilvánvaló, mégis úgy kellett optimalizálni, hogy 3 kódolót elég gyorsan fel tudjon dolgozni.

Először is csak az irányadatokat szeretnénk feldolgozni, HA a kódoló helyzetében változás történt.

changes = new_value ^ tárolt érték;

Annak érdekében, hogy a kódolóim nagyobb felbontást érjenek el, mind az emelkedő, mind a csökkenő éleket feldolgoznom kellett.

A beállításomnál a felbontásom 24 kattintás 1 cm -enként.

Így marad néhány forgatókönyv.

S1 állandó 0 és S2 0 -ról 1 -re vált

S1 állandó 0 és S2 1 -ről 0 -ra vált

S1 állandó 1 és S2 0 -ról 1 -re vált

S1 állandó 1 és S2 1 -ről 0 -ra vált

S2 állandó 0 és S1 0 -ról 1 -re vált

S2 állandó 0 és S1 1 -ről 0 -ra vált

S2 állandó 1, S1 0 -ról 1 -re vált

S2 állandó 1 és S1 1 -ről 0 -ra vált

Ezeket a feltételeket a fenti igazságtáblázatok jobban megértik, és mindegyik feltétel „irányt” ad, tetszőlegesen 0 vagy 1 névvel.

A diagramok két fontos támpontot adnak nekünk:

1) az egyik diagram a másik teljes fordítottja, tehát ha van ilyen, akkor könnyen kiszámíthatjuk a másikat a kimenet egyszerű megfordításával. Csak akkor fordítjuk meg a kimenetet, ha az egyik érintkező változik, a másik nem, akkor tetszőlegesen választhatunk egyet.

2) maga a diagram egyszerűen az S1 és S2 jelek XOR -ja. (a másik táblázat a NEM erről szól).

Most a kód megértése egyszerű.

// PORT -ban párhuzamosan olvasva // ne feledje, hogy a szomszédos párok ugyanabba a kódolóállapotba tartoznak = PINB & 0x3f; // milyen csapok változtak, ha bármilyen diff = hold ^ állapot; // A XOR szomszédos S1 és S2 jeleket kapja az igazságtáblázathoz // legegyszerűbb módja annak, ha másolatot készít az aktuális állapotról //, és egy bites kereséssel jobbra tolja = állapot >> 1; // most a bitek igazítva vannak XOR -hoz dir = lookup ^ state; // ne feledje, a táblázatot meg kell fordítani, ha az egyik bemenet // állandó maradt, ehhez nincs szükség IF // utasításra. Jelenleg a kívánt irány bit // a "dir" változó minden párjának jobb bitje // a bal oldali bit értelmetlen // a "diff" változó bitje megváltoztatta a "set" // így A '01' vagy a '10' // XOR ezt a 'dir' bájttal // megfordítja, vagy nem, az értelmes bitet. dir ^= diff; // most update hold változó hold = state; // ha bármelyik bit megváltozott ehhez a kódolóhoz if (diff & 0x03) {// határozza meg az irányt, ha (dir & 0x01) {// a hadware és a vezetékek alapján ++ vagy ---z; } else {++ z; }} // ugyanez a többire if (diff & 0x0c) {if (dir & 0x04) {++ y; } else {--y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } else {++ x; }}

A gomb megnyomásakor az aktuális XYZ értéket elküldjük egy terminál programnak.

A soros adatok lassúak, de normál működés közben a kódolók helyzete nem változik ez idő alatt.

Az adatokat nyers számként küldik el. Megteheted a matematikát, és elküldheted az adatokat mm -ben vagy hüvelykben stb. Úgy találom, hogy a nyers értékek ugyanolyan jók, mert később az objektumot méretezhetjük a szoftverben.

5. lépés: Első vizsgálat

Első szkennelés
Első szkennelés
Első szkennelés
Első szkennelés
Első szkennelés
Első szkennelés
Első szkennelés
Első szkennelés

A pontok összegyűjtése lassú folyamat, emelem a szondát a bal felső sarokban, és visszaállítom az Arduino -t.

Ez nullázza az otthoni pozíciót.

Ezután helyezze a szondát a célpontra, tartsa stabilan, és nyomja meg a "pillanatfelvétel" gombot.

Ehhez a meglehetősen nagy mintadarabhoz csak ~ 140 pontot vettem, így a részletesség nem nagyszerű a végterméken.

Mentse az adatokat egy. PCD fájlba, és adja hozzá a fejlécet

#. PCD v.7 - Point Cloud Data fájlformátum VERSION.7 FIELDS x y z MÉRET 4 4 4 TÍPUS F F F COUNT 1 1 1 SZÉLESSÉG (a pontszám) 1 MAGASSÁG VIEWPOINT 0 0 0 1 0 0 0 PONT (a pontszám)

Tegye a pontszámot a fejlécbe, ez egyszerű minden olyan szerkesztőben, amely sorszámokat biztosít.

A pontok felett láthatók a freeCad -ban, majd exportálják őket a freeCad -ból. PLY fájlként.

Nyissa meg a. PLY -t a MeshLab -on, és tegye felszínre az objektumot. Kész!!

Ajánlott: