Talaan ng mga Nilalaman:

Smart 3D Printer Filament Counter: 5 Hakbang (na may Mga Larawan)
Smart 3D Printer Filament Counter: 5 Hakbang (na may Mga Larawan)

Video: Smart 3D Printer Filament Counter: 5 Hakbang (na may Mga Larawan)

Video: Smart 3D Printer Filament Counter: 5 Hakbang (na may Mga Larawan)
Video: MKS Gen L - Marlin 1 1 9 (configuration.h) 2024, Hunyo
Anonim
Smart 3D Printer Filament Counter
Smart 3D Printer Filament Counter

Bakit abala sa pagbibilang ng filament? Ilang kadahilanan:

Ang matagumpay na mga kopya ay nangangailangan ng isang maayos na naka-calibrate na extruder: kapag sinabi ng gcode sa extruder na ilipat ang filament 2mm, kailangan nitong ilipat ang eksaktong 2mm. Masasamang bagay ang nangyayari kung ito ay labis na nagpapalabas o under-extrudes. Ang isang mahusay na naka-calibrate na counter ay maaaring panatilihin ang isang extruder matapat

Tinatantiya ng mga slicer kung magkano ang kabuuang filament na aabutin ng isang naibigay na pag-print (sa parehong haba at timbang) at nais kong suriin ang mga halagang iyon

Ang pagsukat sa paggalaw ng filament ay ipaalam din sa akin kung kailan nagsimula ang pag-print at kung kailan ito tumigil

Kailangan ko ng isang bagay upang takpan ang puwang naiwan ng pag-alis ng pangit na higanteng logo sa harap ng aking printer

Ang astig

Naging inspirasyon ako ng itinuturo na ito, na muling nagbago ng isang lumang PS / 2 mouse bilang isang filament counter para sa isang 3D Printer. Hindi lamang ito nagdagdag ng isang kapaki-pakinabang na tampok sa isang 3D printer, nag-repurposed ito ng isang lumang aparato na kung hindi man ay napunta sa isang landfill. Ngunit ang proyektong iyon ay itinayo sa paligid ng interface ng PS / 2 ng mouse, na waring mahirap gawin. Kaya kinuha ko ito bilang isang pagkakataon upang malaman ang tungkol sa tanging mahahalagang bahagi: ang rotary encoder.

Mga gamit

Rotary encoder

Batay sa board ng dev32 ng ESP32

I2C OLED display (cool na hitsura ng two-color unit)

Napakaliit na sandali na pushbutton

De-greased 608ZZ tindig

Dalawang o-ring mula sa tindahan ng hardware (~ 33mm ID x ~ 1.5mm diameter ng profile - tingnan ang mga komento)

Dalawang 2.5mm na self-tapping screws para sa enclosure

Dalawang 4mm na turnilyo, mani, at washer upang ilakip ang mount sa iyong printer

Bungkos ng mga wire

3D Printer at ilang filament

Hakbang 1: Pumili ng isang Rotary Encoder

Pumili ng isang Rotary Encoder
Pumili ng isang Rotary Encoder
Pumili ng isang Rotary Encoder
Pumili ng isang Rotary Encoder

Isinalin ng mga rotary encoder ang paikot na paggalaw sa mga de-kuryenteng pulso. Ginamit sila ng lahat ng mga daga ng old-school upang sukatin ang paggalaw ng rolling ball, at ginamit pa rin sila ng mga mas moderno (ha ha) na mga mouse para sa scroll wheel, na kung saan ay inilalagay ko at ginamit para sa paunang pag-eksperimento. Sa kasamaang palad, ang minahan ay nag-alok ng walang halatang mga mount point at ang resolusyon nito ay hindi maganda.

Kung sulit gawin, sulit na labis na gawin. Kaya bumili ako ng isang malaki, palakaibigan, 360-pulso bawat rebolusyon encoder at itinayo ang aking proyekto sa paligid nito. Ang pinili ko ay isang Signswise Incremental Optical Rotary Encoder, uri ng LPD3806-360BM-G5-24C. Ngunit ang anumang disenteng encoder ay magagawa.

Hakbang 2: Magdagdag ng isang Pulley at Idler

Magdagdag ng isang Pulley at Idler
Magdagdag ng isang Pulley at Idler

Ang paggalaw ng Linear ng filament ay isinalin sa paikot na paggalaw ng encoder ng isang kalo. At ang filament ay gaganapin laban sa pulley ng isang idler.

Ang pulley ay may dalawang mga uka, bawat isa ay may hawak ng isang nakaunat na o-ring upang walang pagdulas, Ang tamad ay may isang solong v-uka upang mapanatili ang filament na nakasentro sa encoder pulley. Nakaupo ito sa isang 608ZZ na tindig na aking inilatag, at naka-mount ito sa isang spiral spring na naka-print mismo sa pangunahing katawan ng aking proyekto. (Ang mga STL file ay nakakabit sa ibaba.)

Tumagal ito ng ilang pagsubok at error upang makakuha ng tama, ngunit ang aking disenyo ay dapat tumanggap ng iba't ibang mga anggulo at spool radii, na pinapayagan ang filament na makapagpahinga mula sa anumang bahagi ng spool, lahat mula sa simula hanggang sa katapusan ng isang naka-print. At ang naka-print na tagsibol ay ginagawang madali upang i-pop in o labas ang filament kapag binabago ang mga spool.

Hakbang 3: Pag-coding

Image
Image

Para sa pagbibilang lamang ng filament, gagawin ang anumang dev board na may dalawang digital input. Ang encoder na pinili ko ay may apat na mga pin: Vcc, ground, at dalawang mga encoder na pin. Narito ang isang napakahusay na pagsulat na nagpapaliwanag kung paano gumagana ang mga rotary encoder at kung paano i-interface ang mga ito sa Arduino. (Gayundin: ang artikulong ito tungkol sa mga 3-pin encoder.)

Ang pangunahing pagbibilang ay simple: dalawang mga input - naitakda upang makuha nang panloob kaya't ang mga panlabas na resistor ay hindi kailangang solder sa Vcc - at isang makagambala. Nagdagdag din ako ng isang zero / reset button, na nangangailangan ng isa pang input at makagambala:

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, zero ButtonPressed, CHANGE); } walang bisa IRAM_ATTR encoderPinDidChange () {if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) {posisyon + = 1; } iba pa {posisyon - = 1; }} walang bisa IRAM_ATTR zero ButtonPressed () {// hawakan zero at i-reset}

Ngunit ginusto ko ang higit pa sa isang pipi na counter. Sa pamamagitan ng isang ESP32 (o ESP8266) at ang built-in na WiFi, talagang may magagawa ako sa data na kinokolekta ko. Gamit ang ilang simpleng timeout code (ipinaliwanag sa ibaba), matutukoy ko kung kailan magsisimula at magtatapos ang pag-print, at ipadala ang mga kaganapang iyon bilang mga abiso sa aking telepono. Sa hinaharap, maaari akong magdagdag ng isang naubusan na sensor at aabisuhan ang aking sarili (at i-pause ang aking printer) kung kinakailangan ang aking pansin.

Nasa Github ang buong code.

Ilang tala sa code:

Upang ipasadya ito sa iyong pagbuo, ang kailangan mo lang ay ang resolusyon (encoderPPR) - sa mga pulso bawat rebolusyon, na karaniwang dalawang beses ang nakasaad na spec - at ang radius ng pulley (wheelRadius). Ang mga halagang ito, kasama ang ssid at password ng iyong wifi at ang mga tukoy na pin na konektado sa pindutan, encoder, at OLED screen, lahat ay pumunta sa config.h

Ang zero button ay dinoble bilang isang pag-reset - pindutin ito down upang i-reboot ang board, na kung saan ay kapaki-pakinabang para sa pag-debug

Ang mga pagkagambala ay malakas - kung minsan masyadong malakas. Ang isang solong pag-tap ng zero button ay maaaring maging sanhi ng pag-andar ng zero ButtonPressed () na tinawag na 10-20 beses, kaya nagdagdag ako ng ilang lohikal na lohika. Ang aking optikong encoder ay hindi kailangan ito, ngunit YMMV

Habang ang mga nakakagambala ay nangangalaga sa mga input nang walang asynkron, ang loop () na gawain ang humahawak sa bookkeeping. Ang encoderState - isang enum na maaaring nagpapakain, mag-retract, o tumigil - ay na-update sa pagbabago ng posisyon ng encoder. Natutukoy ng timeout kung kailan nagsimula ang printer at nagtapos sa pag-print. Ngunit ang nakakalito na bahagi ay ang mga 3D printer na madalas magsimula at itigil ang paggalaw, kaya kung ano ang pinakamahusay na gumana ay upang tukuyin ang "kumpletong pag-print" na kaganapan na natitirang patuloy na huminto ng hindi bababa sa 5 segundo. Ang anumang paggalaw ay nagpapalitaw ng pangalawang timer na tumutukoy sa kaganapan na "nagsimula ang pag-print" kung walang kaganapan na "kumpleto ang pag-print" na nangyayari sa isang timeframe na 15 segundo. Sa pagsasagawa, ito ay gumagana sa paglangoy

Kaya't ang pangunahing loop () na code ay maaaring tumakbo nang hindi nababalot, ang debounce code ay tumatakbo sa isang loop ng gawain ng RTOS. Gayundin, ang mga kahilingan sa http na magpadala ng mga abiso ay magkasabay at samakatuwid ay naka-background. Sa gayon ang mga animasyon ay tumatakbo nang maayos at ang pagbibilang ay hindi hihinto

Mayroong isang bungkos ng karagdagang code sa aking halimbawa upang (A) magtaguyod at mapanatili ang isang koneksyon sa network sa WiFi at mDNS, (B) kunin ang oras mula sa isang NTC server upang ma-time-stamp ang aking pagsisimula at pagtatapos ng mga abiso at ipakita ang isang walang kabuluhang orasan sa aking OLED, at (C) hawakan ang mga pag-update ng OTA kaya't hindi ko kinakailangang pisikal na ikonekta ang aking board sa aking Mac para sa mga pag-update ng code. Sa ngayon, lahat ito ay nasa isang monolithic C ++ file, lamang dahil hindi ko pa ginugol ang oras upang ayusin ito nang mas mahusay

Ginamit ko ang kahanga-hangang (at libre) Prowl iOS app upang magpadala ng mga abiso sa push sa aking telepono nang walang hihigit sa mga pamamaraan ng HTTP Kumuha

Upang mabuo ang code at i-flash ang board, ginamit ko ang kamangha-manghang PlatformIO na tumatakbo sa Visual Studio Code, parehong libre

Para sa aking proyekto, ginamit ko ang mga aklatan na ito: u8g2 ni Oliver, elapsedMillis ni Paul Stoffregen, at HTTPClient ni Markus Sattler, na kasama ng Espressif ESP32 platform. Lahat ng iba pa ay may kasamang Arduino library o ang platform ng ESP32 sa PlatformIO

Sa wakas, lumikha ako ng anim na simpleng bitmap ng aking pangunahing pulley sa iba't ibang mga anggulo, upang maipakita ko ang isang maayos na maliit na animasyon ng umiikot na gulong sa OLED sa likod ng counter. Gumagalaw ito sa naaangkop na direksyon sa encoder, kahit na mas mabilis para sa isang mas dramatikong epekto

Hakbang 4: Mga kable

Kable
Kable

Idinisenyo ko ito upang ang mga kable ay patay na simple, karamihan sa gayon ang aking enclosure ay maaaring maliit, ngunit din kaya ang pag-debug ay magiging straight-foward. Tandaan ang mga masikip na kondisyon sa aking maliit na kahon.:)

Ang unang kinakailangan ay ang boltahe ng supply ng 5V ng aking rotary encoder. Sa iba't ibang mga ESP32 dev board na mayroon ako sa aking itinago, iilan lamang ang nag-supply ng totoong 5V sa pin ng Vcc kapag pinalakas ng USB. (Sinusukat ng iba ang 4.5-4.8V, kung saan, kung sakaling masama ang iyong matematika, mas mababa sa 5V.) Ang ginamit kong board ay isang Wemos Lolin32.

Susunod, dumating ang dalawang mga paikot na signal signal encoder. Dahil gumagamit ako ng mga nakakagambala, ang pangunahing pag-aalala ay ang mga pin na ginagamit ko ay hindi makagambala sa anumang bagay. Nakasaad sa mga dokumento ng ESP32 na ang ADC2 ay hindi maaaring gamitin nang sabay sa WiFi, kaya sa kasamaang palad nangangahulugan na hindi ako makakagamit ng anuman sa mga ADC2 GPIO pin: 0, 2, 4, 12, 13, 14, 15, 25, 26, o 27. Pinili ko ang 16 at 17.

Pro tip: kung, pagkatapos ng pagsasama-sama ng lahat ng ito, ang iyong encoder ay tila nagbibilang nang paurong, maaari mo lamang ipagpalit ang dalawang takdang-pin sa config.h.

Panghuli, ikonekta ang paikot na ground encoder sa … drum roll… ang ground pin.

Susunod, ang zero / reset push button ay konektado sa pagitan ng ground at isa pang libreng pin (pinili ko ang GPIO 18).

Ang pindutang ginamit ko ay isang maliit na saglit na paglipat na aking nailigtas mula sa nabanggit na computer mouse, ngunit ang anumang pindutan na iyong inilatag ay magagawa. Maaari mong makita itong nagpapahinga sa isang maliit na bundok na ginawa ko para dito sa ibabaw mismo ng pisara.

Sa wakas, ang OLED, kung hindi pa ito konektado sa iyong board, kailangan lamang ng apat na pin: 3V3, ground, i2c na orasan, at i2c data. Sa aking dev board, ang orasan at data ay 22 at 21, ayon sa pagkakabanggit.

Hakbang 5: I-print ang Mga Bahagi

I-print ang Mga Bahagi
I-print ang Mga Bahagi

Dinisenyo ko ang pitong bahagi para sa pagbuo na ito:

Ang kalo, na direktang nai-mount sa baras ng rotary encoder

Ang tamad, na umaangkop sa isang 608ZZ tindig (alisin ang mga sheilds at degrease sa WD40 kaya't malayang umikot ito)

Ang may-ari, kung saan naka-mount ang dalawang weels at encoder - tandaan ang spiral spring para sa tamad

Isang bracket upang patatagin ang may-ari. Ipinapakita ng larawan sa hakbang na ito kung paano nakakabit ang bracket sa may-ari

Ang enclosure (ilalim) upang hawakan ang aking board ng dev32, na may puwang para sa USB cable sa gilid at isa pa sa itaas para sa konektor na idinagdag ko sa aking mga wire ng encoder. Ang isang ito ay dinisenyo upang magkasya sa Wemos Lolin32, kaya maaaring kailanganin mong baguhin ang disenyo ng kaunti upang magkasya sa ibang board

Ang enclosure (itaas) upang hawakan ang OLED screen, isa pang spiral para sa zero / reset button

Ang isang may-ari ng pindutan na ipasadya para sa maliit na switch na mayroon ako, na idinisenyo upang magpahinga sa pagitan ng dalawang mga istante sa loob ng ilalim ng enclosure. Gumamit ako ng isang bakal na panghinang upang "idikit" ang switch sa may hawak; tingnan ang naunang hakbang para sa isang larawan

Ang lahat ay idinisenyo upang mai-print nang walang mga suporta. Normal na PLA sa iyong kulay ng pagpipilian ang kailangan mo.

Pagsamahin ang lahat, mag-attach sa iyong printer (maaaring kailanganin ang ilang pagkamalikhain dito), at mahusay kang pumunta.

Inirerekumendang: