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

Smart 3D տպիչի թելերի հաշվիչ ՝ 5 քայլ (նկարներով)
Smart 3D տպիչի թելերի հաշվիչ ՝ 5 քայլ (նկարներով)

Video: Smart 3D տպիչի թելերի հաշվիչ ՝ 5 քայլ (նկարներով)

Video: Smart 3D տպիչի թելերի հաշվիչ ՝ 5 քայլ (նկարներով)
Video: BTT GTR v1.0/M5 v1.0 - TMC2208 UART 2024, Հունիսի
Anonim
Smart 3D տպիչի թելերի հաշվիչ
Smart 3D տպիչի թելերի հաշվիչ

Ինչու՞ անհանգստացնել թելերը հաշվելը: Մի քանի պատճառ.

Հաջող տպագրությունների համար պահանջվում է ճիշտ չափաբերված էքստրուդեր: Վատ բաներ են տեղի ունենում, եթե այն չափից դուրս էքստրուդվում է կամ թերստրուդվում: Wellշգրիտ ճշգրտված հաշվիչը կարող է անկեղծ պահել էքստրուդեր:

Slicers- ը մոտավոր է, թե ինչքան թել կտա տվյալ տպագրությունը (երկայնքով և քաշով), և ես կցանկանայի ստուգել այդ արժեքները:

Թելերի շարժը չափելիս տեղեկացրեք նաև, թե երբ է սկսվել տպագրությունը և երբ է այն դադարել:

Ինձ ինչ -որ բան էր պետք, որպեսզի ծածկեի իմ տպիչի առջևի տգեղ հսկա տարբերանշանի հեռացումից մնացած տարածքը:

Թույն է:

Ինձ ոգեշնչեց այս հրահանգը, որը փոխարինեց հին PS/2 մկնիկը որպես եռաչափ տպիչի թելերի հաշվիչ: Այն ոչ միայն օգտակար հատկություն ավելացրեց 3D տպիչի վրա, այլև շահագործեց հին սարքը, որն այլապես աղբավայրում կհայտնվեր: Բայց այդ նախագիծը կառուցված էր մկնիկի PS/2 ինտերֆեյսի շուրջ, որն անհարկի ծանրաբեռնված էր թվում: Այսպիսով, ես սա օգտագործեցի որպես հնարավորություն սովորելու միակ էական բաղադրիչի `պտտվող կոդավորիչի մասին:

Պարագաներ

Պտտվող կոդավորիչ

ESP32- ի վրա հիմնված dev տախտակ

I2C OLED էկրան (երկու գույնի միավորը հատկապես սառը տեսք ունի)

Փոքրիկ վայրկենական կոճակ

Յուղազերծված 608ZZ առանցքակալ

Երկու օղակ շինարարական խանութից (~ 33 մմ ID x ~ 1.5 մմ պրոֆիլի տրամագիծ - տես մեկնաբանությունները)

Երկու 2.5 մմ ինքնահպման պտուտակներ պարիսպի համար

Երկու 4 մմ տրամագծով պտուտակներ, ընկույզներ և լվացարաններ ՝ սարքը ձեր տպիչին ամրացնելու համար

Լարերի փունջ

3D տպիչ և թելիկ

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

Ընտրեք Պտտվող կոդավորիչ
Ընտրեք Պտտվող կոդավորիչ
Ընտրեք Պտտվող կոդավորիչ
Ընտրեք Պտտվող կոդավորիչ

Պտտվող կոդավորիչները պտտվող շարժումները թարգմանում են էլեկտրական իմպուլսների: Բոլոր հին դպրոցական մկները դրանք օգտագործում էին պտտվող գնդակի շարժումը չափելու համար, իսկ առավել արդիական (հա հա) օպտիկական մկները դեռ դրանք օգտագործում էին ոլորման անիվի համար, ինչը ես դրել էի մոտակայքում և օգտագործել սկզբնական փորձերի համար: Unfortunatelyավոք, իմը չներկայացրեց ակնհայտ միացման կետեր, և դրա լուծումը թույլ էր:

Եթե դա արժե անել, ապա արժե չափազանցել: Այսպիսով, ես գնեցի մեծ, բարեկամական, 360 պտույտով մեկ հեղափոխության կոդավորիչ և կառուցեցի իմ նախագիծը դրա շուրջ: Իմ ընտրածը Signswise Incremental Optical Rotary Encoder- ն էր, տիպը LPD3806-360BM-G5-24C: Բայց ցանկացած արժանապատիվ կոդավորիչ կանի:

Քայլ 2: Ավելացրեք ճախարակ և անգործուն

Ավելացնել ճախարակ և անգործուն
Ավելացնել ճախարակ և անգործուն

Թելքի գծային շարժումը վերածվում է կոդավորիչի պտտվող շարժման `ճախարակով: Իսկ թելիկը ճախարի դեմ պահվում է անգործի կողմից:

Ճախարակն ունի երկու ակոս, որոնցից յուրաքանչյուրը ձգված օղակ է պահում, որպեսզի սայթաքում չլինի, Պարապը ունի մեկ v- ակոս ՝ թելիկը կենտրոնացված պահելու համար կոդավորող ճախարի վրա: Այն նստած է 608ZZ առանցքակալի վրա, որը ես դրել էի շուրջս, և այն տեղադրված է պարույրի աղբյուրի վրա, որը տպված է հենց իմ նախագծի հիմնական մասում: (STL ֆայլերը կցված են ստորև):

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

Քայլ 3: Կոդավորում

Image
Image

Թելերը պարզապես հաշվելու համար երկու թվային մուտքով ցանկացած devboard կկարողանա: Իմ ընտրած կոդավորողն ունի չորս կապում `Vcc, հիմք և երկու կոդավորման կապում: Ահա իսկապես գեղեցիկ գրառում, որը բացատրում է, թե ինչպես են աշխատում պտտվող կոդավորիչները և ինչպես դրանք միացնել Arduino- ի հետ: (Նաև ՝ այս հոդվածը 3 փին կոդավորիչների մասին է):

Հիմնական հաշվարկը պարզ է. Երկու մուտք `ներքին ձգման համար այնպես, որ արտաքին դիմադրիչները կարիք չունեն կպցնել Vcc- ին, և մեկ ընդհատում: Ես նաև ավելացրեցի զրոյական/զրոյական կոճակ ՝ պահանջելով ևս մեկ մուտք և ընդհատում.

void setUpPins () {

pinMode (ENCODER_PIN_1, INPUT_PULLUP); pinMode (ENCODER_PIN_2, INPUT_PULLUP); pinMode (ZERO_BTN_PIN, INPUT_PULLUP); attachInterrupt (ENCODER_PIN_1, encoderPinDidChange, CHANGE); կցել ընդհատում (ZERO_BTN_PIN, zeroButtonPressed, CHANGE); } void IRAM_ATTR encoderPinDidChange () {if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) {դիրք += 1; } else {դիրք -= 1; }} void IRAM_ATTR zeroButtonPressed () {// կարգավորել զրոյը և վերականգնել}

Բայց ես ավելին էի ուզում, քան պարզապես համր հաշվիչ: ESP32 (կամ ESP8266) և դրա ներկառուցված WiFi- ով ես իրականում կարող եմ ինչ-որ բան անել իմ հավաքած տվյալների հետ: Օգտագործելով որոշ պարզ ժամանակային ծածկագիր (ստորև բացատրված), ես կարող եմ որոշել, թե երբ է սկսվում և ավարտվում տպագրությունը և այդ իրադարձությունները որպես ծանուցումներ ուղարկում իմ հեռախոսին: Ապագայում ես կարող եմ ավելացնել սպառման սենսոր և տեղեկացնել ինքս ինձ (և դադարեցնել տպիչը), երբ իմ ուշադրության կարիքը լինի:

Ամբողջական ծածկագիրը գտնվում է Github- ում:

Մի քանի նշում կոդի վերաբերյալ.

Սա ձեր կառուցվածքին հարմարեցնելու համար անհրաժեշտ է միայն բանաձևը (encoderPPR) `մեկ պտույտի համար իմպուլսներով, որը սովորաբար կրկնակի անգամ գերազանցում է նշված ցուցանիշը և ճախարի շառավիղը (wheelRadius): Այս արժեքները, գումարած ձեր wi -fi- ի ssid- ը և գաղտնաբառը և կոճակին, կոդավորիչին և OLED էկրանին միացված հատուկ կապում, բոլորը մտնում են config.h:

Zeroրոյական կոճակը նաև կրկնապատկվում է որպես վերականգնում. Պահեք այն ՝ տախտակը վերագործարկելու համար, ինչը օգտակար է վրիպազերծման համար:

Ընդհատումները հզոր են, երբեմն ՝ չափազանց հզոր: Zeroրոյական կոճակի մեկ հպումը կարող է հանգեցնել zeroButtonPressed () ֆունկցիայի 10-20 անգամ կանչման, այնպես որ ես ավելացրեցի որոշ դուրսբերման տրամաբանություն: Իմ օպտիկական կոդավորողը դրա կարիքը չուներ, այլ YMMV:

Մինչ ընդհատումները խնամում են մուտքերը ասինքրոն կերպով, loop () ռեժիմը կարգավորում է հաշվապահությունը: EncoderState- ը `ցանկը, որը կարող է սնվել, հետ քաշվել կամ դադարեցվել, թարմացվում է կոդավորողի դիրքի փոփոխությամբ: Timeամկետները որոշվում են, թե երբ է տպիչը սկսել և ավարտել տպագրությունը: Բայց բարդ մասն այն է, որ 3D տպիչները հաճախ սկսում և դադարում են շարժումը, ուստի այն, ինչ լավագույնն էր, այն էր, որ «տպման ամբողջական» իրադարձությունը անընդհատ դադարեցվեր առնվազն 5 վայրկյան: Motionանկացած շարժում առաջացնում է երկրորդ ժմչփ, որը սահմանում է «տպագրությունը սկսված է» իրադարձությունը միայն այն դեպքում, երբ «տպման ամբողջական» իրադարձություն տեղի չի ունենում 15 վայրկյան ժամկետում: Գործնականում դա աշխատում է լողալով:

Այսպիսով, հիմնական հանգույցի () ծածկագիրը կարող է աշխատել առանց ծանրաբեռնվածության, դեբունսային կոդը գործում է RTOS առաջադրանքի օղակում: Նմանապես, ծանուցումներ ուղարկելու http- ի հարցումները համաժամանակյա են և, հետևաբար, հետնապատկերային: Այսպիսով, անիմացիաները սահուն են ընթանում, և հաշվարկը երբեք չի դադարում:

Իմ օրինակում կա մի շարք լրացուցիչ կոդեր (A) WiFi և mDNS- ով ցանցային կապ հաստատելու և պահպանելու համար, (B) ժամանակը NTC սերվերից վերցնելու համար, որպեսզի ես ժամանակի վրա դրոշմեմ իմ մեկնարկի և ավարտի ծանուցումները և ցուցադրեմ ուրախ ժամացույց իմ OLED- ում և (C) կարգավորել OTA- ի թարմացումները, այնպես որ ես ստիպված չեմ ֆիզիկապես միացնել իմ տախտակը իմ Mac- ին ՝ կոդի թարմացման համար: Այս պահին այն ամենը մեկ մոնոլիտ C ++ ֆայլում է, միայն այն պատճառով, որ ժամանակ չեմ տրամադրել այն ավելի լավ կազմակերպելու համար:

Ես օգտվեցի հիանալի (և անվճար) Prowl iOS հավելվածից ՝ իմ հեռախոսին push ծանուցումներ ուղարկելու համար, բացի HTTP Get մեթոդներից:

Կոդը մշակելու և տախտակը լուսավորելու համար ես օգտագործեցի դիտարժան PlatformIO- ն, որն աշխատում էր Visual Studio Code- ով, երկուսն էլ անվճար:

Իմ նախագծի համար ես օգտագործեցի այս գրադարանները ՝ Օլիվերի u8g2, Պոլ Ստոֆրեգենի elapsedMillis և Մարկուս Սաթլերի HTTPClient, որը գալիս է Espressif ESP32 պլատֆորմով: Մնացած ամեն ինչ կա՛մ Arduino գրադարանով, կա՛մ PlatformIO- ի ESP32 հարթակով:

Ի վերջո, ես ստեղծեցի իմ հիմնական ճախարի վեց պարզ բիթ քարտեզներ տարբեր անկյուններից, որպեսզի կարողանամ ցուցադրել մի փոքր պտտվող անիվի անիմացիա OLED- ի վաճառասեղանի հետևում: Կոդավորիչի հետ այն շարժվում է համապատասխան ուղղությամբ, չնայած շատ ավելի արագ `ավելի դրամատիկ էֆեկտի համար:

Քայլ 4: Լարերի տեղադրում

Հաղորդալարեր
Հաղորդալարեր

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

Առաջին պահանջը իմ պտտվող կոդավորիչի 5 Վ լարման լարումն էր: ESP32 dev տարբեր տախտակներից, որոնք ես ունեի իմ պահեստում, միայն մի քանիսը մատակարարում էին իսկական 5V Vcc պինին, երբ աշխատում էր USB- ով: (Մյուսները չափեցին 4,5-4,8 Վ, ինչը, եթե ձեր մաթեմատիկան վատ է, 5 Վ-ից ցածր է): Իմ օգտագործած տախտակը Wemos Lolin32- ն էր:

Հաջորդը, եկեք երկու պտտվող կոդավորիչի ազդանշանային կապում: Քանի որ ես օգտագործում եմ ընդհատումներ, հիմնական մտահոգությունն այն է, որ իմ օգտագործած քորոցները ոչ մի բանի չեն խանգարում: ESP32- ի փաստաթղթերում նշվում է, որ ADC2- ը չի կարող օգտագործվել WiFi- ի հետ միաժամանակ, այնպես որ, ցավոք, նշանակում է, որ ես չեմ կարող օգտագործել ADC2 GPIO- ի ցանկացած կապում `0, 2, 4, 12, 13, 14, 15, 25, 26, կամ 27. Ես ընտրեցի 16 և 17:

Հուշում. Եթե այս ամենը միասին դնելուց հետո ձեր կոդավորիչը կարծես հետ է հաշվում, կարող եք պարզապես փոխանակել երկու կապի առաջադրանքները config.h- ում:

Ի վերջո, միացրեք պտտվող կոդավորիչի գրունտալարը… թմբուկի գլան… գետնին քորոցին:

Հաջորդը, զրոյական/զրոյական կոճակը միանում է գետնին և մեկ այլ անվճար քորոցի միջև (ես ընտրեցի GPIO 18):

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

Վերջապես, OLED- ը, եթե այն արդեն միացված չէ ձեր տախտակին, անհրաժեշտ է ընդամենը չորս կապում `3V3, գետնին, i2c ժամացույց և i2c տվյալներ: Իմ dev board- ում ժամացույցը և տվյալները համապատասխանաբար 22 և 21 են:

Քայլ 5: Տպեք մասերը

Տպագրեք մասերը
Տպագրեք մասերը

Այս նախագծի համար ես նախագծեցի յոթ մաս.

Theախպանը, որն անմիջապես ամրացվում է պտտվող կոդավորիչի լիսեռի վրա:

Պարապուրդ, որը տեղավորվում է 608ZZ կրողին (հեռացրեք շապիկները և յուղազերծեք WD40- ով, որպեսզի այն ազատ պտտվի):

Սարքը, որի վրա տեղադրվում են երկու կրունկներն ու կոդավորիչը, նշեք պարույրի աղբյուրը պարապուրդի համար:

Ամրակ ՝ ամրացնողը կայունացնելու համար: Այս քայլի լուսանկարը ցույց է տալիս, թե ինչպես է փակագիծը ամրացվում ամրակին:

Պարիսպը (ներքևում) ՝ իմ ESP32 dev տախտակը պահելու համար, կողքի վրա USB մալուխի համար տեղ կա, իսկ վերևում ՝ միակցիչի համար, որը ես ավելացրել եմ իմ կոդավորիչի լարերին: Այս մեկը նախատեսված է տեղավորելու Wemos Lolin32- ը, այնպես որ գուցե ստիպված լինեք մի փոքր ձևափոխել այս դիզայնը ՝ այլ տախտակին տեղավորելու համար:

OLED էկրանը պահելու պարիսպը (վերևում), ևս մեկ պարույր զրոյական / զրոյական կոճակի համար

Իմ ունեցած փոքրիկ անջատիչի համար հարմարեցված կոճակ, որը նախատեսված է ներքևի պատյանում գտնվող երկու դարակների միջև հանգստանալու համար: Ես օգտագործեցի զոդման սարք, անջատիչը «կպցնելու» համար ամրակին; նկարի համար տեսեք նախորդ քայլը:

Ամեն ինչ նախագծված է տպելու առանց հենարանների: Ձեր ընտրած գույնի սովորական PLA- ն այն ամենն է, ինչ ձեզ հարկավոր է:

Ամեն ինչ միացրեք, կցեք ձեր տպիչին (այստեղ կարող է պահանջվել որոշ ստեղծագործական կարողություններ), և դուք պատրաստ եք:

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