Stamparsi il pomello delle pentole

La scorsa settimana mi si è rotto il pomello di un coperchio in vetro di una pentola della Tognana (farli un po’ più robusti magari?). Come primo approccio ho cercato se c’erano dei pezzi di ricambio originali, ma purtroppo con esito negativo. Ovviamente mamma Amazon mi suggeriva i pomelli “compatibili”, ma il design era decisamente diverso da quello originale, che è particolare:

Quindi mi sono rassegnato a ridisegnare il pomello e a stamparmelo con la mia Zortrax. Ovviamente ho creato una cava per un dado esagonale M4 da sfruttare con la messa in pausa della stampante:

e qui il risultato finale:

Per chi ha la necessità ai seguenti link l’STL e lo STEP:

STEP

STL

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Controllare motori passo a passo con Arduino

Ho deciso di scrivere questo articolo perché, trovandomi nella necessità di sviluppare un progetto che utilizza motori passo a passo, ho riscontrato che le guide disponibili in rete sono spesso lacunose o di difficile comprensione.

Come funziona un motore passo a passo?

Introdurrò in linea generale il principio di funzionamento, per gli aspetti matematico-fisici rimando alla mia tesi di laurea; è importante avere ben chiaro il funzionamento, in modo da capire come è meglio programmare Arduino. Wikipedia scrive: i motori passo-passo sono motori che, a differenza di tutti gli altri, hanno come scopo quello di mantenere fermo l’albero in una posizione di equilibrio: se alimentati si limitano infatti a bloccarsi in una ben precisa posizione angolare. Solo indirettamente è possibile ottenerne la rotazione: occorre inviare al motore una serie di impulsi di corrente, secondo un’opportuna sequenza, in modo tale da far spostare, per scatti successivi, la posizione di equilibrio. È così possibile far ruotare l’albero nella posizione e alla velocità voluta semplicemente contando gli impulsi ed impostando la loro frequenza, visto che le posizioni di equilibrio dell’albero sono determinate meccanicamente con estrema precisione.

L’elettromagnete in alto (1) viene eccitato, attraendo il dente più vicino di un attrezzo a forma di rotore metallico. Con il dente allineato all’elettromagnete 1, inizierà la rotazione verso l’elettromagnete 2.

Fase 1 motore passo

Fase 2 motore

 

 

 

 

 

 

L’elettromagnete in alto (1) viene spento e viene eccitato l’elettromagnete a destra (2), tirando il dente successivo leggermente verso destra. Questo processo produce una rotazione di 3.6° in questo esempio.

Fase 3 motore

fase 4 motore

 

 

 

 

 

 

L’elettromagnete a sinistra (4) viene eccitato, si ha un’altra rotazione di 3.6°. Quando l’elettromagnete in alto (1) sarà di nuovo eccitato, i denti del rocchetto dovranno ruotare nella posizione successiva; poiché vi sono 25 denti, occorrono 100 passi per realizzare una rotazione completa.

Unipolare o Bipolare?

Negli shop online trovate la possibilità di acquistare motori bipolari (generalmente a 4 fili) e motori unipolari (a 8 fili). La differenza consiste che mentre nel bipolare i magneti 1-3 e i magneti 2-4 condividono la stessa linea di alimentazione, negli unipolari le linee di alimentazione sono distinte per ogni magnete. I più diffusi sono i bipolari, perché richiedono dei sistemi di controllo più semplici, ma se avete a disposizione un unipolare, basta accoppiare opportunamente i fili di alimentazione ed otterrete un bipolare. La guida prenderà come esempio i motori bipolari.

Il driver

Per far muovere il motore è necessario dotarsi di un driver, un circuito che fornisce le tensioni e le correnti necessarie; ce ne sono diversi, ma conviene prendere quelli più evoluti, che hanno una logica integrata e sopratutto la possibilità del controllo in micropasso. Per chi volesse approfondire a livello di integrato, rimando al  Blog di Mauro Alfieri.

Il driver che utilizzerò io è PiBot Stepper Motor Driver Rev2.2; i collegamenti e le istruzioni per questo driver sono praticamente identiche per la maggior parte dei dispositivi recuperabili in commercio.

Analizziamo i collegamenti:

Prima di tutto serve individuare le fasi del motore, ed anche qui rimando al Blog di Mauro Alfieri. Una volta individuate le fasi le colleghiamo al driver secondo lo schema elettrico (ATTENZIONE, i colori dei cavi dipendo spesso dalla fantasia del produttore, quindi controllate sempre le fasi come da guida):

input-and-outputAll’ingresso di input 1A (o 1B) colleghiamo l’alimentazione per il motore; ricordatevi che più è alta la tensione di alimentazione (ovviamente entro i limiti segnati dal produttore) e più performante sarà il vostro motore. Ora passiamo ai collegamenti lato Arduino (in basso a destra):

  1. en: significa enable. Quando a questo ingresso c’è una tensione alta (3,3 – 5 V) il motore è alimentato. Questo non significa che si muove, ma che sta tenendo la posizione; viene generata una “coppia di tenuta” e se noi proviamo a muovere con le mani l’asse del motore, noteremo che opporrà resistenza. Se togliamo l’alimentazione il motore gira a vuoto; ovviamente nelle fasi di rotazione, su enable ci deve essere la tensione di attivazione.
  2. dir: significa direzione. Quando c’è una tensione il motore gira in un senso, quando non c’è gira nel senso opposto.
  3. clk: significa clock. Qui c’è il cuore per mettere in rotazione il motore. Infatti ogni qualvolta arriva uno stato logico alto, il motore avanzerà di un passo; a seguire ci deve essere uno stato logico basso. Quindi con la sequenza alto-basso facciamo avanzare il motore; è facile dedurre che maggiore è la frequenza con cui avviene questa sequenza e maggiore sarà la velocità di rotazione.
  4. gnd: massa

Colleghiamo ad Arduino

Il terminale di Enable se vogliamo possiamo collegarlo direttamente ai 5V di Arduino; ovviamente così facendo il motore sarà sempre in tensione. Nel caso invece vogliamo spegnere ed accendere il motore, lo colleghiamo ad un uscita digitale; dir e clk li colleghiamo ad un uscita digitale a nostro piacimento.

Programmiamo Arduino (il brutto codice):

ho scritto brutto codice, perché è quello che più frequentemente di trova nel web. Non è per nulla ottimizzato per controllare un motore passo-passo, ma funziona ed è didatticamente valido:

int DIR = 2;
int CLK = 3;
int EN = 4;
 
void setup() {
	pinMode(DIR, OUTPUT);
	pinMode(CLK, OUTPUT);
	pinMode(EN, OUTPUT);
}
 
void loop()
{
	digitalWrite(EN,HIGH);
	digitalWrite(DIR,HIGH);
        delay(50);
	for ( int i=0; i<200; i++) 
	{ 
	  stepGo(); delay(10); 
	}
	digitalWrite(DIR,LOW);
	for ( int i=0; i<200; i++) 
	{ 
	  stepGo(); delay(10); 
	}
	digitalWrite(EN,LOW);	
}
 
void stepGo() {
        digitalWrite(CLK, HIGH);
        delayMicroseconds(100);
        digitalWrite(CLK, LOW);
        delayMicroseconds(100);
}

Come sempre abbiamo dichiarato i pin di uscita ed indicizzati, analizziamo il voip loop()

digitalWrite(EN,HIGH);
digitalWrite(DIR,HIGH);

con la prima linea alimentiamo il motore, mentre con la seconda definiamo il senso di rotazione.

for ( int i=0; i<200; i++) 
 { 
  stepGo(); delay(10); 
 }

qui inizia un semplice ciclo che richiama la funzione stelGo() che ora vediamo:

void stepGo() {
 digitalWrite(CLK, HIGH);
 delayMicroseconds(100);
 digitalWrite(CLK, LOW);
 delayMicroseconds(100);
}

qui viene generata la sequenza alto-basso che fa avanzare di un passo alla volta il motore. Il delayMicroseconds() tra uno stato logico alto e basso è necessario per dare fisicamente al motore il tempo di avanzare, se non ci fosse, il motore inizierebbe a fischiare con aggiunta di rumori inquietanti. Ovviamente variando l’intervallo variamo la velocità di rotazione; più il delay è basso e più veloci si va.

Perché brutto codice? Per la presenza del delay(); tenete presente che in modalità full-step (passo intero, in fondo all’articolo spiego il micropasso), nella maggior parte degli attuatori in commercio ci vogliono 200 passi per fare un giro completo. Il delay() ha l’effetto di bloccare qualsiasi altra funzione della scheda arduino, in pratica rimane in “sospeso” finché non è trascorsa la pausa. Capite bene che se oltre al motori avete collegati sensori, pannelli LCD o altro, vi ritrovate con la scheda ferma anche per diversi secondi durante l’avanzamento del motore il che è una cosa da evitare.

Un codice buono:

int DIR = 2;
int CLK = 3;
int EN = 4;

boolean motorStatus = false;
unsigned long onDuration = 100;
unsigned long offDuration = 100;
unsigned long NextToggle = micros() + offDuration;
 
void setup() {
	pinMode(DIR, OUTPUT);
	pinMode(CLK, OUTPUT);
	pinMode(EN, OUTPUT);
} 
void loop()
{
	digitalWrite(EN,HIGH);
	digitalWrite(DIR,HIGH);
    delay(50);
	for ( int i=0; i<200; i++) 
	{ 
          if (micros() > NextToggle) 
          {
		stepGo(CLK);
          }
	}
	digitalWrite(DIR,LOW);
	
        for ( int i=0; i<200; i++) 
        {
	  if (micros() > NextToggle) 
          {
		stepGo(CLK);
          }
        }
	digitalWrite(EN,LOW);	
}
 
void stepGo(int CLK){
motorStatus = !motorStatus;
digitalWrite(CLK,motorStatus);
if (motorStatus)
{
NextToggle = micros() + onDuration;
}
else
{
NextToggle = micros() + offDuration;
}
}

Rispetto al precedente ho aggiunto qualche variabile:

boolean motorStatus = false;
unsigned long onDuration = 100;
unsigned long offDuration = 100;
unsigned long NextToggle = micros() + offDuration;

micros() restituisce il valore in microsecondi del tempo trascorso dall’accensione della scheda Arduino.

All’interno dei cicli for è comparso:

if (micros() > NextToggle)

mentre la funzione è cambiata in:

void stepGo(int CLK){
motorStatus = !motorStatus;
digitalWrite(CLK,motorStatus);
if (motorStatus)
{
NextToggle = micros() + onDuration;
}
else
{
NextToggle = micros() + offDuration;
}
}

Il principio di funzionamento è abbastanza semplice. Viene salvato nella variabile NextToggle il tempo trascorso dall’accensione della scheda più un valore definito. Ad ogni ciclo di loop il valore restituito da micros() ovviamente aumenta, finché non diventa maggiore di NextToggle, attivando la chiamata alla funzione.

In void stepGo la prima operazione eseguita è un cambio di livello logico rispetto al precedente (ricordate la sequenza alto-basso necessaria per l’avanzamento?), e si ha la scrittura di questo nel pin di CLK (digitalWrite(CLK,motorStatus;). L’if serve solo a poter definire un tempo differente tra il livello logico alto ed il livello logico basso, andando comunque ad implementare il valore di NextToggle. Quindi la funzione si risolve e si torna in loop dove reinizia il ciclo.

Con questo codice riusciamo a definire un tempo per il livello logico alto e per quello basso, senza dover utilizzare il delay().

Il codice migliore:

il controllo dei motori passo è una delle cose più interessanti da fare con Arduino e quindi non è tardato molto prima che qualcuno scrivesse una libreria dedicata, che si chiama Stepper e la troviamo tra gli esempi.

#include <Stepper.h>

int DIR = 2;
int CLK = 3;
int EN = 4;
int steps = 1;
int velocita = 1500;
 
 Stepper stepGo(steps, DIR, CLK);
 
void setup() {
	pinMode(DIR, OUTPUT);
	pinMode(CLK, OUTPUT);
	pinMode(EN, OUTPUT);
} 
void loop()
{
	digitalWrite(EN,HIGH);
	digitalWrite(DIR,HIGH);
        stepGo.setSpeed(velocita);
        delay(50);
	for ( int i=0; i<200; i++) 
	{ 
        stepGo.step(steps);
	}
	digitalWrite(DIR,LOW);
	
        steps=-1;
        for ( int i=0; i<200; i++) 
        {
       stepGo.step(steps);
        }
	digitalWrite(EN,LOW);	
}

questa libreria ha diverse modalità di funzionamento, io analizzo quello concorde agli esempi precedenti:

Stepper stepGo(steps, DIR, CLK);

abbiamo definito la funzione stepGo, che riceve 3 input:

  1. il numero di passi che deve fare ogni volta che viene chiamata;
  2. il pin su cui è collegato il Dir del nostro driver;
  3. il pin su cui è collegato il CLK del nostro driver.

Si imposta la velocità:

 stepGo.setSpeed(velocita);

Quindi ogni qualvolta viene richiamata la funzione, viene fatto avanzare il motore di un numero definito di passi:

stepGo.step(steps);

Per poter far andare il motore in senso inverso basta definire un numero di passi negativo:

steps=-1;

Rispetto ai codici analizzati prima, questa libreria è decisamente più versatile e sopratutto si possono controllare più motori con la stessa funzione, inserendo semplicemente tre parametri.

Questa è una piccola introduzione al controllo dei motori passo a passo; ci sono ancora parecchie cose da apprendere, come l’accelerazione (non si può pretendere che il motore parta fin da subito alla velocità massima) o il controllo in retroazione per il conteggio dei giri.

Il micropasso:

fino ad ora abbiamo ipotizzato di alimentare le fasi una alla volta in sequenza, però se noi alimentassimo contemporaneamente due fasi, l’asse del motore di metterebbe in una posizione intermedia. In questo modo con la sequenza di alimentazione A, A-B, B, abbiamo raddoppiato il numero di passi necessari al motore per fare un giro completo. Questa configurazione si chiama Half-Step

Se inoltre iniziassimo ad alimentare la fase A con frazioni di corrente della fase B, aumenteremo ancora il numero di fasi, da qui controllo in micropasso. Per questo motivo i motori passo a passo stanno avendo un enorme diffusione, perché con un opportuna elettronica si aumenta la precisione di spostamento, mantenendo (più o meno) la coppia erogata, senza riduttori meccanici.Ovviamente per micropassi elevati, servono notevoli capacità di calcolo e frequenze di lavoro.

 

VN:F [1.9.22_1171]
Rating: 9.9/10 (20 votes cast)
VN:F [1.9.22_1171]
Rating: +11 (from 17 votes)

Adron Technology Gezapp: Drone + Stampa 3D + lotta biologica alla Piralide

Adron Technology è un azienda di Udine che ha sviluppato uno dei primi droni “contadini”: hanno dotato il velivolo di un dispenser che rilascia sul terreno a coordinate ben precise e preimpostate (il tutto controllato da GPS), delle capsule di cellulosa contenenti uova di Trichogramma, insetto che stermina la Piralide secondo il principio della lotta biologica.drone-3

Per sviluppare il progetto, come oramai è consuetudine per chi fa ricerca, si sono dotati di una stampante 3D, con la quale hanno potuto realizzare tutti i prototipi di studio e di test. Oltre ad abbattere i tempi di prototipazione ed i costi, grazie alle geometrie realizzabili con le stampanti 3D, sono riusciti a ridurre di molto i pesi, consentendo una maggior autonomia di volo.

Sono state anche sviluppate delle soluzioni che permettono il monitoraggio delle coltivazioni tramite l’equipaggiamento di specifici sensori. Attualmente stanno partecipando al Premio “UpStart Paolo Traci”, e per chi volesse dare il proprio contributo tramite un voto, basta cliccare il seguente link.

 

VN:F [1.9.22_1171]
Rating: 8.4/10 (8 votes cast)
VN:F [1.9.22_1171]
Rating: +2 (from 2 votes)

Zortrax M200, la stampante per le PMI

La Zortrax M200 è una stampante a tecnologia FDM di produzione polacca che sta rapidamente conquistando le scene nel panorama della prototipazione 3D; ho avuto la possibilità di usarla e testarla negli ultimi tre mesi potendone valutare potenzialità e limiti.

IMBALLAGGIO

La macchina arriva in un ottimo imballaggio fatto su misura; appena aperto si trovano subito le istruzioni per estrarla senza danni dalla scatola, e già qui si denota una certa cura nel dettaglio. Tutte le componenti e i meccanismi sono bloccati ed hanno la propria sede; nel pacco troviamo anche una bobina di Z-ABS ed uno starter-kit con tutto il necessario per iniziare a stampare (spatola, bisturi, taglierino, pinze, tronchesine, etc.).

StarterKit Zortrax

PRIMA IMPRESSIONE

Lo chassis in alluminio nero ha un design elegante ed essenziale e fin da subito da un idea di robustezza; sul frontale in basso a destra c’è un minimale pannello LCD con encoder per il controllo della stampante, mentre sul retro ci sono i fori per l’innesto del porta bobina e del relativo tubicino convogliatore all’estrusore.

Zortrax

LA MECCANICA

L’idea generale è di robustezza e precisione; la movimentazione dell’asse Z è affidata ad una barra a ricircolo di sfere, mentre la base d’appoggio del piano di stampa è composta da una solida struttura in alluminio che scorre tramite 4 manicotti a ricircolo su barre rettificate da 12mm.

Gli assi X e Y sono composti da due guide lineari (generalmente in commercio si trova una guida per asse) con conseguente diminuzione dei momenti torcenti del gruppo estrusore e delle vibrazioni alle alte velocità. Nel complesso ci sono 8 barre rettificate con doppi cuscinetti per asse di movimento; il che la rende una tra le stampanti più solide per la fascia di prezzo su cui si colloca.

Gli azionamenti sono affidati a cinghie Gates GT2, che scorrono su pulegge in alluminio opportunamente fissate al telaio.

La stampante è dotata di un unico estrusore.

Meccanica zortrax

IL PIANO DI STAMPA

Questo elemento merita un approfondimento a parte; innanzitutto il fissaggio alla base avviene tramite dei comodi magneti ed i collegamenti elettrici sono con dei pratici molex non invertibili. La regolazione della bolla avviene tramite tre viti con molla (due posteriori ed una anteriore), ma per ovviare ai classici movimenti oscillatori del piano a cui siamo abituati, gli ingegneri Zortax hanno inserito 4 punti guida, che impediscono traslazioni, specialmente durante la fase di stampa.

Il piano è scaldato e microforato; quest’ultimo elemento all’inizio mi aveva lasciato parecchio perplesso (specialmente conoscendo i risultati di stampanti che usavano la stessa soluzione), dato che implica l’utilizzo del raft con conseguente rischio di imperfezioni sul modello se non addirittura rotture nella fase di rimozione. Naturalmente questa soluzione evita di trasformare la nostra officina/ufficio in un salone parrucchiera, oppure di andare alla ricerca dell’introvabile e costoso kapton o bluetape.

LIVELLAMENTO DEL PIANO

La macchina prevede un sistema di calibrazione elettronico semi-automatico; dal pannello LCD si avvia l’autocalibrazione e non appena scaldati piano ed estrusore, provvede a rilevare le quote dei quattro angoli, comunicando all’operatore se avvitare o svitare una delle tre viti di regolazione. Per una corretta calibrazione ci si impiega anche un quarto d’ora, ma questo tempo sarà ricompensato in seguito da stampe perfette e che non si staccano. Quindi si possono mandare in soffitta spessimetri e fogli di carta vari. Grazie alla struttura estremamente robusta, nell’arco di due mesi di lavoro intensivo, solo in un occasione ho dovuto rifare la calibrazione.

SOFTWARE

Si chiama Z-SUITE ed un software proprietario; definirlo essenziale è riduttivo: per me è stato uno shock non avere a disposizione tutti quei parametri che di solito su Cura o Slic3r imposto. Memore di software altrettanto essenziali, non mi attendevo una elevata qualità di stampa. Fondamentalmente ho sei parametri nel pannello base: altezza layer (minimo 90 micron), materiale (lista di quella fornita dal produttore), infill, supporti e controllo velocità ventole; nel pannello “advanced” posso eventualmente compensare la dimensione dei fori e dei perimetri esterni, oltre che a variare il numero di layer di top e bottom.

Caricato il nostro :STL, possiamo procedere con le classiche modifiche come rotazione, scala, e sposta; una volta ultimato lo slicing ci viene data un anteprima grafica del G-Code. Possiamo visualizzare il codice layer per layer (come su repetier) e inserire ove necessario della pause-stampa, che verranno visualizzare graficamente con una colorazione rossa (utili ad esempio per inserire componenti nel modello, oppure cambiare filo) Il G-Code lo si salva nella classica SD che poi si inserisce nella macchina: non c’è  un controllo diretto da computer, ma è previsto in futuro l’implementazione del wifi per l’invio dei file e lo start di stampa.

FILAMENTO

La Zortrax lavora principalmente ABS che viene fornito dall’azienda produttrice; già questa limitazione mi aveva messo in agitazione. Questo materiale è la bestia nera delle stampanti semiprofessionali che non hanno la camera a temperatura controllata (sebbene si possano acquistare a parte delle paratie laterali anti-vento); già temevo warping, distaccamenti dal piano di stampa e delaminazioni.

Ed invece tutto questo, con mia incredulità non è successo! Infatti la combinazione di piano scaldato e microforatura crea un impressionante aderenza del modello in fase di realizzazione. Ovviamente ci si aspetta poi di doversi dotare di scalpello per rimuovere l’oggetto dal piano e successivamente il raft, ma anche qui con mia meraviglia, una volta raffreddato, tutto si stacca senza problemi e senza lasciare residui sia sul piano che sul modello.

Siccome non ci sono encoder nelle bobine, ho fatto anche dei test con ABS “non proprietari” e con i materiali “FiloAlfa” mi sono trovato decisamente bene, oltre ad avere una rifinitura superficiale dei pezzi, leggermente migliore rispetto allo Z-ABS.

MA ALLA FINE COME STAMPA?

Una meraviglia! All’inizio ero pieno di pregiudizi (piano forato, ABS, software proprietario, etc), ma mi sono rapidamente ricreduto.
Si vede subito che la stampante è stata ingegnerizzata da mani esperte ed è sicuramente decisivo l’utilizzo di un software ottimizzato per quella specifica meccanica; le geometrie del raft permettano una perfetta adesione durante la lavorazione, ma anche una semplice rimozione poi. I supporti generati sono funzionali e semplici da rimuovere; purtroppo con piani ad angolature molto elevate (70-80 gradi) la stampa non è perfetta, ma sui piani paralleli al piano di stampa (90 gradi), la lavorazione risulta liscia e priva di imperfezioni.
Ho provato a stampare modelli anche estremamente complessi, come arcate dentarie, scheletrati ed anelli, ed ho ottenuto dei risultati buoni per dei modelli valutativi; ho fatto anche delle prove di accoppiamento ed i componenti scorrevano perfettamente senza bisogno di carta vetrata e smussature varie.

CONCLUSIONI

È la stampante ideale per la PMI, ma anche per la grande industria; i costi contenuti, la facilità reperibilità del materiale di consumo, il software intuitivo e sopratutto l’elevata qualità del prodotto finito la rendono il macchinario ideale per chi non vuole avere problemi nel realizzare i propri prototipi o anche delle piccole-medie serie.

Al momento è una delle migliori stampanti con cui abbia mai lavorato ed in molti casi gli oggetti stampati hanno una rifinitura superficiale uguale, se non addirittura migliore, degli analoghi realizzati con macchinari professionali.

Rivenditore Italiano

20150526_104635Cricchetto

VN:F [1.9.22_1171]
Rating: 9.2/10 (6 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 3 votes)

Slic3r 1.2.5 experimental is out!

Il nostro instancabile Alessandro ha appena rilasciato la versione 1.2.5 di Slic3r!

Moltissime le novità tra le quali la possibilità di ruotare i pezzi lungo tutti gli assi, un anteprima 3d fighissima degli STL e molto altro ancora! Grazie Ale!

VN:F [1.9.22_1171]
Rating: 8.6/10 (9 votes cast)
VN:F [1.9.22_1171]
Rating: +2 (from 4 votes)