INHOUDSOPGAWE:

Slim 3D -drukker filamentteller: 5 stappe (met foto's)
Slim 3D -drukker filamentteller: 5 stappe (met foto's)

Video: Slim 3D -drukker filamentteller: 5 stappe (met foto's)

Video: Slim 3D -drukker filamentteller: 5 stappe (met foto's)
Video: I Developed my own 3D PRINTER Controller Software! 2024, November
Anonim
Slim 3D -drukker filamentteller
Slim 3D -drukker filamentteller

Waarom die moeite doen om filament te tel? 'N Paar redes:

Suksesvolle afdrukke benodig 'n behoorlik gekalibreerde ekstruder: as die gcode die ekstruder vertel om die filament 2 mm te beweeg, moet dit presies 2 mm beweeg. Slegte dinge gebeur as dit uit- of onder-uitgedruk word. 'N Goed gekalibreerde toonbank kan 'n ekstruder eerlik hou

Slicers benader ongeveer hoeveel totale filament 'n gegewe druk (in lengte en gewig) sal neem, en ek wil die waardes nagaan

Deur die beweging van die filament te meet, laat ek ook weet wanneer die druk begin en wanneer dit stop

Ek het iets nodig gehad om die ruimte te bedek deur die verwydering van die lelike reuse -logo op die voorkant van my drukker

Dis gaaf

Ek is geïnspireer deur hierdie instruksies, wat 'n ou PS/2 -muis hergebruik het as 'n gloeidraadteller vir 'n 3D -drukker. Dit het nie net 'n nuttige funksie bygevoeg tot 'n 3D -drukker nie, maar ook 'n ou toestel wat andersins op 'n stortingsterrein beland het. Maar die projek is gebou rondom die PS/2 -koppelvlak van die muis, wat onnodig omslagtig gelyk het. Daarom het ek dit as 'n geleentheid gebruik om te leer oor die enigste noodsaaklike komponent: die roterende encoder.

Voorrade

Rotary encoder

ESP32 -gebaseerde ontwikkelingsbord

I2C OLED-skerm (eenheid met twee kleure lyk veral cool)

Klein kort drukknoppie

Ontsmeerde 608ZZ-laer

Twee o -ringe van die ysterwarewinkel (~ 33 mm ID x ~ 1,5 mm profieldiameter - sien kommentaar)

Twee 2,5 mm self-tappende skroewe vir die omhulsel

Twee skroewe, moere en ringe van 4 mm om die houer aan u drukker vas te maak

Klomp drade

3D -drukker en 'n bietjie filament

Stap 1: Kies 'n roterende enkodeerder

Kies 'n Rotary Encoder
Kies 'n Rotary Encoder
Kies 'n Rotary Encoder
Kies 'n Rotary Encoder

Draaikodeerders vertaal rotasiebeweging in elektriese pulse. Alle ou-skool muise het dit gebruik om die beweging van die rolbal te meet, en meer moderne (ha ha) optiese muise het dit nog steeds gebruik vir die rolwiel, en dit was wat ek rondgelê en gebruik het vir die eerste eksperimentering. Ongelukkig het myne geen duidelike bergpunte gebied nie, en die resolusie daarvan was swak.

As dit die moeite werd is om te doen, is dit die moeite werd om te veel te doen. Dus het ek 'n groot, vriendelike, 360-pols per omwenteling-encoder gekoop en my projek daar rondom gebou. Die een wat ek gekies het, was 'n Signswise Incremental Optical Rotary Encoder, tipe LPD3806-360BM-G5-24C. Maar enige ordentlike encoder sal doen.

Stap 2: Voeg 'n katrol en loopwiel by

Voeg 'n katrol en loopwiel by
Voeg 'n katrol en loopwiel by

Lineêre beweging van die filament word vertaal in rotasiebeweging van die encoder deur 'n katrol. En die filament word teen 'n katrol teen 'n katrol gehou.

Die katrol het twee groewe, elk met 'n uitgerekte o-ring sodat daar nie gly nie, Die ledertjie het 'n enkele v-groef om die filament in die middel van die katrolskyfie te hou. Dit sit op 'n 608ZZ -laer wat ek gehad het, en dit is gemonteer op 'n spiraalveer wat in die hoofstuk van my projek gedruk is. (STL -lêers hieronder aangeheg.)

Dit het 'n bietjie proef en fout geneem om reg te kom, maar my ontwerp moet 'n verskeidenheid hoeke en spoelradiusse bevat, sodat die filament van enige deel van die spoel tot die einde van die druk kan afwikkel. En die gedrukte veer maak dit maklik om die filament in of uit te spring as u 'n rol vervang.

Stap 3: Kodering

Image
Image

Om net die filament te tel, sal enige dev -bord met twee digitale insette doen. Die encoder wat ek gekies het, het vier penne: Vcc, gemaalde en twee encoder penne. Hier is 'n baie goeie beskrywing wat verduidelik hoe roterende encoders werk en hoe u dit met Arduino kan koppel. (Ook: hierdie artikel oor 3-pins encoders.)

Die basiese telling is eenvoudig: twee insette - intern om op te trek sodat eksterne weerstande nie aan Vcc hoef te word gesoldeer nie - en een onderbreking. Ek het ook 'n nul/reset -knoppie bygevoeg, wat nog 'n invoer en onderbreking benodig:

leë 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, VERANDER); } ongeldig IRAM_ATTR encoderPinDidChange () {if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) {posisie += 1; } anders {posisie -= 1; }} ongeldig IRAM_ATTR zeroButtonPressed () {// hanteer nul en herstel}

Maar ek wou meer as net 'n dom toonbank hê. Met 'n ESP32 (of ESP8266) en sy ingeboude WiFi kan ek eintlik iets doen met die data wat ek versamel. Met behulp van 'n eenvoudige time -out -kode (hieronder verduidelik), kan ek bepaal wanneer die druk begin en eindig, en kan ek die gebeure as kennisgewings na my telefoon stuur. In die toekoms kan ek 'n oploop-sensor byvoeg en myself in kennis stel (en my drukker onderbreek) wanneer my aandag nodig is.

Die volledige kode is op Github.

'N Paar aantekeninge oor die kode:

Om dit aan u ontwerp aan te pas, is die resolusie (encoderPPR) nodig - in pulse per omwenteling, wat gewoonlik twee keer die vermelde spesifikasie is - en die radius van die katrol (wheelRadius). Hierdie waardes, plus die ssid en wagwoord van u wifi en die spesifieke penne wat aan die knoppie, encoder en OLED -skerm gekoppel is, gaan almal in config.h

Die nulknoppie dien ook as 'n reset - hou dit ingedruk om die bord weer te begin, wat nuttig is vir ontfouting

Onderbrekings is kragtig - soms te kragtig. Deur net op die nulknoppie te tik, kan die zeroButtonPressed () -funksie 10-20 keer genoem word, so ek het 'n bietjie terugslaglogika bygevoeg. My optiese encoder het dit nie nodig nie, maar YMMV

Terwyl die onderbrekings asynchronies vir die insette sorg, hanteer die loop () -roetine die boekhouding. Die encoderState - 'n enum wat gevoer, ingetrek of gestop kan word - word opgedateer met die verandering in posisie van die encoder. Tydsbepalings bepaal dan wanneer die drukker begin en die druk begin het. Maar die moeilike deel is dat 3D -drukkers gereeld begin en stop, dus wat die beste gewerk het, was om die gebeurtenis "afdruk voltooi" te definieer wat deurlopend vir ten minste 5 sekondes gestop is. Enige beweging aktiveer 'n tweede timer wat die gebeurtenis "druk begin" definieer slegs as daar geen 'afdruk voltooi' gebeurtenis binne 'n tydraamwerk van 15 sekondes plaasvind nie. In die praktyk werk dit swemend

Die hooflus () -kode kan dus onbelemmerd werk, en die debounce -kode loop in 'n RTOS -taaklus. Net so is http -versoeke om kennisgewings af te stuur sinchroon en word dit dan ook met die agtergrond gemaak. Animasies loop dus vlot en die tel stop nooit

Daar is 'n klomp ekstra kode in my voorbeeld om (A) 'n netwerkverbinding met WiFi en mDNS tot stand te bring en te onderhou, (B) die tyd van 'n NTC-bediener af te haal, sodat ek my begin- en eindkennisgewings kan tydstempel en 'n geluidsklok kan vertoon op my OLED, en (C) hanteer OTA -opdaterings, sodat ek nie my bord fisies aan my Mac hoef te koppel vir kode -opdaterings nie. Op die oomblik is dit alles in een monolitiese C ++ - lêer, net omdat ek nie die tyd geneem het om dit beter te organiseer nie

Ek het die wonderlike (en gratis) Prowl iOS -app gebruik om stootkennisgewings na my selfoon te stuur met niks anders as HTTP Get -metodes nie

Om die kode te ontwikkel en die bord te flits, gebruik ek die skouspelagtige PlatformIO wat op Visual Studio Code werk, albei gratis

Vir my projek het ek hierdie biblioteke gebruik: u8g2 deur Oliver, millis by Paul Stoffregen, en HTTPClient deur Markus Sattler, wat saam met die Espressif ESP32 -platform kom. Al die ander kom ook by die Arduino -biblioteek of die ESP32 -platform in PlatformIO

Uiteindelik het ek ses eenvoudige bitmaps van my hoof katrol in verskillende hoeke geskep, sodat ek 'n netjiese, klein draai -animasie op die OLED agter die toonbank kon wys. Dit beweeg in die regte rigting met die encoder, hoewel dit baie vinniger is vir 'n meer dramatiese effek

Stap 4: Bedrading

Bedrading
Bedrading

Ek het dit ontwerp sodat die bedrading dood eenvoudig sou wees, meestal sodat my omhulsel klein kon wees, maar ook dat die ontfouting eenvoudig sou wees. Let op die beknopte toestande in my boksie.:)

Die eerste vereiste was die 5V -voedingsspanning van my roterende enkodeerder. Van die verskillende ESP32 -dev -borde wat ek in my stoor gehad het, het slegs 'n paar ware 5V by die Vcc -pin verskaf as dit deur USB aangedryf word. (Die ander het 4,5-4,8V gemeet, wat, as u wiskunde sleg is, laer is as 5V.) Die bord wat ek gebruik het, was 'n Wemos Lolin32.

Vervolgens kom die twee seinpenne van die roterende encoder. Aangesien ek onderbrekings gebruik, is die belangrikste probleem dat die penne wat ek gebruik, niks belemmer nie. Volgens die ESP32 -dokumente kan ADC2 nie gelyktydig met WiFi gebruik word nie, sodat dit ongelukkig beteken dat ek nie een van die ADC2 GPIO -penne kan gebruik nie: 0, 2, 4, 12, 13, 14, 15, 25, 26, of 27. Ek het 16 en 17 gekies.

Pro tip: as dit lyk asof u encoder agteruit tel, nadat u dit alles bymekaargemaak het, kan u die twee pen -opdragte in config.h omruil.

Sluit laastens die roterende encoder gronddraad aan … tromrol… die grondpen.

Vervolgens word die drukknop nul/herstel verbind tussen die grond en 'n ander gratis pen (ek het GPIO 18 gekies).

Die knoppie wat ek gebruik het, was 'n kort rukkie wat ek van die bogenoemde rekenaarmuis gered het, maar enige knoppie wat u in die omtrek het, sal dit doen. U kan dit sien rus in 'n klein berg wat ek daarvoor gemaak het, regoor die bord.

Uiteindelik benodig die OLED, as dit nog nie aan u kaart gekoppel is nie, slegs vier penne: 3V3-, grond-, i2c -klok- en i2c -data. Op my dev -bord is die klok en data onderskeidelik 22 en 21.

Stap 5: Druk die onderdele uit

Druk die onderdele uit
Druk die onderdele uit

Ek het sewe dele vir hierdie konstruksie ontwerp:

Die katrol, wat direk op die as van die roterende encoder gemonteer word

Die luier, wat meer as 'n 608ZZ -laer pas (verwyder die ringe en ontvet met WD40 sodat dit vrylik draai)

Die houer waarop die twee wiele en encoder gemonteer word - let op die spiraalveer vir die ledig

'N Beugel om die houer te stabiliseer. Die foto in hierdie stap wys hoe die hakie aan die houer geheg word

Die omhulsel (onder) om my ESP32 dev board te hou, met 'n spasie vir die USB -kabel aan die kant en nog een bo -op vir die connector wat ek by my encoder drade gevoeg het. Hierdie een is ontwerp om by die Wemos Lolin32 te pas, dus u moet hierdie ontwerp dalk 'n bietjie modifiseer om op 'n ander bord te pas

Die omhulsel (bo) om die OLED -skerm te hou, nog 'n spiraal vir die nul / reset -knoppie

'N Knoppiehouer wat aangepas is vir die klein skakelaar wat ek gehad het, wat ontwerp is om tussen die twee rakke in die onderste omhulsel te rus. Ek gebruik 'n soldeerbout om die skakelaar aan die houer te "plak"; sien die vorige stap vir 'n foto

Alles is bedoel om gedruk te word sonder ondersteuning. Normale PLA in u gekose kleur is al wat u nodig het.

Sit alles bymekaar, koppel dit aan u drukker (hier kan kreatiwiteit nodig wees), en u is gereed.

Aanbeveel: