Përmbajtje:

Smart Counter Filament Printer 3D: 5 hapa (me fotografi)
Smart Counter Filament Printer 3D: 5 hapa (me fotografi)

Video: Smart Counter Filament Printer 3D: 5 hapa (me fotografi)

Video: Smart Counter Filament Printer 3D: 5 hapa (me fotografi)
Video: 3D Printed Pin Support Challenge 😱 2024, Nëntor
Anonim
Smart Counter Filament Printer 3D
Smart Counter Filament Printer 3D

Pse të shqetësohesh duke numëruar filamentin? Disa arsye:

Shtypjet e suksesshme kërkojnë një ekstruder të kalibruar siç duhet: kur gcode i thotë ekstruderit të lëvizë fijen 2mm, duhet të lëvizë saktësisht 2mm. Gjëra të këqija ndodhin nëse tejkalon ose nën-ekstrudon. Një sportel i kalibruar mirë mund të mbajë një ekstruder të ndershëm

Prerësit përafrojnë sa fije e përgjithshme e një printimi të caktuar do të marrë (si në gjatësi ashtu edhe në peshë) dhe unë do të doja të kontrolloja ato vlera

Matja e lëvizjes së filamentit gjithashtu më tregoni kur ka filluar printimi dhe kur është ndalur

Më duhej diçka për të mbuluar hapësirën e lënë nga heqja e logos së shëmtuar gjigante në pjesën e përparme të printerit tim

Coolshtë mirë

Unë u frymëzova nga ky udhëzues, i cili ripërdor një miun e vjetër PS/2 si një numërues fije për një Printer 3D. Jo vetëm që shtoi një veçori të dobishme në një printer 3D, por ripërdoroi një pajisje të vjetër që përndryshe do të përfundonte në një deponi. Por ai projekt u ndërtua rreth ndërfaqes PS/2 të miut, e cila dukej e panevojshme e rëndë. Kështu që e mora këtë si një mundësi për të mësuar në lidhje me përbërësin e vetëm thelbësor: koduesin rrotullues.

Furnizimet

Kodifikues rrotullues

Bordi dev i bazuar në ESP32

Ekran I2C OLED (njësia me dy ngjyra duket veçanërisht e ftohtë)

Butoni i vogël momental

De-greased kushineta 608ZZ

Dy unaza o nga dyqani i pajisjeve (diameter 33mm ID x diameter 1.5mm diametër profili - shiko komentet)

Dy vida 2.5 mm për mbyllje

Dy vida, arra dhe rondele 4 mm për të lidhur montuesin në printerin tuaj

Tufa tela

Printer 3D dhe disa filamente

Hapi 1: Zgjidhni një kodues rrotullues

Zgjidhni një kodues rrotullues
Zgjidhni një kodues rrotullues
Zgjidhni një kodues rrotullues
Zgjidhni një kodues rrotullues

Kodifikuesit rrotullues përkthejnë lëvizjen rrotulluese në impulse elektrike. Të gjithë minjtë e shkollës së vjetër i përdorën ato për të matur lëvizjen e topit të rrotullimit, dhe minjtë optikë më modernë (ha ha) akoma i përdorën ato për rrotullën e rrotullës, e cila ishte ajo që kisha vendosur dhe përdorur për eksperimentimin fillestar. Fatkeqësisht, imi nuk ofroi pika të dukshme të montimit dhe zgjidhja e tij ishte e dobët.

Nëse ia vlen të bësh, ia vlen të bësh shumë. Kështu që bleva një kodues të madh, miqësor, me 360 puls për revolucion dhe ndërtova projektin tim rreth tij. Ajo që zgjodha ishte një Kodifikues Rrotullues Optik Rritës Signswise, i tipit LPD3806-360BM-G5-24C. Por çdo kodifikues i mirë do të bëjë.

Hapi 2: Shtoni një rrotull dhe përtac

Shtoni një Pulley dhe Idler
Shtoni një Pulley dhe Idler

Lëvizja lineare e filamentit përkthehet në lëvizje rrotulluese të kodifikuesit nga një rrotull. Dhe filamenti mbahet kundër rrotullës nga një përtac.

Rrotulla ka dy groove, secila mban një unazë o të shtrirë kështu që nuk ka rrëshqitje, Përtacia ka një brazdë të vetme v për të mbajtur fijen në qendër në rrotullën e koduesit. Itshtë ulur në një kushinetë 608ZZ që kisha shtrirë përreth, dhe është montuar në një sustë spirale të shtypur pikërisht në trupin kryesor të projektit tim. (Skedarët STL bashkangjitur më poshtë.)

Për këtë u desh një provë dhe gabim, por modeli im duhet të strehojë një sërë këndesh dhe rreze të mbështjelljes, duke lejuar që filamenti të lëshohet nga çdo pjesë e bobinës, nga fillimi deri në fund të një printimi. Dhe pranvera e shtypur e bën të lehtë futjen ose daljen e filamentit kur ndërroni bobinat.

Hapi 3: Kodimi

Image
Image

Për të numëruar filamentin, çdo bord zhvillues me dy hyrje dixhitale do të funksionojë. Koduesi që zgjodha ka katër kunja: Vcc, terren dhe dy kunja kodimi. Këtu keni një shkrim vërtet të bukur që shpjegon se si funksionojnë koduesit rrotullues dhe si t'i ndërlidhni ato me Arduino. (Gjithashtu: ky artikull rreth kodifikuesve me 3 kunja.)

Numërimi bazë është i thjeshtë: dy hyrje - të vendosura për t'u tërhequr brenda, kështu që rezistorët e jashtëm nuk kanë nevojë të bashkohen në Vcc - dhe një ndërprerje. Unë gjithashtu shtova një buton zero/rivendosje, duke kërkuar një hyrje dhe ndërprerje më shumë:

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); attachInterrupt (ZERO_BTN_PIN, zeroButtonPressed, CHANGE); } void IRAM_ATTR encoderPinDidChange () {if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) {pozicion += 1; } else {pozicioni -= 1; }} void IRAM_ATTR zeroButtonPressed () {// trajtoni zero dhe rivendosni}

Por unë doja më shumë sesa thjesht një sportel memec. Me një ESP32 (ose ESP8266) dhe WiFi-në e tij të integruar, në fakt mund të bëj diçka me të dhënat që po mbledh. Duke përdorur një kod të thjeshtë të kohës së përfundimit (shpjeguar më poshtë), unë mund të përcaktoj kur fillon dhe mbaron printimi dhe t'i dërgoj ato ngjarje si njoftime në telefonin tim. Në të ardhmen, mund të shtoj një sensor të mbarimit dhe të njoftoj veten (dhe të ndërpres printerin tim) kur të jetë e nevojshme vëmendja ime.

Kodi i plotë është në Github.

Disa shënime mbi kodin:

Për ta përshtatur këtë me modelin tuaj, gjithçka që ju nevojitet është rezolucioni (encoderPPR) - në impulse për revolucion, i cili është zakonisht dyfishi i specifikës së deklaruar - dhe rrezja e rrotullës (wheelRadius). Këto vlera, plus ssid dhe fjalëkalimin e wifi -t tuaj dhe kunjat e veçanta të lidhura me butonin, koduesin dhe ekranin OLED, të gjitha shkojnë në konfigurimin.h

Butoni zero gjithashtu dyfishohet si një rivendosje - mbajeni atë për të rindezur tabelën, e cila është e dobishme për korrigjimin

Ndërprerjet janë të fuqishme - ndonjëherë shumë të fuqishme. Një prekje e vetme e butonit zero mund të shkaktojë që funksioni zeroButtonPpress () të thirret 10-20 herë, kështu që shtova një logjikë debounce. Kodifikuesi im optik nuk kishte nevojë për të, por YMMV

Ndërsa ndërprerjet kujdesen për hyrjet në mënyrë asinkrone, rutina e lakut () merret me mbajtjen e librave. EncoderState - një enum që mund të ushqehet, tërhiqet ose ndalohet - azhurnohet me ndryshimin e pozicionit të koduesit. Kohëzgjatjet më pas përcaktojnë kur printeri ka filluar dhe përfunduar printimin. Por pjesa e ndërlikuar është se printerat 3D shpesh fillojnë dhe ndalojnë lëvizjen, kështu që ajo që funksionoi më së miri ishte përcaktimi i ngjarjes "printimi i plotë" duke mbetur i ndaluar vazhdimisht për të paktën 5 sekonda. Çdo lëvizje shkakton një kohëmatës të dytë që përcakton ngjarjen "fillimi i printimit" vetëm nëse asnjë ngjarje "printimi i plotë" nuk ndodh në një afat kohor prej 15 sekondash. Në praktikë, kjo funksionon me not

Pra, kodi i lakut kryesor () mund të funksionojë pa ngarkesa, kodi i debuncimit funksionon në një cikël detyre RTOS. Po kështu, kërkesat http për të dërguar njoftime janë sinkrone dhe për këtë arsye janë të sfonduara. Kështu animacionet funksionojnë pa probleme dhe numërimi nuk ndalet kurrë

Ka një mori kodesh shtesë në shembullin tim për të (A) krijuar dhe mbajtur një lidhje rrjeti me WiFi dhe mDNS, (B) të marr kohën nga një server NTC në mënyrë që të mund të vulos me kohë njoftimet e mia të fillimit dhe mbarimit dhe të shfaq një orë argëtuese në OLED -in tim, dhe (C) trajtoj përditësimet OTA kështu që nuk kam pse ta lidh fizikisht tabelën time me Mac -in tim për përditësimet e kodit. Për momentin, është e gjitha në një skedar monolit C ++, vetëm sepse nuk kam marrë kohë për ta organizuar më mirë

Kam përdorur aplikacionin e mrekullueshëm (dhe falas) Prowl iOS për të dërguar njoftime push në telefonin tim pa asgjë më shumë se metodat HTTP Get

Për të zhvilluar kodin dhe ndezur tabelën, kam përdorur PlatformIO spektakolare që funksionon në Visual Studio Code, të dyja falas

Për projektin tim, kam përdorur këto biblioteka: u8g2 nga Oliver, elapsedMillis nga Paul Stoffregen dhe HTTPClient nga Markus Sattler, e cila vjen me platformën Espressif ESP32. Çdo gjë tjetër ose vjen me bibliotekën Arduino ose platformën ESP32 në PlatformIO

Së fundi, unë krijova gjashtë bitmap të thjeshtë të rrotullës sime kryesore në kënde të ndryshme, kështu që mund të tregoja një animacion të pastër të rrotullimit në OLED pas banakut. Ai lëviz në drejtimin e duhur me koduesin, edhe pse shumë më shpejt për një efekt më dramatik

Hapi 4: Instalimet elektrike

Instalime elektrike
Instalime elektrike

Unë e projektova këtë në mënyrë që instalimet elektrike të ishin të thjeshta, kryesisht në mënyrë që rrethimi im të ishte i vogël, por gjithashtu korrigjimi i gabimeve do të ishte drejtpërsëdrejti. Vini re kushtet e ngushta në kutinë time të vogël.:)

Kërkesa e parë ishte tensioni i furnizimit 5V i koduesit tim rrotullues. Nga bordet e ndryshme të zhvillimit ESP32 që kisha në stokun tim, vetëm disa furnizuan 5V të vërtetë në pinin Vcc kur mundësoheshin nga USB. (Të tjerët matën 4.5-4.8V, e cila, në rast se matematika juaj është e keqe, është më e ulët se 5V.) Tabela që kam përdorur ishte një Wemos Lolin32.

Tjetra, vijnë dy kunjat e sinjalit të koduesit rrotullues. Meqenëse po përdor ndërprerje, shqetësimi kryesor është që kunjat që përdor nuk ndërhyjnë me asgjë. Dokumentet ESP32 thonë se ADC2 nuk mund të përdoret në të njëjtën kohë me WiFi, kështu që për fat të keq do të thotë që nuk mund të përdor asnjë nga kunjat e ADC2 GPIO: 0, 2, 4, 12, 13, 14, 15, 25, 26, ose 27. Zgjodha 16 dhe 17.

Këshillë pro: nëse, pasi i keni bashkuar të gjitha këto, kodifikuesi juaj duket se po numëron prapa, thjesht mund të ndërroni dy caktimet e kunjave në konfigurimin.h.

Së fundi, lidhni telin tokësor të koduesit rrotullues me … rrotullën e daulles … kunjin e tokëzimit.

Tjetra, butoni zero/rivendosje lidhet midis tokës dhe një kunj tjetër falas (zgjodha GPIO 18).

Butoni që kam përdorur ishte një ndërprerës i vogël i çastit që shpëtova nga miu kompjuterik i lartpërmendur, por çdo buton që keni vënë rreth tij do të funksionojë. Ju mund ta shihni atë duke pushuar në një mal të vogël që kam bërë për të pikërisht mbi dërrasë.

Së fundi, OLED, nëse nuk është i lidhur tashmë me bordin tuaj, ka nevojë për vetëm katër kunja: 3V3, tokë, orë i2c dhe të dhëna i2c. Në bordin tim të zhvillimit, ora dhe të dhënat janë përkatësisht 22 dhe 21.

Hapi 5: Shtypni Pjesët

Shtypni Pjesët
Shtypni Pjesët

Kam projektuar shtatë pjesë për këtë ndërtim:

Rrotulla, e cila montohet drejtpërdrejt në boshtin e kodifikuesit rrotullues

I papunë, i cili përshtatet mbi një kushinetë 608ZZ (hiqni qoshet dhe yndyrosni me WD40 në mënyrë që të rrotullohet lirshëm)

Mbajtësi, mbi të cilin ngrihen dy thembra dhe koduesi - vini re pranverën spirale për boshtin

Një kllapa për të stabilizuar mbajtësin. Fotografia në këtë hap tregon se si kllapa i ngjitet mbajtësit

Mbyllja (poshtë) për të mbajtur bordin tim ESP32 dev, me një hapësirë për kabllon USB në anën dhe një tjetër në krye për lidhësin që shtova në telat e koduesit. Ky është krijuar për t'iu përshtatur Wemos Lolin32, kështu që mund t'ju duhet të modifikoni pak këtë dizajn për t'iu përshtatur një bordi tjetër

Rrethimi (lart) për të mbajtur ekranin OLED, një spirale tjetër për butonin zero / rivendosje

Një mbajtës butoni i përshtatur për çelësin e vogël që kisha, i projektuar për të pushuar midis dy rafteve brenda rrethimit të poshtëm. Kam përdorur një hekur bashkues për të "ngjitur" kalimin në mbajtës; shikoni hapin paraprak për një fotografi

Çdo gjë është krijuar për t'u shtypur pa mbështetës. PLA normale në ngjyrën tuaj të zgjedhur është gjithçka që ju nevojitet.

Vendosini të gjitha së bashku, bashkojini printerit tuaj (këtu mund të kërkohet njëfarë krijimtarie) dhe jeni mirë.

Recommended: