Cuprins:

Contor de filament pentru imprimantă 3D inteligentă: 5 pași (cu imagini)
Contor de filament pentru imprimantă 3D inteligentă: 5 pași (cu imagini)

Video: Contor de filament pentru imprimantă 3D inteligentă: 5 pași (cu imagini)

Video: Contor de filament pentru imprimantă 3D inteligentă: 5 pași (cu imagini)
Video: Imprimare 3D - 7 pași 2024, Iunie
Anonim
Contor de filament pentru imprimantă 3D inteligentă
Contor de filament pentru imprimantă 3D inteligentă

De ce să te deranjezi să numeri filamentele? Câteva motive:

Imprimările reușite necesită un extruder calibrat corespunzător: atunci când gcode îi spune extruderului să mute filamentul de 2 mm, trebuie să se deplaseze exact 2 mm. Lucrurile rele se întâmplă dacă excedează sau excedează. Un contor bine calibrat poate păstra un extruder cinstit

Feliatoarele aproximează cât de mult filament va lua o anumită imprimare (atât în lungime, cât și în greutate) și aș dori să verific acele valori

Măsurarea mișcării filamentului, de asemenea, permiteți-mi să știu când a început imprimarea și când s-a oprit

Aveam nevoie de ceva care să acopere spațiul lăsat de îndepărtarea urâtului logo gigant de pe partea din față a imprimantei mele

E cool

M-a inspirat acest instructabil, care a refăcut un mouse PS / 2 vechi ca un contor de filamente pentru o imprimantă 3D. Nu numai că a adăugat o caracteristică utilă la o imprimantă 3D, ci a refăcut un dispozitiv vechi care altfel ar fi ajuns într-un depozit de deșeuri. Dar acel proiect a fost construit în jurul interfeței PS / 2 a mouse-ului, care părea inutil de greoaie. Așa că am profitat de aceasta ca o oportunitate de a afla despre singura componentă esențială: codificatorul rotativ.

Provizii

Rotativ

Tablou dev bazat pe ESP32

Afișaj I2C OLED (unitatea în două culori arată deosebit de cool)

Mic buton momentan

Rulment 608ZZ degresat

Două inele din magazinul de articole hardware (~ 33mm ID x ~ 1,5mm diametru profil - vezi comentariile)

Două șuruburi autofiletante de 2,5 mm pentru carcasă

Două șuruburi, piulițe și șaibe de 4 mm pentru a atașa suportul la imprimanta dvs

O grămadă de fire

Imprimantă 3D și ceva filament

Pasul 1: Alegeți un codificator rotativ

Alegeți un codificator rotativ
Alegeți un codificator rotativ
Alegeți un codificator rotativ
Alegeți un codificator rotativ

Codificatoarele rotative transformă mișcarea de rotație în impulsuri electrice. Toți șoarecii de școală veche i-au folosit pentru a măsura mișcarea mingii care se rostogolea, iar șoarecii optici mai moderni (ha ha) i-au folosit în continuare pentru roata de derulare, ceea ce am avut așezat în jur și folosit pentru experimentarea inițială. Din păcate, al meu nu a oferit puncte de montare evidente și rezoluția sa a fost slabă.

Dacă merită să faci, merită să faci exces. Așa că am cumpărat un codor mare, prietenos, cu 360 de impulsuri pe rotație și mi-am construit proiectul în jurul acestuia. Cel pe care l-am ales a fost un codificator rotativ optic incremental Signswise, tip LPD3806-360BM-G5-24C. Dar orice codificator decent va face.

Pasul 2: Adăugați o scripete și un picior

Adăugați o scripete și un picior
Adăugați o scripete și un picior

Mișcarea liniară a filamentului se traduce prin mișcarea de rotație a codificatorului printr-un scripete. Și filamentul este ținut de scripete de către o minte.

Scripetele are două caneluri, fiecare având un inel torsat întins, astfel încât să nu se alunece, Ridicul are o singură canelură în V pentru a menține filamentul centrat pe scripetele codificatorului. Se așază pe un rulment 608ZZ pe care l-am așezat și este montat pe un arc spiralat imprimat chiar în corpul principal al proiectului meu. (Fișierele STL atașate mai jos.)

Acest lucru a necesitat unele încercări și erori pentru a se corecta, dar designul meu ar trebui să includă o varietate de unghiuri și raze ale bobinei, permițând filamentului să se desfacă din orice parte a bobinei, de la începutul până la sfârșitul unei tipăriri. Și arcul tipărit facilitează introducerea sau ieșirea filamentului la schimbarea bobinelor.

Pasul 3: Codificare

Image
Image

Pentru doar numărarea filamentului, orice placă dev cu două intrări digitale va funcționa. Codificatorul pe care l-am ales are patru pini: Vcc, masă și doi pini de codificare. Iată o scriere foarte frumoasă care explică modul în care funcționează codificatoarele rotative și cum să le interfați cu Arduino. (De asemenea: acest articol despre codificatoarele cu 3 pini.)

Numărarea de bază este simplă: două intrări - setate pentru a trage în interior, astfel încât rezistențele externe nu trebuie lipite pe Vcc - și o întrerupere. Am adăugat și un buton zero / reset, care necesită încă o intrare și întrerupere:

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); } void IRAM_ATTR encoderPinDidChange () {if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) {poziție + = 1; } else {poziție - = 1; }} void IRAM_ATTR zeroButtonPressed () {// gestionează zero și resetează}

Dar am vrut mai mult decât un contor prost. Cu un ESP32 (sau ESP8266) și WiFi-ul său încorporat, pot face ceva cu datele pe care le colectez. Folosind un cod de expirare simplu (explicat mai jos), pot stabili când începe și se termină tipărirea și pot trimite acele evenimente ca notificări pe telefonul meu. În viitor, aș putea adăuga un senzor de epuizare și să mă anunț (și să-mi întrerup imprimanta) când este nevoie de atenția mea.

Codul complet este pe Github.

Câteva note despre cod:

Pentru a personaliza acest lucru în funcție de versiunea dvs., tot ce aveți nevoie este rezoluția (encoderPPR) - în impulsuri pe rotație, care este de obicei dublul specificațiilor indicate - și raza fuliei (wheelRadius). Aceste valori, plus ssid și parola wifi-ului dvs. și pinii specifici conectați la buton, codificator și ecran OLED, toate intră în config.h

Butonul zero se dublează și ca resetare - țineți apăsat pentru a reporni placa, ceea ce este util pentru depanare

Întreruperile sunt puternice - uneori prea puternice. O singură atingere a butonului zero ar putea face ca funcția zeroButtonPressed () să fie numită de 10-20 de ori, așa că am adăugat o logică de debounce. Codificatorul meu optic nu avea nevoie de el, ci de YMMV

În timp ce întreruperile au grijă de intrări în mod asincron, rutina loop () gestionează contabilitatea. EncoderState - un enum care poate fi alimentat, retractat sau oprit - este actualizat odată cu schimbarea poziției codificatorului. Expirările determină atunci când imprimanta a început și a încheiat imprimarea. Dar partea dificilă este că imprimantele 3D pornesc și opresc frecvent mișcarea, deci ceea ce a funcționat cel mai bine a fost să definească evenimentul „tipărire completă” rămânând oprit continuu timp de cel puțin 5 secunde. Orice mișcare declanșează un al doilea temporizator care definește evenimentul „tipărire începută” numai dacă nu are loc niciun eveniment „tipărire completă” într-un interval de timp de 15 secunde. În practică, acest lucru funcționează înot

Deci, codul principal loop () poate rula neîngrădit, codul debounce rulează într-o buclă de sarcini RTOS. La fel, cererile http de trimitere a notificărilor sunt sincrone și, prin urmare, au un fundal. Astfel, animațiile rulează fără probleme și numărarea nu se oprește niciodată

Există o grămadă de coduri suplimentare în exemplul meu pentru (A) să stabilesc și să mențin o conexiune de rețea cu WiFi și mDNS, (B) să preluez ora de pe un server NTC, astfel încât să pot să-mi ștampilizez notificările de început și de sfârșit și să afișez un ceas neobișnuit. pe OLED-ul meu și (C) gestionează actualizările OTA, așa că nu trebuie să îmi conectez fizic placa la Mac-ul meu pentru actualizări de cod. În acest moment, totul este într-un singur fișier C ++ monolitic, doar pentru că nu mi-am luat timp să îl organizez mai bine

Am folosit minunata (și gratuită) aplicație Prowl iOS pentru a trimite notificări push pe telefonul meu cu nimic mai mult decât metode HTTP Get

Pentru a dezvolta codul și a bloca placa, am folosit platforma spectaculoasă care rulează pe Visual Studio Code, ambele gratuite

Pentru proiectul meu, am folosit aceste biblioteci: u8g2 de Oliver, elapsedMillis de Paul Stoffregen și HTTPClient de Markus Sattler, care vine cu platforma Espressif ESP32. Orice altceva vine fie cu biblioteca Arduino, fie cu platforma ESP32 din PlatformIO

În cele din urmă, am creat șase bitmap-uri simple ale scripetelui meu principal la diferite unghiuri, astfel încât să pot arăta o animație de roată rotativă mică pe OLED din spatele tejghelei. Se deplasează în direcția corespunzătoare cu codificatorul, deși mult mai rapid pentru un efect mai dramatic

Pasul 4: Cablare

Cablare
Cablare

Am proiectat acest lucru, astfel încât cablarea să fie simplă, mai ales ca incinta mea să fie mică, dar și depanarea să fie directă. Rețineți condițiile înghesuite din cutia mea mică.:)

Prima cerință a fost tensiunea de alimentare de 5V a codificatorului meu rotativ. Dintre diversele plăci de dezvoltare ESP32 pe care le aveam în stoc, doar câteva au furnizat 5V adevărat la pinul Vcc atunci când au fost alimentate prin USB. (Celelalte au măsurat 4,5-4,8V, care, în cazul în care matematica dvs. este proastă, este mai mică de 5V.) Placa pe care am folosit-o a fost un Wemos Lolin32.

Apoi, vin cei doi pini de semnal ai codificatorului rotativ. Deoarece folosesc întreruperi, principala preocupare este că pinii pe care îi folosesc nu interferează cu nimic. Documentele ESP32 afirmă că ADC2 nu poate fi utilizat în același timp cu WiFi, astfel încât, din păcate, înseamnă că nu pot folosi niciunul dintre pinii ADC2 GPIO: 0, 2, 4, 12, 13, 14, 15, 25, 26, sau 27. Am ales 16 și 17.

Sfat profesional: dacă, după ce ați pus toate acestea împreună, codificatorul pare să se numere înapoi, puteți schimba doar cele două atribuiri de pin în config.h.

În cele din urmă, conectați firul de împământare al codificatorului rotativ la … rola tamburului … știftul de împământare.

Apoi, butonul zero / reset se conectează între masă și un alt pin liber (am ales GPIO 18).

Butonul pe care l-am folosit a fost un mic comutator momentan pe care l-am salvat de pe mouse-ul computerului menționat mai sus, dar orice buton pe care îl ai așezat în jur va funcționa. Îl puteți vedea odihnindu-se într-o mică montură pe care am făcut-o chiar deasupra scândurii.

În cele din urmă, OLED, dacă nu este deja conectat la placa dvs., are nevoie doar de patru pini: 3V3, masă, ceas i2c și date i2c. Pe placa mea de dezvoltare, ceasul și datele sunt 22 și respectiv 21.

Pasul 5: Imprimați piesele

Imprimați piesele
Imprimați piesele

Am proiectat șapte părți pentru această construcție:

Rola, care se montează direct pe arborele codificatorului rotativ

Ridicul, care se potrivește peste un rulment 608ZZ (îndepărtați luciile și degresați cu WD40, astfel încât să se învârtă liber)

Suportul, pe care se montează cele două gheare și codificatorul - observați arcul spiralat pentru ralanti

Un suport pentru stabilizarea suportului. Fotografia din acest pas arată cum se atașează suportul de suport

Carcasa (de jos) pentru a ține placa ESP dev, cu un spațiu pentru cablul USB pe lateral și altul în partea de sus pentru conectorul pe care l-am adăugat la firele codificatorului meu. Acesta este conceput pentru a se potrivi cu Wemos Lolin32, deci este posibil să trebuiască să modificați puțin acest design pentru a se potrivi cu o altă placă

Carcasa (sus) pentru a ține ecranul OLED, o altă spirală pentru butonul zero / reset

Un suport pentru butoane personalizat pentru micul comutator pe care l-am avut, conceput pentru a sta între cele două rafturi din interiorul carcasei inferioare. Am folosit un fier de lipit pentru a „lipi” comutatorul de la suport; vezi pasul anterior pentru o fotografie

Totul este conceput pentru a fi tipărit fără suporturi. Aveți nevoie de PLA normal în culoarea dvs. la alegere.

Puneți-le pe toate împreună, atașați-le la imprimantă (poate fi necesară o anumită creativitate aici) și sunteți bine să mergeți.

Recomandat: