Բովանդակություն:

XYZ կետերի սկաներ `օգտագործելով փրկված պտտվող կոդավորիչներ. 5 քայլ
XYZ կետերի սկաներ `օգտագործելով փրկված պտտվող կոդավորիչներ. 5 քայլ

Video: XYZ կետերի սկաներ `օգտագործելով փրկված պտտվող կոդավորիչներ. 5 քայլ

Video: XYZ կետերի սկաներ `օգտագործելով փրկված պտտվող կոդավորիչներ. 5 քայլ
Video: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, Նոյեմբեր
Anonim
XYZ կետերի սկաներ ՝ օգտագործելով փրկված պտտվող կոդավորիչներ
XYZ կետերի սկաներ ՝ օգտագործելով փրկված պտտվող կոդավորիչներ

Աշխատավայրից ձեռք բերելով բավականին մեծ քանակությամբ մերժված պտտվող օպտիկական կոդավորիչներ, վերջապես որոշեցի նրանց հետ ինչ -որ զվարճալի/օգտակար բան անել:

Վերջերս ես գնել եմ նոր 3D տպիչ իմ տան համար, և ինչը կարող է նրան ավելի լավ հաճոյախոսել, քան 3D սկաները: Այս նախագիծը նաև ինձ կատարյալ հնարավորություն ընձեռեց օգտագործել իմ 3D տպիչը `պահանջվող մասերի արտադրության համար:

Պարագաներ

Օպտիկական կոդավորիչներ և համապատասխան օպտիկական տվիչներ

Arduino UNO

ընտրովի նախատիպի վահան

պողպատե ձողեր

մուտք դեպի 3D տպիչ

Քայլ 1: Օպտիկական կոդավորիչներ

Օպտիկական կոդավորիչներ
Օպտիկական կոդավորիչներ
Օպտիկական կոդավորիչներ
Օպտիկական կոդավորիչներ
Օպտիկական կոդավորիչներ
Օպտիկական կոդավորիչներ

Գրեթե ցանկացած պտտվող կոդավորիչ կարող է օգտագործվել այս նախագծի համար, քանի դեռ այն ձեզ տրամադրել է համեմատաբար մեծ քանակությամբ «կտտոցներ» մեկ մմ -ի համար: Ակնհայտորեն տարբեր կոդավորողներ կպահանջեն համապատասխան մոնտաժային լուծում:

Ես օգտագործեցի անընդհատության հաշվիչ `ֆոտոսենսորների էլեկտրագծերի գծապատկերը պարզելու համար:

Քայլ 2: 3D տպագիր մասեր

3D տպագիր մասեր
3D տպագիր մասեր
3D տպագիր մասեր
3D տպագիր մասեր

Այս մասերում տեղակայված են պտտվող կոդավորիչները և ապահովում են սահիկ երկաթուղու համար: Մեկ կոդավորող ծածկը հետևի մասում ունի երկու անցք, որպեսզի խաչմերուկները ամրացվեն: Կրկնակի ծածկագրիչի պատյանը պարզապես երկու առանձին պատյաններ են, որոնք միաձուլված են միմյանց ճիշտ անկյուններում:

Ես նախագծեցի այս հենարանները fusion360- ի վրա `կոդավորողների և ռելսերի իմ ընտրության համար, կոդավորիչի լիսեռը ունի կարճ կտոր ռետինե պատյան, որը կօգնի ավելի լավ բռնել չժանգոտվող պողպատից լիսեռը:

Դուք ցանկանում եք, որ լիսեռը սահի ազատորեն և ընկնի պատյանով, երբ ուղղահայաց պահվի, սակայն այն պետք է բավականաչափ ճնշում գործադրի կոդավորիչի վրա, որպեսզի այն չսայթաքի: Ինձ համար աշխատելը թույլ տվեց, որ լիսեռի սահիկը համընկնի ծածկագրիչի լիսեռի հետ 0.5 մմ -ով: Պարսատիկի կաուչուկը բավական փափուկ է, որպեսզի այդ չափով դեֆորմացվի և ապահովի լավ քաշում:

Քայլ 3: Էլեկտրագծերի դիագրամ

Հաղորդալարերի դիագրամ
Հաղորդալարերի դիագրամ

Շղթան շատ պարզ է: Օպտո-սենսորները պահանջում են որոշակի հոսանք IR ճառագայթման դիոդների համար, հող և ձգվող դիմադրիչներ `ֆոտոդիոդների համար:

Ես որոշեցի 5mA սերիայի թողարկող դիոդների համար, այս հատուկ կոդավորիչում դիոդների վրա լարման անկումը 3.65V է: Ես օգտագործում եմ 5 Վ լարման Arduino- ից, որը թողնում է 1.35 Վ ռեզիստորի համար, 5 մԱ -ում դա 270 օմ է:

10k ohm- ն ընտրվել է քաշքշուկների համար, քանի որ ֆոտոդիոդները կարող են միայն մի փոքր հոսանք խորտակել, 10k ohm- ը նույնպես օգտագործվել է սեղմման կոճակի համար: Գոյություն ունի մի կոճակ, որն արդեն օգտագործվում է գետնին միացված նախատիպի տախտակի վրա, պարզապես տրամադրեք այն ձգվող դիմադրիչով և ամրացրեք այն ցանկալի մուտքի քորոցին:

Քայլ 4: Arduino կոդ

Arduino կոդ
Arduino կոդ
Arduino կոդ
Arduino կոդ
Arduino կոդ
Arduino կոդ

Կոդին անհրաժեշտ է մի փոքր բացատրություն, քանի որ դրա գործողությունը կարող է անմիջապես ակնհայտ չլինել, սակայն այն պետք է օպտիմիզացվի այս կերպ, որպեսզի կարողանա բավական արագ մշակել 3 կոդավորիչ:

Նախ մենք ցանկանում ենք մշակել միայն ուղղության տվյալները, եթե կոդավորողի դիրքի փոփոխություն լինի:

փոփոխություններ = new_value ^ պահված արժեք;

Իմ կոդավորիչներից ավելի շատ լուծում ստանալու համար ես պետք է մշակեի և՛ բարձրացող, և՛ ընկնող եզրեր:

Իմ տեղադրման դեպքում իմ թույլատրելիությունը 24 կտտոց է 1 սմ -ի համար:

Սա մեզ թողնում է մի քանի սցենար:

S1- ը հաստատուն 0 է, իսկ S2- ը ՝ 0 -ից 1

S1- ը հաստատուն 0 է, իսկ S2- ը ՝ 1 -ից 0

S1- ը հաստատուն 1 է, իսկ S2- ը միանում է 0 -ից 1 -ին

S1- ը հաստատուն 1 է, իսկ S2- ը ՝ 1 -ից 0

S2- ը հաստատուն 0 է, իսկ S1- ը ՝ 0 -ից 1

S2- ը 0 -ն է, իսկ S1- ը ՝ 1 -ից 0

S2- ը հաստատուն է 1, իսկ S1- ը միանում է 0 -ից 1 -ին

S2- ը հաստատուն է 1, իսկ S1- ը միանում է 1 -ից 0 -ին

Այս պայմաններն ավելի լավ են հասկացվում վերը նշված ճշմարտության աղյուսակներում, ինչպես նաև յուրաքանչյուր պայման տալիս է «ուղղություն» ՝ կամայականորեն անվանված 0 կամ 1:

Գծապատկերները մեզ տալիս են երկու կարևոր հուշում.

1) մեկ գծապատկերը մյուսի լրիվ հակառակն է, այնպես որ, եթե մենք ունենք մեկը, մենք կարող ենք հեշտությամբ հաշվարկել մյուսը ՝ պարզապես շրջելով ելքը: Մենք շրջում ենք ելքը միայն այն դեպքում, եթե մի քորոց փոխվում է, և ոչ թե մյուսը, մենք կարող ենք կամայականորեն ընտրել մեկը:

2) գծապատկերն ուղղակի S1 և S2 ազդանշանների XOR է: (մյուս գծապատկերը սրա ՈՉ -ն է):

Այժմ ծածկագիրը հասկանալը պարզ է:

// կարդալ PORT- ում զուգահեռ // հիշեք, որ հարակից զույգերը պատկանում են նույն կոդավորող վիճակին = PINB & 0x3f; // ինչ կապեր են փոխվել, եթե որևէ diff = պահել ^ վիճակ; // ORշմարտության աղյուսակ ստանալու համար XOR- ի հարակից S1 և S2 ազդանշաններ // այժմ բիթերը հավասարեցված են XOR dir = lookup ^ վիճակի համար; // հիշեք, աղյուսակը պետք է շրջված լինի, եթե մուտքերից մեկը // մնա հաստատուն, դրա համար մեզ IF // հայտարարություն պետք չէ: Ներկայումս ցանկալի ուղղության բիթը // «dir» փոփոխականի յուրաքանչյուր զույգի աջ բիթն է // ձախ ձեռքի բիթը անիմաստ է // «diff» փոփոխականն ունի այն բիտը, որը փոխեց «հավաքածուն» // այնպես որ մենք կամ ունենք «01» կամ «10» // XOR սա «դիր» բայթով կամ // կշրջի, կամ ոչ իմաստալից բիթը: դիր ^= դիֆ; // այժմ թարմացնել պահել փոփոխականի պահում = վիճակ; // եթե բիթը փոխվել է այս կոդավորիչի համար, եթե (diff & 0x03) {// որոշեք, եթե (dir & 0x01) {// ուղղությունը ՝ հիմնված ձեր պարագաների և լարերի վրա ՝ ++ կամ ---z; } այլ {++ z; }} // ditto մնացածի համար if (diff & 0x0c) {if (dir & 0x04) {++ y; } այլ { -յ; }} if (diff & 0x30) {if (dir & 0x10) {--x; } այլ {++ x; }}

Երբ կոճակը սեղմվում է, մենք ուղարկում ենք ընթացիկ XYZ արժեքը տերմինալային ծրագրին:

Սերիական տվյալները դանդաղ են, բայց նորմալ աշխատանքի ընթացքում կոդավորողների դիրքերն այս ընթացքում, այնուամենայնիվ, չեն փոխվի:

Տվյալները ուղարկվում են որպես հում հաշվարկ: Դուք կարող եք կատարել մաթեմատիկա և տվյալները ուղարկել մմ կամ դյույմ և այլն:

Քայլ 5: Առաջին սկանավորում

Առաջին սկանավորում
Առաջին սկանավորում
Առաջին սկանավորում
Առաջին սկանավորում
Առաջին սկանավորում
Առաջին սկանավորում
Առաջին սկանավորում
Առաջին սկանավորում

Կետերը հավաքելը դանդաղ գործընթաց է, ես զոնդը տեղադրում եմ վերին ձախ անկյունում և վերականգնում Arduino- ն:

Սա զրոյացնում է տան դիրքը:

Այնուհետև զոնդը տեղափոխեք նպատակակետի գտնվելու վայրը, պահեք այն կայուն և սեղմեք «լուսանկար» կոճակը:

Այս բավականին մեծ նմուշի համար վերցրի ընդամենը 140 ֆունտ ստերլինգ, այնպես որ մանրամասնությունը վերջնական արտադրանքի վրա մեծ չէ:

Պահպանեք տվյալները. PCD ֆայլում և ավելացրեք վերնագիրը

#. PCD v.7 - Point Cloud Data ֆայլի ձևաչափ VERSION.7 FIELDS x y z SIZE 4 4 4 TYPE F F F COUNT 1 1 1 WIDTH (your point count) HEIGHT 1 VIEWPOINT 0 0 0 1 1 0 0 0 POINTS (your point count)

Տեղադրեք միավորների հաշվարկը վերնագրում, սա հեշտ է ցանկացած խմբագրի համար, որը ձեզ տրամադրում է տողերի համարներ:

Կետերը վերևում կարելի է տեսնել freeCad- ում, այնուհետ դրանք արտահանվում են freeCad- ից որպես. PLY ֆայլ:

Բացեք. PLY- ը MeshLab- ում և մակերևույթը դրեք օբյեկտի վրա: Կատարած!!

Խորհուրդ ենք տալիս: