ZUBI Progetto hardware e software per gestire la stampante 3D wireless

ZUBI – progetto hardware e software per gestire la stampante 3D wireless

Ormai da qualche anno la diffusione delle stampanti 3D fai da te o commerciali stimola la creatività di molte persone, me compreso, è bello poter disegnare un oggetto e poi inviarlo alla stampante, è affascinante  vedere come strato dopo strato, un filo sottile, fluido, possa materializzare la nostra idea.
Dopo aver partecipato al workshop per la realizzazione della mia prima 3d Printer (Falla3D) al Fablab Roma Makers, preso dall’entusiasmo della meraviglia, i primi tempi stavo lì ad ammirarla mentre stampava, ma poi con il tempo mi sono chiesto: sarebbe bello controllare da remoto la mia stampante 3D, che sia dall'ufficio o dalla nostra macchina, controllandone così lo stato di avanzamento, fermandola, in caso di emergenza. Man mano che si stampa si acquisisce esperienza, ci si rende conto che ci vuole molto tempo per un oggetto complesso, talvolta sono necessarie anche 10 ore prima che la stampa sia completata.

Soluzioni disponibili

Qualcuno prima di noi ha pensato e realizzato una soluzione in vari modi,  si può utilizzare il vecchio computer portatile collegato al router di casa o in ufficio, il più smart utilizzerà una Raspberry Pi, ci metterà una chiavetta WIFI ed un bel software scaricato da internet. Poi c’è Doodle3D, Octoprint, Astroprint etc etc. Prima di iniziare questo progetto, la nostra domanda è stata:
E' davvero più conveniente, intelligente, e lasciatemi dire "più da maker",  prendere un altro PC (Raspberry Pi di fatto lo è) per sostituire un PC?

L' idea

La nostra idea è stata di utilizzare un dispositivo semplice, tagliato per fare poche cose sfruttando al meglio le risorse disponibili.
Nella prima versione ci siamo basati su una scheda minimale con a bordo un Microchip della famiglia PIC24 connessa da un lato alla porta USB della stampante e dall’altro, in modalità  wireless, ad un router domestico tramite il modulo WiFi con interfaccia seriale HLK-RM04.
Grazie al nostro bootloader, il firmware è facilmente aggiornabile da una pen drive USB. Il progetto (allora chiamato 3DWebfier) fu selezionato tra l’altro per il Rome Maker Faire 2014, presso lo stand riservato ai Fablab, in particolare al Fablab Roma Makers (Figura 1).

Zubi: ambiente di funzionamento

Figura 1: Zubi, ambiente di funzionamento

Cosa è Zubi

Zubi (ponte/bridge in basco) agisce quindi come un mini PC, è una soluzione completa, hardware (Open) e software, pensata principalmente per controllare una stampante 3D in modalità wireless (ma anche ogni dispositivo basato su Arduino e non, che usi la classe seriale su USB), una volta connessa è in grado di gestire la comunicazione bidirezionale tra la stampante ed un dispositivo di controllo remoto wireless (smartphone, tablet PC etc). La scheda (Figura 2) ZUBI (5x5cm) va collegata alla porta USB della stampante 3D e può essere agganciata alla rete Wifi di un router connesso a internet per mezzo del modulo WiFi HLK-RM04.

Zubi: foto dimensionale

Figura 2: Zubi, foto dimensionale

Nella sua evoluzione, Zubi si basa su una scheda ridisegnata predisposta per un economico e diffuso modulo arduino SD card Reader ed un processore molto potente MCU Microchip PIC32MX250F128 32 bit, 50MHz, porta USB HOST/DEVICE e DMA; il software è flessibile ed aggiornabile in 30 secondi da chiavetta USB.
Il modulo WIFI HLK-RM04 è un router miniLinux con funzione di Access Point e 2 porte seriali (max 250KBPS), ingloba il chip della MEDIATEK.COM RALINK-RT5350F (360MHz). Zubi è una soluzione molto economica, impiega pochissimi componenti, veramente facile da realizzare da soli in kit o in Workshop organizzati dai Fablab (figura 3).

Zubi: Diagramma di funzionamento

Figura 3: Zubi: Diagramma di funzionamento

Per completare la soluzione si può impiegare una telecamera IP wireless collegata al router WIFI domestico o dell’ufficio, per fornire un feedback visivo utile a valutare la qualità della lavorazione e ad intervenire in caso di problemi prima che la stampante consumi metri di filamento (Figura 4).

Zubi: esempio di configurazione con Webcam

Figura 4: Zubi: esempio di configurazione con Webcam

Al seguente link trovate un esempio pratico della soluzione.

Descrizione Hardware

Il nostro obiettivo è quello di proporre ai Makers una scheda molto economica con il minimo dei componenti e facile da realizzare (Figura 5). Alcune caratteristiche sono descritte di seguito:
Power required: 5V DC stabili (presi dalla Stampante 3D o utilizzando un caricabatterie da cellulare da 5Volt/500mA );
Power consuming: circa 200mA;
Processor: PIC32MX250F128 ,32BIT, USB-OTG 50 MHz/83DMIPS;
Program Memory 128K Flash;
Interfaccia con: HI-LINK HLK-RM04 Serial Port-Ethernet-Wi-Fi Adapter Module (Wireless: IEEE 802.11n, IEEE 802.11g, IEEE 802.11b; Wired: IEEE 802.3, IEEE 802.3u).

Zubi: schema elettrico

Figura 5: Zubi: schema elettrico

Descrizione Software

Il firmware è stato interamente realizzato da noi utilizzando il software gratuito MPlabX IDE Microchip, compilatore C30 per processori della famiglia a 16bit e ultimamente 32 Bit (Figura 6).
Il linguaggio di programmazione utilizzato è il C, per la comunicazione HOST-Device il programma è basato sullo stack USB microchip e nelle ultime versioni con l’uso del DMA per aumentare le performances della seriale, è possibile così raggiungere una configurazione max di circa 250000 bps lato WIFI che ci garantiscono un'ampia copertura su tutte le attuali versioni di software per stampanti 3d (MARLIN) e macchine CNC (GRBL).

Zubi: IDE programmazione PIC

Figura 6: Zubi, IDE programmazione PIC

 

A titolo di esempio riporto il main del programma

//******************************************************************************
//******************************************************************************
// Main
//******************************************************************************
//******************************************************************************
int main (void)
{
// Initialize the processor and peripherals.
if ( InitializeSystem() != TRUE )
{
while (1);
}
#if defined (__PICAPBOARD__)
PrintDisplay((char *)Menu[0],(char *)Menu[1]);
#endif
ALTERNATE_Act = VERIFY_QUEUE_IN_UART_DATA;
// Initialize USB layers
USBInitialize( 0 );
while(1)
{
Get_in_uart_data();
USBTasks();
Get_in_uart_data();
if(!USBHostCDC_ApiDeviceDetect()) /* TRUE if device is enumerated without error */
{
APPL_State = DEVICE_NOT_CONNECTED;
}
switch(APPL_State)
{
case INITIALIZE:
APPL_State = DEVICE_NOT_CONNECTED;
break;
case DEVICE_NOT_CONNECTED:
#if defined (__PICAPBOARD__)
if(displayOnce == FALSE)
{
PrintDisplay((char *)DeviceDetached[0],(char *)DeviceDetached[1]);
displayOnce = TRUE;
}
#endif
if(USBHostCDC_ApiDeviceDetect()) /* TRUE if device is enumerated without error */
{
APPL_State = DEVICE_CONNECTED;
#if defined (__PICAPBOARD__)
displayOnce = FALSE;
#endif
}
break;
case DEVICE_CONNECTED:
#if defined (__PICAPBOARD__)
PrintDisplay((char *)DeviceAttached[0],(char *)DeviceAttached[1]);
#endif
APPL_State = READY_TO_TX_RX;
break;
case GET_IN_USB_DATA: //Call Read for USB CDC Data IN
APPL_State = Get_in_usb_data();
break;
case GET_IN_USB_DATA_WAIT: //Verify end of Read for USB CDC Data IN
APPL_State = Get_in_usb_data_wait();
break;
case SEND_OUT_USB_DATA:
APPL_State = Send_out_usb_data();
break;
case SEND_OUT_USB_DATA_WAIT:
APPL_State = Send_out_usb_data_wait();
break;
case SEND_OUT_UART_DATA:
APPL_State = Send_out_uart_data();
break;
case READY_TO_TX_RX:
switch(ALTERNATE_Act){
case VERIFY_QUEUE_IN_UART_DATA:
if(CountInUartByte > 0)
APPL_State = SEND_OUT_USB_DATA;
ALTERNATE_Act = REQUEST_READ_IN_USB_DATA;
break;
case REQUEST_READ_IN_USB_DATA:
APPL_State = GET_IN_USB_DATA;
ALTERNATE_Act = VERIFY_QUEUE_IN_USB_DATA;
break;
case VERIFY_QUEUE_IN_USB_DATA:
if(CountInUSBByte > 0)
APPL_State = SEND_OUT_UART_DATA;
ALTERNATE_Act = VERIFY_QUEUE_IN_UART_DATA;
break;
}
#if defined (__PICAPBOARD__)
ControlButton();
#endif
break;
default :
break;
}
}
}---

In ogni caso la possibilità di aggiornamento del firmware garantisce una ampia copertura nel tempo per via delle continue evoluzioni del progetto. ZUBI è compatibile con le stampanti 3D che comunicano via USB seriale a velocità di 115 kbit/s o 250 kbit/s, non solo, virtualmente può rendere wireless qualunque dispositivo che comunichi via USB in seriale (IoT), come ad esempio una CNC con software GRBL Shapeoko, un camera slider motorizzato (che stiamo realizzando) o delle installazioni Arduino che abbiano necessità di recuperare o fornire dati in Internet/Cloud (sensori, attuatori, controllo accessi etc).

Lista compatibilità:
Falla 3D - sk Ramps 1.4
Power Wasp EVO, Delta 2040
Sharebot - sk Rumba Taurin
RepRap I2
3D Rag versione 1.0 -sk Sanguinololu
3D Rag versione 1.2
Kentstrapper
5dprint, printrboard, megatronics.2.0

Funzioni del firmware 1.2 rilasciato:
a) Diagnostica con led per supportare il troubleshooting in caso di problemi.
b) Cambio velocità 115/250 lato processore e modulo WIFI senza più necessità di ricaricare il firmware come nelle versioni precedenti.
c) Con questo nuovo aggiornamento è disponibile la funzione di Factory Reset ed autoconfigurazione velocità (115k/250K) del modulo wifi HLK-RM04 in funzione della posizione del jumper JP1.
Chiuso = 115.200
Aperto = 250.000

Firmware in test

Con l’ultimo firmware in test è disponibile un web server integrato, un lettore SD e la possibilità di personalizzare le pagine html di controllo e comando stampa. La soluzione Web ci svincola dalla necessità di realizzare app distinte per ogni tipo di Smartphone/Tablet, che siano Android, iOS o Windows Mobile.

1.3 - WEB Server integrato con pulsanti in CSS , compatibile con Google Chrome, Safari, Firefox
(usa attuale PIC32MX250F128).

1.4 - ZUBI+SDCard Reader:
Web server integrato con pagine HTML+Jscript e funzione di Upload file g-code, lettura SD card interna o della stampante.
Lettore SD Card per caricare i file g-code da stampare e area webserver per le pagine personalizzabili
G-Code sender integrato (non occorre nessun software cone Repetier Host o Pronterface). Il nuovo firmware richiede PIC32MX270F256.

SDCARD

Figura 7: SD Card reader

 

 

zubi

Figura 8: ZUBI, command e control page

Ora di fatto con il lettore SD card integrato (Figura 7), ZUBI (Figura 8) diventa un piccolo pc in grado di connettersi ad internet, permette di fare upload dei file (g-code da stampare, ma anche le pagine html e le immagini) sulla SD card interna alla nostra scheda, e da li lanciare la stampa in autonomia (Figura 9).

 

newpagecloud

Figura 9: Zubi, Interfaccia web in Cloud

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS

STAMPA     Tags:, , ,

2 Commenti

  1. Maurizio Di Paolo Emilio Maurizio 14 aprile 2016
  2. telegiangi61 telegiangi61 20 aprile 2016

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS