Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Velg en Rotary Encoder
- Trinn 2: Legg til en remskive og tomgang
- Trinn 3: Koding
- Trinn 4: Kabling
- Trinn 5: Skriv ut delene
Video: Smart 3D -skriverfilamentteller: 5 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
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
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
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
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
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
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:
Smart skrivebord LED -lys - Smart Lighting W/ Arduino - Neopixels arbeidsområde: 10 trinn (med bilder)
Smart skrivebord LED -lys | Smart Lighting W/ Arduino | Neopixels Workspace: Nå tilbringer vi mye tid hjemme, studerer og jobber virtuelt, så hvorfor ikke gjøre arbeidsområdet vårt større med et tilpasset og smart belysningssystem Arduino og Ws2812b LED -er. Her viser jeg deg hvordan du bygger din Smart LED -skrivebordslampe som
DIY WiFi smart sikkerhetslys med Shelly 1: 6 trinn (med bilder)
DIY WiFi Smart Security Light With Shelly 1: Denne instruksen vil se på å lage et DIY smart sikkerhetslys ved hjelp av Shelly 1 smart relé fra Shelly. Gjør du et sikkerhetslys smart vil du ha mye mer kontroll over når det aktiveres og hvor lenge det forblir på. Det kan være aktivt
Smart vekkerklokke: en smart vekkerklokke laget med bringebær Pi: 10 trinn (med bilder)
Smart vekkerklokke: en smart vekkerklokke laget med bringebær Pi: Har du noen gang ønsket deg en smart klokke? I så fall er dette løsningen for deg! Jeg lagde Smart Alarm Clock, dette er en klokke som du kan endre alarmtiden i henhold til nettstedet. Når alarmen går, kommer det en lyd (summer) og 2 lys vil
Smart kart over Idaho med LED -data + kunst: 8 trinn (med bilder)
Smart kart over Idaho med LED -data + kunst: Jeg har alltid ønsket en måte å vise geografiske data kunstnerisk og dynamisk ved å "male" et kart med lys. Jeg bor i Idaho og elsker staten min, så jeg tenkte at dette ville være et flott sted å starte! I tillegg til å være et kunstverk med
Slik demonterer du en datamaskin med enkle trinn og bilder: 13 trinn (med bilder)
Slik demonterer du en datamaskin med enkle trinn og bilder: Dette er en instruksjon om hvordan du demonterer en PC. De fleste grunnkomponentene er modulære og fjernes lett. Det er imidlertid viktig at du er organisert om det. Dette vil bidra til å hindre deg i å miste deler, og også i å gjøre monteringen igjen