Il modulo GPIO (General Purpose Input Output) è un PCB aggiuntivo e opzionale che può essere collegato all'Original Prusa MK4/S, MK3.9/S, o MK3.5/S.
Il modulo offre maggiori funzionalità consentendo il controllo di dispositivi esterni tramite connessioni ai pin della scheda GPIO, che possono funzionare sia in modalità INPUT che OUTPUT. Questa sua versatilità offre un'ampia serie di potenziali casi d'uso.
Condividi e discuti i tuoi progetti con gli altri membri della Community Prusa sul nostro forum ufficiale. Abbiamo creato una sezione GPIO dedicata.
Il modulo può controllare l'otturatore di una fotocamera in un momento preciso, rendendolo ideale per creare time-lapse visivamente perfetti, in cui ogni immagine viene catturata nello stesso esatto momento.
Oltre a controllare l'otturatore di una fotocamera, il modulo può essere utilizzato per diverse altre applicazioni. Ad esempio, può attivare l'illuminazione esterna per illuminare l'area di stampa in fasi specifiche del processo di stampa, garantendo condizioni di luce ottimali per i controlli di qualità o le fotografie. Inoltre, può essere configurato per attivare le ventole di raffreddamento o altri dispositivi periferici, come estrattori o allarmi, in base all'esecuzione di G-code personalizzati durante le stampe, contribuendo a mantenere condizioni operative ottimali e a migliorare la sicurezza e l'efficienza dell'ambiente di stampa 3D.
Un altro importante caso d'uso è l'integrazione di una tastiera macro, dove ogni pressione di un tasto può attivare l'esecuzione di specifici comandi G-code. Questa configurazione consente un rapido controllo manuale delle funzioni della stampante, come l'avvio o la pausa di una stampa, la regolazione delle temperature o lo spostamento della testina di stampa in una posizione esatta. La possibilità di attivare azioni personalizzate con la semplice pressione di un tasto può snellire notevolmente i flussi di lavoro, rendendo il modulo di espansione GPIO uno strumento versatile e indispensabile per chi vuole personalizzare e ottimizzare la propria configurazione di stampa 3D.
Se da un lato la possibilità di attivare il G-code tramite gli ingressi GPIO aggiunge grande flessibilità, dall'altro comporta limitazioni e potenziali rischi. Un uso improprio o una tempistica sbagliata dei comandi G-code possono interferire con il processo di stampa, causando errori di stampa o addirittura danni alla stampante. È fondamentale testare accuratamente qualsiasi configurazione G-code personalizzata in un ambiente controllato prima di implementarla nei lavori di stampa effettivi per evitare conseguenze indesiderate.
Gli schemi sono open source e sono disponibili alla nostra pagina Open Source at Prusa Research.
La scheda dispone di 8 pin, numerati da 0 a 7. I pin 0-3 possono essere usati come output mentre i pin 4-7 possono funzionare sia come ingresso che come uscita. Ogni pin è di tipo open-drain quando viene utilizzato come uscita, cioè è controllato da un transistor che collega il pin alla massa (0 V) quando è attivo. Quando il pin è inattivo, rimane “ floating ”, ovvero non è collegato ad alcuna tensione specifica, ma grazie alle resistenze di pull-up interne, la tensione sul pin può aggirarsi intorno ai 3,3 V.
The behavior of the pins in an open-drain state when used as outputs can be explained as follows:
Questo stato " floating " può far sì che il pin rilevi disturbi o interferenze elettriche casuali, causando un comportamento indesiderato se non viene gestito correttamente.
Quando i pin vengono utilizzati come ingressi, sono in grado di rilevare il livello di tensione applicato. Lo stato dell'ingresso è influenzato dalla presenza di resistenze pull-up, che possono contribuire a garantire una tensione costantemente alta (3,3 V) quando non viene applicata nessun'altra sorgente di tensione.
La scheda consente di collegare resistenze pull-up esterne tramite i ponticelli a saldare contrassegnati da JP4 a JP7. Questi ponticelli si trovano al centro della scheda e sono collegati ai pin corrispondenti:
I ponticelli a saldare da JP7 a JP4 possono essere utilizzati per collegare resistenze pull-up integrate, che assicurano che i pin rimangano a una tensione elevata (3,3 V) quando non sono attivamente pilotati verso il basso da una sorgente esterna o dallo stato di uscita del pin. Queste resistenze pull-up hanno un valore di 10K ohm, che è un valore standard per fornire una tensione stabile senza un eccessivo assorbimento di corrente. Se non viene collegato alcun resistore al ponticello di saldatura, il pin potrebbe rimanere in uno stato flottante, causando potenzialmente un comportamento instabile. JP sta per “jumper” e se non viene collegato alcun resistore, non crea alcuna resistenza.
Per gli utenti meno esperti, è importante capire che le uscite open-drain non producono intrinsecamente una tensione elevata (3,3 V), ma consentono una connessione a terra (0 V). Le resistenze di pull-up sono necessarie per garantire che il pin rimanga ad alta tensione quando viene spento o utilizzato come ingresso. Se non viene gestita correttamente, una tensione " floating " può far sì che il pin raccolga disturbi elettrici, causando commutazioni indesiderate o l'instabilità del sistema.
Quella che segue è una sequenza di comandi G-code personalizzati utilizzati per controllare la scheda GPIO. Questo permette di configurare gli stati di uscita, leggere gli stati di ingresso e gestire altre impostazioni avanzate della scheda attraverso le istruzioni G-code, integrandole perfettamente con il flusso di lavoro della stampante 3D.
Per controllare i pin di uscita della scheda GPIO, è possibile utilizzare i seguenti comandi G-code:
M262 P<base 10> B<base 10>
M264 P<base 10> B<0 or 1>
M265 P<base 10>
M267 R<1-3> B<0-255>
Per leggere lo stato dei pin o impostare le configurazioni, utilizza i seguenti comandi G-code:
M263 P<base 10>
M261 A<slave device address base 10> B<number of bytes> S<style>
M268 R<base 10>
Per configurare i pin di ingresso per la tua configurazione, ogni pin di ingresso viene mappato automaticamente a uno specifico file G-code che si trova sull'unità USB. Questi file devono essere memorizzati in una cartella denominata “macros” e devono seguire una rigida convenzione di denominazione: il nome del file deve essere nel formato
btn_{pin_number}.gcode
dove {pin_number} corrisponde allo specifico pin GPIO che stai utilizzando. Tutte le lettere dei nomi dei file devono essere minuscole.
Il sistema supporta 8 pin di input sulla scheda GPIO e ogni pin può essere mappato in un unico file G-code in questo modo.
Quando un file G-code viene attivato tramite il pin di input corrispondente, il G-code memorizzato in quel file viene immediatamente iniettato nel processo in corso. Tieni presente che esiste un limite di dimensione per ogni file G-code, che non deve superare i 1024 byte.
Quando un pin di ingresso è configurato con M262 e impostato su 1 (modalità input), lo stato del pin viene controllato periodicamente ogni 0,5 secondi.
Se un pulsante collegato al pin viene premuto (lo stato del pin diventa LOW), questo attiva un pulsante macro. Ad esempio, un pulsante sul pin 7 può eseguire automaticamente una macro memorizzata nel file macros/btn_7.gcode su una chiavetta USB. La macro viene iniettata nella sequenza di stampa, con una dimensione massima di 1024 byte.
La configurazione dei pin e i loro stati sono memorizzati in EEPROM, assicurando che le impostazioni dei pin (modalità di output/input, polarità e stati) siano conservate anche dopo un ciclo di alimentazione.
Le modifiche apportate tramite M262, M264, M267 o qualsiasi altro G-code pertinente aggiorneranno l'EEPROM, quindi le impostazioni saranno persistenti.
Per i pin 0-3, che non hanno resistenze pull-up interne, la configurazione come input senza un circuito esterno aggiuntivo può risultare in uno stato logico invertito. Questo può innescare inavvertitamente l'esecuzione di macro a causa del loro stato di riposo predefinito che è LOW (0).
Puoi invertire la logica dei pin di input utilizzando il Registro di Polarità (M267 R2 B<valore>). Questa funzione è particolarmente utile per i pin che non hanno resistenze pull-up (pin 0-3), che hanno uno stato di default pari a 0 (LOW) e potrebbero attivare azioni indesiderate se lasciati non configurati.
La principale differenza di comportamento tra i pin deriva dal fatto che i pin 4-7 possono utilizzare resistenze interne di pull-up, che li mantengono in uno stato HIGH (3,3 V) quando non vengono pilotati attivamente LOW. Tuttavia, queste resistenze di pull-up sono attive solo se i ponticelli corrispondenti (da JP4 a JP7) sono collegati. Se questi ponticelli non sono saldati, i pin 4-7 si comportano in modo simile ai pin 0-3, passando allo stato floating.
Quando si utilizzano i pin di input per attivare le macro, il sistema è progettato per rilevare uno stato LOW che indica un pulsante premuto. Per i pin senza resistenze pull-up attive, questo stato LOW predefinito può innescare inavvertitamente le macro, a meno che non si utilizzi l'inversione di polarità.
Quando si configura o si scrive sui pin, il sistema emette un avviso tramite la porta seriale se c'è una mancata corrispondenza tra le operazioni previste (ad esempio, il tentativo di scrivere su un pin di input). È essenziale configurare correttamente i pin utilizzando M262 per evitare questi conflitti.
Inserisci il codice nei punti esatti in cui è necessario, dopo/prima di un altro particolare comando G-code. Nella schermata di esempio, il G-code personalizzato che controlla la scheda GPIO è impostato tramite PrusaSlicer e viene posizionato dopo ogni cambio di layer. Tuttavia, può essere posizionato in qualsiasi punto.
Nell'immagine allegata qui sotto, possiamo vedere il collegamento tra il modulo GPIO e il controller aggiuntivo responsabile del controllo del filtro della ventola e del LED dell'Original Prusa Enclosure.
Se hai una domanda su qualcosa che non è trattato qui, dai un'occhiata alle nostre risorse aggiuntive.
E se questo non dovesse funzionare, è possibile inviare una richiesta a [email protected] o tramite il pulsante qui sotto.