Provo a dire anch'io la mia (sul circuito, non sul perché lo stesso non funzioni all'OP)...
Concordo con la filosofia di usare un bipolare per questo utilizzo. Quando le tensioni di pilotaggio sono basse, così come le correnti, e non servono particolari caratteristiche di commutazione, un BJT funziona generalmente meglio di un MOSFET.
Sui calcoli che ho visto riguardo alla polarizzazione del BJT, c'è un fattore che non è stato considerato: il guadagno pubblicato nei datasheet si riferisce ai piccoli segnali, non a zone di lavoro vicine alla saturazione. Se si vuole mandare un transistor bipolare in saturazione certa, è necessario fornire il doppio, o almeno una volta e mezza la corrente calcolata basandosi sul guadagno.
La resistenza B-E non sarebbe necessaria in un BJT pilotato da un'uscita push-pull come quelle di un microcontrollore, ma non bisogna dimenticare che all'accensione e allo spegnimento, le uscite non sono sempre forzanti e avere una base flottante in un ambiente come quello di un controller CNC non è una bella cosa, quindi io voto per lasciarla.
Nel caso si voglia utilizzare un MOSFET, le resistenze ci vanno tutte due, quella G-S, per lo stesso motivo di quella B-E del BJT, accentuato dal fatto che se una base flottante è pericolosa, un gate flottante è un problema certo a causa dell'impedenza di ingresso praticamente infinita. La resistenza in serie al gate, invece, non deve essere da un kohm, ma da qualche decina di ohm, ed è altrettanto indispensabile, ma per motivi diversi da quelli descritti nei post precedenti.
Se è vero che un MOSFET ha un ingresso con una capacità non trascurabile, questa non è causa di problemi per il microcontrollore che lo pilota: la corrente impulsiva che si viene ad instaurare non è in grado di danneggiarlo perché di breve durata, e il ground-bouncing è minimo perché il rapporto tra la capacità di gate e quella di disaccoppiamento del microcontrollore è molto piccola (sempre che il condensatore di disaccoppiamento ci sia...
).
Ciò che la capacità di gate può invece combinare è molto più subdolo e ha a che vedere con l'induttanza del collegamento tra il microcontrollore e il MOSFET (e il ritorno pure, che non va dimenticato). Questa induttanza non è trascurabile e si trova ad essere in serie alla capacità di gate e al generatore rappresentato dall'uscita del microcontrollore, in questo quadro, assimilabile ad un generatore ideale. Bene, abbiamo un circuito LC serie, pilotato con un gradino: un bellissimo oscillatore.
La resistenza da qualche decina di ohm in serie al gate serve per trasformare quel circuito LC in un circuito RLC e di conseguenza trasformare l'oscillazione in un'oscillazione smorzata. Con un centinaio di ohm su MOSFET così piccoli come quelli di cui si sta parlando, si riesce ad eliminare completamente l'oscillazione ed avere solo un transitorio con sovraelongazione.
Per il diodo di ricircolo, va bene qualsiasi cosa? La risposta è... nì. Qualsiasi diodo risolve il problema, ma non sono tutti equivalenti. Serve un diodo che abbia una tensione inversa superiore a quella di alimentazione (e qualsiasi diodo va effettivamente bene per 5 V di alimentazione). Deve supportare una corrente impulsiva pari a quella di funzionamento del relè. Impulsiva, si noti bene. Anche in questo caso, praticamente qualsiasi diodo regge 500 mA impulsivi (giusto per rendere l'idea, un 1N4148 regge 150 mA continui, ma ben 2 A impulsivi).
Come sceglierlo, allora? Lo scegliamo con ridotta capacità in polarizzazione inversa (per ridurre effetti oscillatori con l'induttanza della bobina alla quale è posto in parallelo) e quindi lo scegliamo piccolo (non uno della serie 1N4000 che sono inutilmente grandi e con capacità eccessiva). Poi lo scegliamo veloce, per farlo intervenire il più presto possibile e ridurre la sovratensione che si forma nel periodo in cui il diodo sta per entrare in conduzione. Anche in questo caso, un diodo piccolo lavora meglio di uno grande. In definitiva il piccolo 1N4148 è il candidato migliore per questa funzione.
Vogliamo fare gli "sboroni"? In questo caso, in serie al diodo ci mettiamo una piccola resistenza, una che con la corrente del relè generi una caduta che sia la metà della massima tensione del transistor (30 V / 500 mA = 60 ohm, che fissiamo a 56 ohm). Questa resistenza migliora enormemente il comportamento dinamico del sistema, elimina le oscillazioni e riduce il tempo di apertura del relè a un quarto del caso in cui la resistenza non fosse presente.
Adesso qualcuno si domanda (ovviamente) perché sia importante ridurre il tempo di apertura. Basti dire che la vita di un relè dipende in modo fondamentale da questo parametro e che la vita indicata nei datasheet dei relè si riferisce a pilotaggi senza il diodo di ricircolo. Con il diodo di ricircolo, la vita può ridursi ad un decimo di quella indicata; con il resistore in serie al diodo, possiamo considerarla solo dimezzata, con un "guadagno" di 1 a 5...