Innholdsfortegnelse:

Smart 3D -skriverfilamentteller: 5 trinn (med bilder)
Smart 3D -skriverfilamentteller: 5 trinn (med bilder)

Video: Smart 3D -skriverfilamentteller: 5 trinn (med bilder)

Video: Smart 3D -skriverfilamentteller: 5 trinn (med bilder)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Juni
Anonim
Smart 3D -skriverfilamentteller
Smart 3D -skriverfilamentteller

Hvorfor gidder å telle filament? Noen få grunner:

Vellykkede utskrifter krever en riktig kalibrert ekstruder: Når g-koden ber ekstruderen om å flytte filamentet 2 mm, må det bevege seg nøyaktig 2 mm. Dårlige ting skjer hvis det over-ekstruderer eller under-ekstruderer. En godt kalibrert teller kan holde en ekstruder ærlig

Slicers omtrentlige hvor mye filament totalt et gitt trykk vil ta (både i lengde og vekt), og jeg vil sjekke disse verdiene

Måling av bevegelsen av filament gir meg også beskjed når utskriften har startet og når den har stoppet

Jeg trengte noe for å dekke plassen igjen ved fjerning av den stygge gigantlogoen på forsiden av skriveren

Det er kult

Jeg ble inspirert av denne instruerbare, som repurposed en gammel PS/2 mus som en filament teller for en 3D -skriver. Ikke bare la den en nyttig funksjon til en 3D -skriver, den repurposed en gammel enhet som ellers ville ha havnet på et deponi. Men det prosjektet ble bygget rundt musens PS/2 -grensesnitt, som virket unødvendig tungvint. Så jeg tok dette som en mulighet til å lære om den eneste viktige komponenten: den roterende omkoderen.

Rekvisita

Roterende encoder

ESP32 -basert dev -bord

I2C OLED-skjerm (tofarget enhet ser spesielt kult ut)

Liten øyeblikkelig trykknapp

Avsmurt 608ZZ lager

To o -ringer fra jernvarehandelen (~ 33 mm ID x ~ 1,5 mm profildiameter - se kommentarer)

To 2,5 mm selvskruende skruer for skapet

To 4 mm skruer, muttere og skiver for å feste festet til skriveren

En haug med ledninger

3D -skriver og litt filament

Trinn 1: Velg en Rotary Encoder

Velg en Rotary Encoder
Velg en Rotary Encoder
Velg en Rotary Encoder
Velg en Rotary Encoder

Rotary encoders oversetter rotasjonsbevegelse til elektriske pulser. Alle gamle skolemus brukte dem til å måle bevegelsen til den rullende ballen, og mer moderne (ha ha) optiske mus brukte dem fremdeles til rullehjulet, det er det jeg lå rundt og brukte til første eksperimentering. Dessverre tilbød min ingen åpenbare festepunkter, og oppløsningen var dårlig.

Hvis det er verdt å gjøre, er det verdt å gjøre for mye. Så jeg kjøpte en stor, vennlig, 360-puls per revolusjonskoder og bygde prosjektet mitt rundt det. Den jeg valgte var en Signswise Incremental Optical Rotary Encoder, type LPD3806-360BM-G5-24C. Men noen anstendig encoder vil gjøre.

Trinn 2: Legg til en remskive og tomgang

Legg til en remskive og tomgang
Legg til en remskive og tomgang

Lineær bevegelse av filamentet blir oversatt til rotasjonsbevegelse av koderen av en remskive. Og filamentet holdes mot remskiven av en tomgang.

Remskiven har to spor, hver med en strukket o-ring, slik at det ikke sklir, Tomgangen har et enkelt v-spor for å holde filamentet sentrert på giverskiven. Den sitter på et 608ZZ -lager jeg hadde rundt, og den er montert på en spiralfjær trykt rett i hoveddelen av prosjektet mitt. (STL -filer vedlagt nedenfor.)

Dette tok litt prøving og feiling for å bli riktig, men designet mitt skulle inneholde en rekke vinkler og spoleradier, slik at filamentet kan slappe av fra hvilken som helst del av spolen, helt fra begynnelsen til slutten av et trykk. Og den trykte fjæren gjør det enkelt å stikke filamentet inn eller ut når du skifter spoler.

Trinn 3: Koding

Image
Image

For bare å telle filament, vil ethvert dev -bord med to digitale innganger gjøre. Koderen jeg valgte har fire pinner: Vcc, bakken og to pulsgivere. Her er en veldig fin oppskrift som forklarer hvordan roterende kodere fungerer og hvordan du kan koble dem til Arduino. (Også: denne artikkelen om 3-pinners kodere.)

Den grunnleggende tellingen er enkel: to innganger - satt til å trekke opp internt, slik at eksterne motstander ikke trenger å loddes til Vcc - og en avbrudd. Jeg har også lagt til en null/tilbakestillingsknapp, som krever ytterligere en inngang og avbrudd:

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)) {posisjon += 1; } annet {posisjon -= 1; }} ugyldig IRAM_ATTR zeroButtonPressed () {// handle zero and reset}

Men jeg ville ha mer enn bare en dum teller. Med en ESP32 (eller ESP8266) og innebygd WiFi kan jeg faktisk gjøre noe med dataene jeg samler inn. Ved hjelp av en enkel timeout -kode (forklart nedenfor) kan jeg bestemme når utskrift starter og slutter, og sender hendelsene som varsler til telefonen min. I fremtiden kan jeg legge til en utkjøringssensor og varsle meg selv (og sette skriveren på pause) når oppmerksomheten min er nødvendig.

Hele koden er på Github.

Noen notater om koden:

For å tilpasse dette til din konstruksjon, trenger du bare oppløsningen (encoderPPR) - i pulser per omdreining, som vanligvis er to ganger den angitte spesifikasjonen - og radiusen til remskiven (wheelRadius). Disse verdiene, pluss ssid og passord for wifi og de spesifikke pinnene som er koblet til knappen, koderen og OLED -skjermen, går alle i config.h

Null -knappen fungerer også som en tilbakestilling - hold den inne for å starte kortet på nytt, noe som er nyttig for feilsøking

Avbrudd er kraftige - noen ganger for kraftige. Et enkelt trykk på null-knappen kan føre til at zeroButtonPressed () -funksjonen kalles 10-20 ganger, så jeg la til litt avvisningslogikk. Den optiske koderen min trengte det ikke, men YMMV

Mens avbruddene tar seg av inngangene asynkront, håndterer loop () -rutinen bokføringen. EncoderState - et nummer som kan mate, trekke seg tilbake eller stoppes - oppdateres med endringen i plassering av encoder. Tidsavbrudd avgjør deretter når skriveren har startet og avsluttet utskriften. Men den vanskelige delen er at 3D -skrivere ofte starter og stopper bevegelse, så det som fungerte best var å definere hendelsen "utskrift fullført" som ble stanset kontinuerlig i minst 5 sekunder. Enhver bevegelse utløser en andre timer som definerer hendelsen "utskrift startet" bare hvis ingen "utskrift fullført" hendelse skjer i en tidsramme på 15 sekunder. I praksis fungerer dette svømmende

Så hovedsløyfen () -koden kan kjøres ubelastet, debounce -koden kjøres i en RTOS -oppgavesløyfe. På samme måte er http -forespørsler om å sende varsler synkrone og derfor med bakgrunn. Dermed går animasjonene jevnt og tellingen stopper aldri

Det er en haug med tilleggskode i eksemplet mitt for å (A) etablere og vedlikeholde en nettverkstilkobling med WiFi og mDNS, (B) hente tiden fra en NTC-server, slik at jeg kan tidsstemple start- og sluttvarsler og vise en klokkeklokke på min OLED, og (C) håndterer OTA -oppdateringer, slik at jeg ikke trenger å koble kortet mitt fysisk til min Mac for kodeoppdateringer. For øyeblikket er alt i en monolitisk C ++ - fil, bare fordi jeg ikke har tatt meg tid til å organisere det bedre

Jeg brukte den fantastiske (og gratis) Prowl iOS -appen til å sende pushvarsler til telefonen min uten annet enn HTTP Get -metoder

For å utvikle koden og blinke på tavlen, brukte jeg den spektakulære PlatformIO som kjørte på Visual Studio Code, begge gratis

For prosjektet mitt brukte jeg disse bibliotekene: u8g2 av Oliver, elapsedMillis av Paul Stoffregen og HTTPClient av Markus Sattler, som følger med Espressif ESP32 -plattformen. Alt annet kommer enten med Arduino -biblioteket eller ESP32 -plattformen i PlatformIO

Til slutt opprettet jeg seks enkle bitmaps av min hovedskive i forskjellige vinkler, slik at jeg kunne vise en fin liten snurrhjul -animasjon på OLED bak disken. Den beveger seg i riktig retning med koderen, men mye raskere for en mer dramatisk effekt

Trinn 4: Kabling

Kabling
Kabling

Jeg designet dette slik at ledninger ville være helt enkle, for det meste slik at kabinettet mitt kunne være lite, men også slik at feilsøking ville være rett frem. Legg merke til de trange forholdene i min lille eske.:)

Det første kravet var 5V forsyningsspenningen til min roterende encoder. Av de forskjellige ESP32 dev -brettene jeg hadde i stashen min, leverte bare noen få ekte 5V på Vcc -pinnen når de ble drevet av USB. (De andre målte 4,5-4,8V, som i tilfelle matematikken din er dårlig, er lavere enn 5V.) Brettet jeg brukte var en Wemos Lolin32.

Deretter kommer de to roterende encoder -signalpinnene. Siden jeg bruker avbrudd, er hovedbekymringen at pinnene jeg bruker ikke forstyrrer noe. ESP32 -dokumentene sier at ADC2 ikke kan brukes samtidig med WiFi, så det betyr dessverre at jeg ikke kan bruke noen av ADC2 GPIO -pinnene: 0, 2, 4, 12, 13, 14, 15, 25, 26, eller 27. Jeg valgte 16 og 17.

Profftips: Hvis koderen ser ut til å telle bakover etter å ha satt alt dette sammen, kan du bare bytte de to pinnetildelingene i config.h.

Til slutt kobler du den jordede ledningen til den roterende encoderen til… trommelrullen… bakkenålen.

Deretter kobles null/tilbakestillingsknappen mellom bakken og en annen ledig pin (jeg valgte GPIO 18).

Knappen jeg brukte var en liten øyeblikkelig bryter jeg reddet fra den nevnte datamusen, men en hvilken som helst knapp du har rundt vil gjøre. Du kan se den hvile i et lite feste jeg laget for den rett over brettet.

Til slutt trenger OLED, hvis den ikke allerede er koblet til brettet ditt, bare fire pinner: 3V3, jord, i2c klokke og i2c data. På dev -brettet er klokke og data henholdsvis 22 og 21.

Trinn 5: Skriv ut delene

Skriv ut delene
Skriv ut delene

Jeg designet sju deler for denne bygningen:

Remskiven, som monteres direkte på akselen til den roterende omkoderen

Tomgangen, som passer over et 608ZZ -lager (fjern saksene og avfett med WD40 slik at den spinner fritt)

Holderen, som de to hjulene og encoderen er montert på - legg merke til spiralfjæren for tomgangen

En brakett for å stabilisere holderen. Bildet i dette trinnet viser hvordan braketten fester seg til holderen

Kapslingen (nederst) for å holde ESP32 dev -kortet mitt, med plass til USB -kabelen på siden og en annen på toppen for kontakten jeg la til kodertrådene mine. Denne er designet for å passe til Wemos Lolin32, så du må kanskje modifisere dette designet litt for å passe til et annet brett

Kapslingen (øverst) for å holde OLED -skjermen, en annen spiral for null / tilbakestillingsknappen

En knappholder tilpasset den lille bryteren jeg hadde, designet for å hvile mellom de to hyllene inne i bunnen. Jeg brukte et loddejern til å "lime" bryteren til holderen; se forrige trinn for et bilde

Alt er designet for å skrives ut uten støtter. Normal PLA i din valgte farge er alt du trenger.

Sett alt sammen, koble til skriveren (litt kreativitet kan være nødvendig her), og du er i gang.

Anbefalt: