Indholdsfortegnelse:

Smart 3D Printer Filament Counter: 5 trin (med billeder)
Smart 3D Printer Filament Counter: 5 trin (med billeder)

Video: Smart 3D Printer Filament Counter: 5 trin (med billeder)

Video: Smart 3D Printer Filament Counter: 5 trin (med billeder)
Video: 3D Printed Pin Support Challenge 😱 2024, Juni
Anonim
Smart 3D -printer glødetrådstæller
Smart 3D -printer glødetrådstæller

Hvorfor gider tælle filament? Et par grunde:

Vellykkede udskrifter kræver en korrekt kalibreret ekstruder: Når g-koden fortæller ekstruderen at flytte filamentet 2 mm, skal det flytte præcis 2 mm. Dårlige ting sker, hvis det over-ekstruderer eller under-ekstruderer. En velkalibreret tæller kan holde en ekstruder ærlig

Slicers omtrentlige hvor meget filament i alt et givet tryk vil tage (i både længde og vægt), og jeg vil gerne kontrollere disse værdier

Måling af filamentets bevægelse lader mig også vide, hvornår udskrivningen er startet, og hvornår den er stoppet

Jeg havde brug for noget til at dække rummet tilbage ved fjernelsen af det grimme kæmpe logo på forsiden af min printer

Det er cool

Jeg blev inspireret af denne instruerbare, som genanvendte en gammel PS/2 -mus som en glødetråd til en 3D -printer. Det tilføjede ikke kun en nyttig funktion til en 3D -printer, det genanvendte en gammel enhed, der ellers ville være havnet på en losseplads. Men det projekt blev bygget omkring musens PS/2 -interface, hvilket virkede unødigt besværligt. Så jeg benyttede dette som en mulighed for at lære om den eneste væsentlige komponent: den roterende encoder.

Forbrugsvarer

Roterende encoder

ESP32 baseret dev board

I2C OLED-skærm (enhed med to farver ser særligt cool ud)

Lille kortvarig trykknap

Afsmurt 608ZZ leje

To o -ringe fra isenkræmmeren (~ 33 mm ID x ~ 1,5 mm profildiameter - se kommentarer)

To 2,5 mm selvskærende skruer til kabinettet

To 4 mm skruer, møtrikker og skiver til fastgørelse af holderen til din printer

Flok ledninger

3D -printer og noget filament

Trin 1: Vælg en Rotary Encoder

Vælg en Rotary Encoder
Vælg en Rotary Encoder
Vælg en Rotary Encoder
Vælg en Rotary Encoder

Rotary encoders oversætter rotationsbevægelse til elektriske impulser. Alle mus fra old-school brugte dem til at måle den rullende kugles bevægelse, og mere moderne (ha ha) optiske mus brugte dem stadig til rullehjulet, hvilket var det, jeg havde lagt rundt og brugt til indledende eksperimenter. Desværre tilbød min ingen indlysende monteringspunkter, og dens opløsning var dårlig.

Hvis det er værd at gøre, er det værd at gøre for meget. Så jeg købte en stor, venlig, 360-puls pr. Omdrejningskoder og byggede mit projekt omkring det. Den jeg valgte var en Signswise Incremental Optical Rotary Encoder, type LPD3806-360BM-G5-24C. Men enhver anstændig encoder vil gøre.

Trin 2: Tilføj en remskive og tomgang

Tilføj en remskive og tomgang
Tilføj en remskive og tomgang

Lineær bevægelse af filamentet oversættes til encoderens rotationsbevægelse af en remskive. Og filamentet holdes mod remskiven af en tomgang.

Remskiven har to riller, der hver har en strakt o-ring, så der ikke er nogen glidning, Løbehjulet har en enkelt v-rille for at holde filamentet centreret på koderhjulet. Det sidder på et 608ZZ leje, jeg havde liggende, og det er monteret på en spiralfjeder trykt lige i hoveddelen af mit projekt. (STL -filer vedhæftet nedenfor.)

Dette tog en del forsøg og fejl for at få det rigtigt, men mit design skulle rumme en række forskellige vinkler og spoleradier, så filamentet kan vikles fra enhver del af spolen, hele vejen fra begyndelsen til slutningen af et tryk. Og den trykte fjeder gør det let at springe ind eller ud af filamentet, når der skiftes spoler.

Trin 3: Kodning

Image
Image

For bare at tælle filament, vil ethvert dev -bord med to digitale indgange klare. Den encoder jeg valgte har fire ben: Vcc, jorden og to encoder pins. Her er en virkelig flot opskrift, der forklarer, hvordan roterende encodere fungerer, og hvordan de kan forbindes med Arduino. (Også: denne artikel om 3-benede encodere.)

Den grundlæggende optælling er enkel: to indgange - indstillet til at trække op internt, så eksterne modstande ikke skal loddes til Vcc - og en afbrydelse. Jeg tilføjede også en nul/nulstillingsknap, der kræver yderligere en input og afbrydelse:

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); } ugyldig IRAM_ATTR encoderPinDidChange () {if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) {position += 1; } ellers {position -= 1; }} ugyldig IRAM_ATTR zeroButtonPressed () {// håndter nul og nulstil}

Men jeg ville have mere end bare en dum tæller. Med en ESP32 (eller ESP8266) og dens indbyggede WiFi kan jeg faktisk gøre noget med de data, jeg indsamler. Ved hjælp af en simpel timeout -kode (forklaret nedenfor) kan jeg bestemme, hvornår udskrivning starter og slutter, og sende disse begivenheder som meddelelser til min telefon. I fremtiden kan jeg tilføje en udløbssensor og underrette mig selv (og sætte min printer på pause), når min opmærksomhed er nødvendig.

Den fulde kode er på Github.

Et par noter om koden:

For at tilpasse dette til din build er alt, hvad du har brug for, opløsningen (encoderPPR) - i impulser pr. Omdrejning, som typisk er det dobbelte af den angivne specifikation - og radius af remskiven (wheelRadius). Disse værdier plus ssid og adgangskode til din wifi og de specifikke pins, der er forbundet til knappen, encoderen og OLED -skærmen, går alle i config.h

Nul -knappen fungerer også som en nulstilling - hold den nede for at genstarte kortet, hvilket er nyttigt til fejlfinding

Afbrydelser er kraftfulde - nogle gange for kraftige. Et enkelt tryk på nul-knappen kan medføre, at zeroButtonPressed () -funktionen kaldes 10-20 gange, så jeg tilføjede en vis afslagslogik. Min optiske encoder behøvede det ikke, men YMMV

Mens afbrydelserne tager sig af inputene asynkront, håndterer loop () -rutinen bogføringen. EncoderState - et nummer, der kan fodres, trækkes tilbage eller stoppes - opdateres med ændringen i encoderens position. Timeouts afgør derefter, hvornår printeren er begyndt og afsluttet udskrivning. Men den vanskelige del er, at 3D -printere ofte starter og stopper bevægelse, så det, der fungerede bedst, var at definere "print complete" -hændelsen, der fortsat blev stoppet kontinuerligt i mindst 5 sekunder. Enhver bevægelse udløser en anden timer, der kun definerer begivenheden "udskrivning startet", hvis der ikke sker en "udfør fuldført" hændelse inden for en tidsramme på 15 sekunder. I praksis fungerer dette svømmende

Så hovedsløjfen () -koden kan køre uden behæftning, debounce -koden kører i en RTOS -opgavesløjfe. På samme måde er http -anmodninger om udsendelse af meddelelser synkrone og derfor med baggrund. Således kører animationer gnidningsløst, og tællingen stopper aldrig

Der er en masse ekstra kode i mit eksempel til (A) at oprette og vedligeholde en netværksforbindelse med WiFi og mDNS, (B) hente tiden fra en NTC-server, så jeg kunne tidsstempler mine start- og slutmeddelelser og vise et jaunty ur på min OLED, og (C) håndterer OTA -opdateringer, så jeg ikke fysisk behøver at forbinde mit kort til min Mac for kodeopdateringer. I øjeblikket er det hele i en monolitisk C ++ - fil, kun fordi jeg ikke har taget mig tid til at organisere det bedre

Jeg brugte den vidunderlige (og gratis) Prowl iOS -app til at sende push -notifikationer til min telefon uden andet end HTTP Get -metoder

For at udvikle koden og blinke på tavlen brugte jeg den spektakulære PlatformIO, der kører på Visual Studio Code, begge gratis

Til mit projekt brugte jeg disse biblioteker: u8g2 af Oliver, millaps af Paul Stoffregen og HTTPClient af Markus Sattler, der følger med Espressif ESP32 -platformen. Alt andet kommer enten med Arduino -biblioteket eller ESP32 -platformen i PlatformIO

Endelig lavede jeg seks enkle bitmaps af min hovedskive i forskellige vinkler, så jeg kunne vise en pæn lille snurrehjul -animation på OLED bag disken. Det bevæger sig i den rigtige retning med encoderen, men meget hurtigere for en mere dramatisk effekt

Trin 4: Ledningsføring

Ledninger
Ledninger

Jeg designet dette, så ledninger ville være helt enkle, for det meste så mit kabinet kunne være lille, men også så fejlfinding ville være lige fremad. Bemærk de trange forhold i min lille æske.:)

Det første krav var 5V forsyningsspændingen på min roterende encoder. Af de forskellige ESP32 dev -boards, jeg havde i min stash, leverede kun få ægte 5V på Vcc -stiften, når de blev drevet af USB. (De andre målte 4,5-4,8V, hvilket, hvis din matematik er dårlig, er lavere end 5V.) Tavlen jeg brugte var en Wemos Lolin32.

Dernæst kommer de to roterende encoder -signalstifter. Da jeg bruger afbrydelser, er den største bekymring, at de ben, jeg bruger, ikke forstyrrer noget. ESP32 -dokumenterne angiver, at ADC2 ikke kan bruges samtidig med WiFi, så det betyder desværre, at jeg ikke kan bruge nogen af ADC2 GPIO -benene: 0, 2, 4, 12, 13, 14, 15, 25, 26 eller 27. Jeg valgte 16 og 17.

Pro tip: hvis din encoder efter at have sat alt dette sammen tæller baglæns, kan du bare bytte de to pin -tildelinger i config.h.

Tilslut til sidst jordkablet til den roterende encoder til… tromlerulle … jordstiftet.

Dernæst bliver nul/reset -knappen forbundet mellem jorden og en anden ledig pin (jeg valgte GPIO 18).

Den knap, jeg brugte, var en lille øjeblikkelig switch, jeg reddede fra den førnævnte computermus, men enhver knap, du har liggende, vil gøre. Du kan se det hvile i et lille mount, jeg lavede til det lige over brættet.

Endelig har OLED, hvis den ikke allerede er tilsluttet dit kort, kun brug for fire ben: 3V3, jord, i2c ur og i2c data. På mit dev -bord er ur og data henholdsvis 22 og 21.

Trin 5: Udskriv delene

Udskriv delene
Udskriv delene

Jeg designede syv dele til denne build:

Remskiven, der monteres direkte på akslen på den roterende encoder

Løbehjulet, der passer over et 608ZZ -leje (fjern skindene og affedt med WD40, så det spinder frit)

Holderen, som de to hjul og encoder er monteret på - bemærk spiralfjederen til tomgang

Et beslag til stabilisering af holderen. Fotoet i dette trin viser, hvordan beslaget fastgøres til holderen

Kabinettet (nederst) til at rumme mit ESP32 dev -kort, med plads til USB -kablet på siden og et andet ovenpå til stikket, jeg tilføjede til mine encoder -ledninger. Denne er designet til at passe til Wemos Lolin32, så du skal muligvis modificere dette design lidt for at passe til et andet bord

Kabinettet (øverst) til at holde OLED -skærmen, en anden spiral til nul / reset -knappen

En knapholder tilpasset den lille switch jeg havde, designet til at hvile mellem de to hylder inde i bundkabinettet. Jeg brugte et loddejern til at "lime" kontakten til holderen; se det foregående trin for et foto

Alt er designet til at blive trykt uden understøtninger. Normal PLA i din valgte farve er alt hvad du behøver.

Sæt det hele sammen, tilslut til din printer (noget kreativitet kan være påkrævet her), og du er i gang.

Anbefalede: