Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Wybierz enkoder obrotowy
- Krok 2: Dodaj koło pasowe i koło napinające
- Krok 3: Kodowanie
- Krok 4: Okablowanie
- Krok 5: Wydrukuj części
Wideo: Inteligentny licznik filamentów do drukarki 3D: 5 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:27
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
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
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
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
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
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:
Drukarki 3D SLA Wytrawione kwasem płytki drukowane: 7 kroków (ze zdjęciami)
Drukarki 3D z kwasem SLA: Remix..remix.. Cóż, potrzebuję płytki rozwojowej do moich układów ATtiny. Nie mam CNC do wycinania PCB Nie znam Kicada i nie chcę zamawiać płytek. Ale mam drukarkę do żywicy… i kwas i znam SketchUp. I lubię robić rzeczy. Co się stało
DIY NANOLEAF - Brak drukarki 3D: 11 kroków (ze zdjęciami)
DIY NANOLEAF - Brak drukarki 3D: Miłośnicy Hii Tech w tej instrukcji. Pokażę Ci, jak zrobić Arora Nanoleaf No elektronarzędzia i amp; możesz dostosować te panele. Zrobiłem 9 paneli, łącznie 54 diody Neo pixel. Całkowity koszt poniżej 20 USD (1500 indyjskich) Panele świetlne Nanoleaf
Inteligentny budzik: inteligentny budzik z Raspberry Pi: 10 kroków (ze zdjęciami)
Inteligentny budzik: inteligentny budzik z Raspberry Pi: Czy kiedykolwiek chciałeś mieć inteligentny zegar? Jeśli tak, to jest to rozwiązanie dla Ciebie! Zrobiłem Inteligentny Budzik, jest to zegar, w którym możesz zmienić godzinę alarmu zgodnie ze stroną internetową. Gdy alarm się włączy, rozlegnie się dźwięk (brzęczyk) i 2 światła będą
Inteligentny licznik energii Iot: 6 kroków
Inteligentny licznik energii Iot: Jest to inteligentny licznik energii oparty na iot, który zrobiłem, może monitorować moc, prąd, watogodzinę i energię jednostkową zużywaną przez urządzenie. Możesz zobaczyć działające wideo tutaj
Inteligentny licznik energii elektrycznej: 3 kroki
Inteligentny licznik energii elektrycznej: Prawie wszystkie cyfrowe liczniki energii elektrycznej (inteligentne lub nie) mają światło, które miga za każdym razem, gdy zużywana jest określona ilość energii – często raz na każdą watogodzinę (zwykle oznaczane jako 1000 imp/kWh). Możesz łatwo wykryj to za pomocą prostego Light Depen