Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Vælg en Rotary Encoder
- Trin 2: Tilføj en remskive og tomgang
- Trin 3: Kodning
- Trin 4: Ledningsføring
- Trin 5: Udskriv delene
Video: Smart 3D Printer Filament Counter: 5 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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
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
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
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
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
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:
SLA 3D Printer Acid Etched Circuit Boards: 7 trin (med billeder)
SLA 3D Printer Acid Etched Circuit Boards: Remix..remix .. Nå, jeg har brug for et udviklingsbord til mine ATtiny chips. Jeg har ikke en CNC til at skære et printkort, jeg kender ikke Kicad, og jeg vil ikke bestille tavler. Men jeg har en harpiksprinter … og syre, og jeg kender SketchUp. Og kan lide at lave ting. Hvad skete der
Tosidet printkortfremstilling med en 3D -printer: 7 trin (med billeder)
Tosidet PCB-fremstilling med en 3D-printer: Jeg vil forsøge at forklare fremstillingen af en isoleret router type tosidet PCB ved hjælp af en modificeret 3d-printer. Denne side inspirerede mig til at bruge min 3d-printer til PCB-fremstilling. Faktisk fungerer metoden beskrevet på den side godt nok. Hvis du følger t
Udskrivning af brugerdefinerede printkort med en 3D -printer: 7 trin (med billeder)
Udskrivning af brugerdefinerede printkort med en 3D -printer: Hvis det ikke er første gang, du ser en 3D -printer, har du sikkert hørt nogen sige noget i retning af: 1) Køb 3D -printer2) Udskriv en anden 3D -printer3) Returner original 3D printer4) ???????? 5) OverskudNu vil nogen
NODEMCU LUA ESP8266 Med CD4017 Decade Counter: 4 trin (med billeder)
NODEMCU LUA ESP8266 Med CD4017 Decade Counter: CD4017 er en tiårs tæller / divider. Det betyder, at når den modtager en puls, tæller den den og sender en udgang til den relevante pin. Det er en ganske let IC at bruge, og du kan enten bygge kredsløbet på et brødbræt eller købe et fra Ebay til
Oprettelse af printkort med en INKJET -printer: 8 trin (med billeder)
Oprettelse af printkort med en INKJET -printer: Da jeg først begyndte at undersøge, hvordan jeg skulle ætse mine egne printkort, brugte jeg hver instruktør og vejledning, jeg fandt, en laserprinter og strygte mønsteret på en eller anden måde. Jeg ejer ikke en laserprinter, men jeg har et billigt blæk