Spisu treści:

Inteligentny licznik filamentów do drukarki 3D: 5 kroków (ze zdjęciami)
Inteligentny licznik filamentów do drukarki 3D: 5 kroków (ze zdjęciami)

Wideo: Inteligentny licznik filamentów do drukarki 3D: 5 kroków (ze zdjęciami)

Wideo: Inteligentny licznik filamentów do drukarki 3D: 5 kroków (ze zdjęciami)
Wideo: Spacepen 3D PRO - Recenzja 2024, Czerwiec
Anonim
Inteligentny licznik filamentów do drukarki 3D
Inteligentny licznik filamentów do drukarki 3D

Po co zawracać sobie głowę liczeniem filamentu? Kilka powodów:

Pomyślne wydruki wymagają odpowiednio skalibrowanego ekstrudera: kiedy gcode mówi ekstruderowi, aby przesunął filament o 2 mm, musi się on przesunąć dokładnie o 2 mm. Złe rzeczy dzieją się, gdy jest nadmiernie lub niedostatecznie wytłoczony. Dobrze skalibrowany licznik może sprawić, że ekstruder będzie uczciwy

Fragmentatory przybliżają, ile całkowitego filamentu zużyje dany wydruk (zarówno pod względem długości, jak i wagi) i chciałbym sprawdzić te wartości

Pomiar ruchu filamentu również daje mi znać, kiedy drukowanie się rozpoczęło, a kiedy się skończyło

Potrzebowałem czegoś, co zakryje przestrzeń pozostawioną po usunięciu brzydkiego gigantycznego logo z przodu mojej drukarki

To jest spoko

Zainspirował mnie ten instruktaż, który zmienił starą mysz PS/2 jako licznik włókien do drukarki 3D. Nie tylko dodał przydatną funkcję do drukarki 3D, ale także zmienił przeznaczenie starego urządzenia, które w przeciwnym razie trafiłoby na wysypisko śmieci. Ale ten projekt został zbudowany wokół interfejsu myszy PS/2, który wydawał się niepotrzebnie kłopotliwy. Potraktowałem to więc jako okazję do poznania jedynego istotnego komponentu: enkodera obrotowego.

Kieszonkowe dzieci

Enkoder obrotowy

Płyta deweloperska oparta na ESP32

Wyświetlacz I2C OLED (wyjątkowo fajnie wygląda dwukolorowa jednostka)

Mały chwilowy przycisk

Odtłuszczone łożysko 608ZZ

Dwa oringi ze sklepu z narzędziami (~33mm ID x ~1.5mm średnica profilu - patrz komentarze)

Dwa wkręty samogwintujące 2,5 mm do obudowy

Dwie śruby 4 mm, nakrętki i podkładki do mocowania uchwytu do drukarki

Wiązka przewodów

Drukarka 3D i trochę żarnika

Krok 1: Wybierz enkoder obrotowy

Wybierz enkoder obrotowy
Wybierz enkoder obrotowy
Wybierz enkoder obrotowy
Wybierz enkoder obrotowy

Enkodery obrotowe przekształcają ruch obrotowy na impulsy elektryczne. Wszystkie myszy ze starej szkoły używały ich do pomiaru ruchu toczącej się kulki, a bardziej nowoczesne (ha ha) myszy optyczne nadal używały ich do kółka przewijania, które miałem na sobie i używałem do początkowych eksperymentów. Niestety mój nie oferował wyraźnych punktów mocowania, a jego rozdzielczość była słaba.

Jeśli warto to robić, warto przesadzać. Kupiłem więc duży, przyjazny enkoder 360-puls na obrót i wokół niego zbudowałem swój projekt. Wybrałem inkrementalny optyczny enkoder obrotowy Signswise, typ LPD3806-360BM-G5-24C. Ale każdy przyzwoity enkoder się nada.

Krok 2: Dodaj koło pasowe i koło napinające

Dodaj koło pasowe i koło napinające
Dodaj koło pasowe i koło napinające

Ruch liniowy żarnika przekłada się na ruch obrotowy enkodera przez koło pasowe. A włókno jest dociskane do koła pasowego przez koło pasowe.

Koło pasowe posiada dwa rowki, każdy z naciągniętym oringiem, dzięki czemu nie ma poślizgu, Koło pasowe ma pojedynczy rowek w kształcie litery V, który utrzymuje żarnik wyśrodkowany na kole pasowym enkodera. Jest osadzony na łożysku 608ZZ, które leżałem dookoła, a który jest zamontowany na spiralnej sprężynie wydrukowanej bezpośrednio w głównym korpusie mojego projektu. (Pliki STL załączone poniżej.)

Wymagało to kilku prób i błędów, ale mój projekt powinien uwzględniać różne kąty i promienie szpuli, umożliwiając odwijanie filamentu z dowolnej części szpuli, od początku do końca wydruku. A drukowana sprężyna ułatwia wkładanie lub wyjmowanie filamentu podczas zmiany szpuli.

Krok 3: Kodowanie

Image
Image

Wystarczy policzyć filament, wystarczy dowolna płyta deweloperska z dwoma wejściami cyfrowymi. Enkoder, który wybrałem, ma cztery piny: Vcc, uziemienie i dwa piny enkodera. Oto naprawdę fajny opis, który wyjaśnia, jak działają enkodery obrotowe i jak łączyć je z Arduino. (Również: ten artykuł o enkoderach 3-pinowych.)

Podstawowe liczenie jest proste: dwa wejścia – ustawione na podciąganie wewnętrznie, dzięki czemu zewnętrzne rezystory nie muszą być lutowane do Vcc – i jedno przerwanie. Dodałem również przycisk zerowania/resetowania, wymagający jeszcze jednego wejścia i przerwania:

void setUpPins() {

pinMode(ENCODER_PIN_1, INPUT_PULLUP); pinMode(ENCODER_PIN_2, INPUT_PULLUP); pinMode (ZERO_BTN_PIN, INPUT_PULLUP); attachInterrupt (KODER_PIN_1, koderPinDidChange, ZMIANA); attachInterrupt(ZERO_BTN_PIN, zeroButtonPressed, CHANGE); } void IRAM_ATTR koderPinDidChange() { if (digitalRead(ENKODER_PIN_1) == digitalRead(ENKODER_PIN_2)) { pozycja += 1; } else { pozycja -= 1; } } void IRAM_ATTR zeroButtonPressed() { // obsłużenie zera i zresetowanie }

Ale chciałem czegoś więcej niż tylko głupiego licznika. Dzięki ESP32 (lub ESP8266) i wbudowanemu Wi-Fi mogę faktycznie coś zrobić z danymi, które zbieram. Używając prostego kodu limitu czasu (opisanego poniżej), mogę określić, kiedy drukowanie się zaczyna i kończy, i wysyłać te zdarzenia jako powiadomienia na mój telefon. W przyszłości mogę dodać czujnik zużycia i powiadomić siebie (i wstrzymać drukarkę), gdy będzie potrzebna moja uwaga.

Pełny kod znajduje się na Github.

Kilka uwag na temat kodu:

Aby dostosować to do swojej konstrukcji, wszystko, czego potrzebujesz, to rozdzielczość (enkoderPPR) – w impulsach na obrót, co zwykle jest dwukrotnością podanej specyfikacji – i promień koła pasowego (wheelRadius). Te wartości, wraz z identyfikatorem SSid i hasłem Wi-Fi oraz określonymi pinami podłączonymi do przycisku, kodera i ekranu OLED, trafiają do pliku config.h

Przycisk zero pełni również funkcję resetowania - przytrzymaj go, aby ponownie uruchomić płytę, co jest przydatne do debugowania

Przerwania są potężne - czasami zbyt potężne. Pojedyncze naciśnięcie przycisku zero może spowodować, że funkcja zeroButtonPressed() zostanie wywołana 10-20 razy, więc dodałem trochę logiki debounce. Mój koder optyczny go nie potrzebował, ale YMMV

Podczas gdy przerwania zajmują się danymi wejściowymi asynchronicznie, funkcja loop() obsługuje księgowość. KoderState - wyliczenie, które może być podawane, wycofywane lub zatrzymywane - jest aktualizowane wraz ze zmianą pozycji kodera. Limity czasu określają wtedy, kiedy drukarka rozpoczęła i zakończyła drukowanie. Ale trudne jest to, że drukarki 3D często zaczynają i zatrzymują ruch, więc najlepiej było zdefiniować zdarzenie „drukowanie zakończone”, które pozostawało nieprzerwanie zatrzymane przez co najmniej 5 sekund. Każdy ruch wyzwala drugi zegar, który definiuje zdarzenie „rozpoczęcie drukowania” tylko wtedy, gdy w ciągu 15 sekund nie wystąpi zdarzenie „drukowanie zakończone”. W praktyce działa to płynnie

Tak więc kod main loop() może działać bez obciążenia, kod debounce działa w pętli zadań RTOS. Podobnie żądania http o wysyłanie powiadomień są synchroniczne i dlatego działają w tle. Dzięki temu animacje przebiegają płynnie, a liczenie nigdy się nie zatrzymuje

W moim przykładzie jest trochę dodatkowego kodu, aby (A) nawiązać i utrzymać połączenie sieciowe z Wi-Fi i mDNS, (B) pobrać czas z serwera NTC, abym mógł oznaczyć moje powiadomienia o początku i końcu oraz wyświetlić zegar beztroski na moim OLED i (C) obsługuje aktualizacje OTA, więc nie muszę fizycznie podłączać płyty do komputera Mac w celu aktualizacji kodu. W tej chwili to wszystko w jednym monolitycznym pliku C++, tylko dlatego, że nie poświęciłem czasu na lepsze uporządkowanie

Użyłem wspaniałej (i darmowej) aplikacji Prowl na iOS do wysyłania powiadomień push na mój telefon za pomocą tylko metod HTTP Get

Do opracowania kodu i flashowania tablicy wykorzystałem spektakularne PlatformIO działające na Visual Studio Code, oba za darmo

W moim projekcie użyłem tych bibliotek: u8g2 autorstwa Olivera, elapsedMillis autorstwa Paula Stoffregena oraz HTTPClient autorstwa Markusa Sattlera, który jest dostarczany z platformą Espressif ESP32. Cała reszta pochodzi z biblioteki Arduino lub platformy ESP32 w PlatformIO

W końcu stworzyłem sześć prostych bitmap mojego głównego koła pasowego pod różnymi kątami, dzięki czemu mogłem pokazać ładną animację obracającego się koła na OLED za ladą. Porusza się w odpowiednim kierunku za pomocą enkodera, choć znacznie szybciej, aby uzyskać bardziej dramatyczny efekt

Krok 4: Okablowanie

Okablowanie
Okablowanie

Zaprojektowałem to tak, aby okablowanie było bardzo proste, głównie po to, aby moja obudowa była mała, ale także aby debugowanie było proste. Zwróć uwagę na ciasne warunki w moim małym pudełku.:)

Pierwszym wymaganiem było napięcie zasilania 5V mojego enkodera obrotowego. Spośród różnych płyt deweloperskich ESP32, które miałem w swoim schowku, tylko kilka dostarczało prawdziwe 5 V na pinie Vcc, gdy było zasilane przez USB. (Inne mierzyły 4,5-4,8 V, co w przypadku złej matematyki jest niższe niż 5 V.) Płyta, której użyłem, to Wemos Lolin32.

Następnie przychodzą dwa obrotowe kołki sygnałowe enkodera. Ponieważ używam przerwań, głównym problemem jest to, że używane przeze mnie piny w niczym nie przeszkadzają. Dokumentacja ESP32 stwierdza, że ADC2 nie może być używany w tym samym czasie co WiFi, więc niestety oznacza to, że nie mogę użyć żadnego z pinów ADC2 GPIO: 0, 2, 4, 12, 13, 14, 15, 25, 26 lub 27. Wybrałem 16 i 17.

Wskazówka dla profesjonalistów: jeśli po złożeniu tego wszystkiego w całość, twój koder wydaje się odliczać wstecz, możesz po prostu zamienić dwa przypisania pinów w config.h.

Na koniec podłącz przewód uziemiający enkodera obrotowego do… rolki bębna… kołka uziemiającego.

Następnie przycisk zero/reset jest podłączany między masę a inny wolny pin (ja wybrałem GPIO 18).

Przycisk, którego użyłem, był małym chwilowym przełącznikiem, który uratowałem ze wspomnianej myszy komputerowej, ale każdy przycisk, który położysz, wystarczy. Widać, jak spoczywa w małym uchwycie, który zrobiłem dla niego tuż nad deską.

Wreszcie, OLED, jeśli nie jest jeszcze podłączony do płyty, potrzebuje tylko czterech pinów: 3V3, uziemienia, zegara i2c i danych i2c. Na mojej płycie deweloperskiej zegar i dane to odpowiednio 22 i 21.

Krok 5: Wydrukuj części

Wydrukuj części
Wydrukuj części

Zaprojektowałem siedem części do tego buildu:

Koło pasowe, które montuje się bezpośrednio na wale enkodera obrotowego

Koło napinające, które pasuje do łożyska 608ZZ (zdjąć osłony i odtłuścić WD40, aby swobodnie się obracało)

Uchwyt, na którym mocowane są dwa koła i enkoder - zwróć uwagę na spiralną sprężynę koła napinającego

Wspornik do stabilizacji uchwytu. Zdjęcie w tym kroku pokazuje, jak wspornik mocuje się do uchwytu

Obudowa (na dole) do przechowywania mojej płytki dev ESP32, z miejscem na kabel USB z boku i drugą na górze na złącze, które dodałem do przewodów enkodera. Ten jest zaprojektowany tak, aby pasował do Wemos Lolin32, więc być może będziesz musiał trochę zmodyfikować ten projekt, aby pasował do innej płyty

Obudowa (górna) do przytrzymania ekranu OLED, kolejna spirala na przycisk zero/reset

Uchwyt na przycisk dostosowany do małego przełącznika, który miałem, zaprojektowany tak, aby spoczywał między dwiema półkami wewnątrz dolnej obudowy. Do „przyklejenia” przełącznika do uchwytu użyłem lutownicy; zobacz poprzedni krok dla zdjęcia

Wszystko jest przeznaczone do drukowania bez podpór. Wystarczy zwykły PLA w wybranym przez Ciebie kolorze.

Złóż to wszystko razem, podłącz do drukarki (może być tu wymagana trochę kreatywności) i gotowe.

Zalecana: