Moduł GPIO (General Purpose Input Output, czyli "wejście/wyjście ogólnego przeznaczenia") to dodatkowa, opcjonalna płytka PCB, którą można podłączyć do Original Prusa MK4/S, MK3.9/S lub MK3.5/S.
Moduł zapewnia rozszerzoną funkcjonalność, umożliwiając sterowanie urządzeniami zewnętrznymi poprzez połączenia z pinami GPIO płyty, które mogą działać w trybie INPUT (wejście) lub OUTPUT (wyjście). Ta wszechstronność otwiera szeroki zakres potencjalnych zastosowań.
Zachęcamy do dzielenia się i omawiania swoich projektów z innymi członkami społeczności Prusa na naszym oficjalnym forum. Stworzyliśmy dedykowaną sekcję GPIO.
Moduł może sterować migawką kamery w precyzyjnym momencie, dzięki czemu idealnie nadaje się do tworzenia wizualnie doskonałych time-lapsów, w których każdy obraz jest rejestrowany dokładnie w tym samym momencie.
Oprócz sterowania migawką kamery, moduł może być wykorzystywany do innych zastosowań. Przykładowo, może on wyzwalać zewnętrzne oświetlenie, aby oświetlić obszar roboczy na określonych etapach procesu drukowania, zapewniając optymalne warunki oświetleniowe do kontroli jakości lub fotografowania. Dodatkowo można go skonfigurować tak, aby aktywował wentylatory chłodzące lub inne urządzenia peryferyjne, takie jak wyciągi powietrza lub alarmy, w oparciu o własny kod G wykonywany podczas drukowania, pomagając utrzymać optymalne warunki pracy i poprawiając bezpieczeństwo oraz wydajność środowiska druku 3D.
Innym istotnym przypadkiem użycia jest integracja klawiatury makr, w której każde naciśnięcie klawisza może wyzwalać wykonanie określonych poleceń G-code. Taka konfiguracja pozwala na szybkie ręczne sterowanie funkcjami drukarki, takimi jak uruchamianie lub wstrzymywanie drukowania, regulacja temperatury lub przesuwanie głowicy drukującej do określonej pozycji. Możliwość wyzwalania niestandardowych działań za pomocą prostego naciśnięcia klawisza może znacznie usprawnić przepływ pracy, dzięki czemu moduł rozszerzeń GPIO jest wszechstronnym i niezbędnym narzędziem dla tych, którzy chcą w pełni dostosować i zoptymalizować swój drukarski warsztat.
Chociaż możliwość wykonywania poleceń G-code za pośrednictwem wejść GPIO zapewnia dużą elastyczność, wiąże się ona również z ograniczeniami i potencjalnymi zagrożeniami. Niewłaściwe użycie lub źle ustawione w czasie polecenia G-code mogą zakłócać proces drukowania, prowadząc do awarii wydruku lub nawet uszkodzenia drukarki. Bardzo ważne jest, aby dokładnie przetestować wszelkie niestandardowe konfiguracje G-code w kontrolowanym środowisku przed wdrożeniem ich w rzeczywistych zadaniach drukowania i uniknąć niezamierzonych konsekwencji.
Płytka posiada 8 pinów, ponumerowanych od 0 do 7, które mogą funkcjonować jako wejście lub wyjście. Każdy pin to „open-drain”, gdy jest używany jako wyjście, co oznacza, że jest kontrolowany przez tranzystor, który łączy pin z masą (0 V), gdy jest aktywny. Gdy pin jest nieaktywny, pozostaje „pływający”, co oznacza, że nie jest podłączony do żadnego konkretnego napięcia, ale dzięki wewnętrznym rezystorom podciągającym, napięcie na pinie może oscylować w okolicy 3,3 V.
Zachowanie pinów w stanie open-drain, gdy są używane jako wyjścia, można wyjaśnić w następujący sposób:
Ten „pływający” stan może spowodować, że pin odbierze przypadkowy szum elektryczny lub zakłócenia, prowadząc do niezamierzonego zachowania, jeśli nie jest odpowiednio zarządzany.
Gdy piny są używane jako wejścia, mogą wykrywać przyłożone do nich napięcie. Na stan wejścia ma wpływ obecność rezystorów podciągających, które mogą pomóc w zapewnieniu stałego wysokiego napięcia (3,3 V), gdy nie jest przyłożone żadne inne źródło napięcia.
Płytka umożliwia podłączenie zewnętrznych rezystorów podciągających za pomocą zworek lutowniczych oznaczonych JP4 do JP7. Zworki te znajdują się na środku płytki i są podłączone do odpowiednich pinów:
Zworki lutownicze JP4 do JP7 mogą być używane do podłączania zintegrowanych rezystorów podciągających, które gwarantują utrzymanie stanu WYSOKIEGO (3,3 V) na pinach, gdy nie są one aktywnie obniżane przez zewnętrzne źródło lub stan wyjścia pinu. Te rezystory podciągające mają wartość 10K omów, co jest standardową wartością zapewniającą stabilne napięcie bez nadmiernego poboru prądu. Jeśli żaden rezystor nie jest podłączony do zworki lutowniczej, pin może pozostać w stanie pływającym, potencjalnie prowadząc do niestabilnego zachowania. JP oznacza „zworkę” ("jumper"), a jeśli nie jest podłączony żaden rezystor, nie tworzy ona żadnej rezystancji.
Dla mniej doświadczonych użytkowników ważne jest, aby zrozumieć, że wyjścia typu open-drain z natury nie wytwarzają wysokiego napięcia (3,3 V), ale raczej umożliwiają połączenie z masą (0 V). Rezystory podciągające są niezbędne, aby zapewnić, że pin pozostaje pod wysokim napięciem po wyłączeniu lub gdy jest używany jako wejście. Jeśli nie jest to odpowiednio zarządzane, „pływające” napięcie może spowodować, że pin odbierze szum elektryczny, prowadząc do niepożądanego przełączania lub niestabilności systemu.
Poniżej znajduje się sekwencja niestandardowych poleceń G-code używanych do sterowania płytką GPIO. Umożliwia to konfigurowanie stanów wyjściowych, odczytywanie stanów wejściowych i zarządzanie innymi zaawansowanymi ustawieniami płytki za pomocą instrukcji G-code, integrując je płynnie z przepływem pracy drukarki 3D.
Do zarządzania pinami wyjściowymi na płytce GPIO można użyć następujących poleceń G-code:
M262 P<system dziesiętny> B<system dziesiętny>
M264 P<system dziesiętny> B<0 lub 1>
M265 P<system dziesiętny>
M267 R<1-3> B<0-255>
Aby odczytać stan pinów lub ustawić konfiguracje, należy użyć następujących poleceń G-code:
M263 P<system dziesiętny>
M261 A<adres urządzenia slave w systemie dziesiętnym> B<liczba bitów> S<styl>
M268 R<system dziesiętny>
Aby skonfigurować piny wejściowe dla danej konfiguracji, każdy pin wejściowy jest automatycznie mapowany do określonego pliku G-code znajdującego się w pamięci USB. Pliki te muszą być przechowywane w folderze o nazwie „macros” i muszą być zgodne ze ścisłą konwencją nazewnictwa: nazwa pliku musi mieć format:
btn_{numer_pinu}.gcode
gdzie {numer_pinu} odpowiada konkretnemu używanemu pinowi GPIO. Wszystkie litery w nazwach plików muszą być małe.
System obsługuje 8 pinów wejściowych na płytce GPIO, a każdy pin można w ten sposób zmapować do unikalnego pliku G-code.
Gdy plik G-code jest wyzwalany przez odpowiedni pin wejściowy, G-code zapisany w tym pliku jest natychmiast wstrzykiwany do trwającego procesu. Należy pamiętać, że istnieje limit rozmiaru dla każdego pliku G-code, który nie może przekraczać 1024 bajtów.
Gdy pin wejściowy jest skonfigurowany za pomocą M262 i ustawiony na 1 (tryb wejściowy), stan pinu jest okresowo sprawdzany co 0,5 sekundy.
Jeśli przycisk podłączony do pinu zostanie naciśnięty (stan pinu przejdzie w LOW), uruchomi to przycisk makra. Na przykład przycisk na pinie 7 może automatycznie wykonać makro zapisane w pliku macros/btn_7.gcode w pamięci USB. Makro jest wstrzykiwane do sekwencji drukowania z ograniczeniem rozmiaru do 1024 bajtów.
Konfiguracja pinów i ich stany są przechowywane w pamięci EEPROM, zapewniając, że ustawienia pinów (tryby wyjścia/wejścia, polaryzacja i stany) są zachowane nawet po cyklu zasilania.
Zmiany dokonane za pomocą M262, M264, M267 lub innego odpowiedniego G-code zaktualizują EEPROM, więc ustawienia są trwałe.
W przypadku pinów 0-3, które nie posiadają wewnętrznych rezystorów podciągających, skonfigurowanie ich jako wejścia bez dodatkowych zewnętrznych obwodów może skutkować odwróconym stanem logicznym. Może to nieumyślnie wyzwolić wykonanie makra, ponieważ ich domyślnym stanem spoczynku jest NISKI (0).
Logikę pinów wejściowych można odwrócić za pomocą rejestru polaryzacji (M267 R2 B<wartość>). Ta funkcja jest szczególnie przydatna w przypadku pinów, które nie mają rezystorów podciągających (piny 0-3), które domyślnie mają stan bezczynności 0 (NISKI) i mogą wywoływać niepożądane działania, jeśli nie zostaną skonfigurowane.
Podstawowa różnica w zachowaniu między pinami wynika z faktu, że piny 4-7 mogą wykorzystywać wewnętrzne rezystory podciągające, które utrzymują je w stanie WYSOKIM (3,3 V), gdy nie są aktywnie sterowane w stanie NISKIM. Jednak te rezystory podciągające są aktywne tylko wtedy, gdy odpowiednie zworki lutownicze (JP4 do JP7) są podłączone. Jeśli te zworki nie są podłączone, piny 4-7 zachowują się podobnie do pinów 0-3, domyślnie w stanie pływającym.
Podczas używania pinów wejściowych do wyzwalania makr, system jest zaprojektowany do wykrywania stanu NISKIEGO jako wskazującego naciśnięcie przycisku. W przypadku pinów bez aktywnych rezystorów podciągających, ten domyślny stan NISKI może nieumyślnie wyzwolić makra, chyba że zastosowana zostanie inwersja polaryzacji.
Podczas konfigurowania lub zapisywania pinów, system wysyła ostrzeżenie przez port szeregowy, jeśli występuje niezgodność między zamierzoną operacją (np. próba zapisu pinu wejściowego). Aby uniknąć takich konfliktów, konieczne jest prawidłowe skonfigurowanie pinów za pomocą M262.
Wstaw kod dokładnie w tych miejscach, w których jest potrzebny, po/przed innym konkretnym poleceniem G-code. Na przykładowym zrzucie ekranu poniżej własny G-code sterujący płytką GPIO jest umieszczany przez PrusaSlicera i wykonywany przez drukarkę po każdej zmianie warstwy. Można go jednak ustawić w dowolnym miejscu.
Na poniższej ilustracji widzimy połączenie między modułem GPIO a kontrolerem odpowiedzialnym za sterowanie wentylatorem systemu filtracji i oświetleniem LED w Original Prusa Enclosure.
Jeśli masz pytanie dotyczące czegoś, czego nie opisaliśmy, to sprawdź dodatkowe zasoby.
A jeśli to nie działa, możesz wysłać zgłoszenie na [email protected] lub klikając poniższy przycisk.