Arduino e interferenze??

Ciao a tutti.
Come capirete dal titolo del Topic stò riscontrando dei strani problemi con l'Arduino UNO.
Tutto è cominciato volendo provare a comandare un motorino 12V DC tramite un MOSFET comandato dal pwm dell'arduino.
Più precisamente il progetto spiegato a questo link:
http://scuola.arduino.cc/it/content/lalfabeto-arduino-6-controlla-carichi-piu-importanti-mosfet
Il progettino include anche l'idea di regolare il numero di giri a piacere, i quali vengono letti da una coppia LED infrarosso/fototransistor tra i quali passa una maschera forata.
Fin qui nessun problema, nel senso che fin che faccio girare il motorino a bassi rigimi (tipo pwm settato a 50) funziona tutto alla perfezione: riesco a leggere da seriale il numero di giri del motore etc etc.
Il problema giunge quando provo ad inviare più potenza al motore aumentando il duty-cicle del pwm.
A questo punto l'arduino impazzisce..nel senso che perdo la connessione alla porta seriale e finchè non lo stacco dall'usb, chiudo l'IDE, riattacco l'usb e riapro l'IDE non riesco a ristabilire la comunicazione, e l'IDE mi dice che "La porta seriale 'COM3' è già in uso. Provate a chiudere i programmi che potrebbero usarla." anche se ovviamente non c'è nessuno che la stà utilizzando.
A questo punto ho cercato di semplificare il circuito per tentare di capire a cosa sia dovuto:
ho staccato tutta la parte di comando del motore tramite MOSFET pwm etc etc ed ho lasciato solo semplicemente il sistema per misurare la velocità di rotazione, ma ancora appena do alimentazione al motorino (attacando a mano i fili ad un alimentatore 12V a corrente continua) si ripresenta il problema suddetto...quindi mi è venuto il forte sospetto che sia una questone di interferenze elettromagnatiche...
Ho provato anche allontanando di circa un metro la sospetta sorgente di interferenze EM (il motorino a questo punto) allungando i cavi che alimentano il LED IR e il fototransistor ma idem, se alimento il motorino con una batteria a 9v funziona, appena gli attacco i 12V basta, fine delle comunicazioni...
Voi avete un'idea? Qualche consiglio su ulteriori prove da fare?
Vi ringrazio!
Ciao!

e diffile capire cosa cosa intendi per interferenze elettromagnetiche,

quasi sicuramente hai sbagiato qualcosa tu nel codice, oppure hai un alimentatore talmente schifoso che manda/riceve talmente tanti disturbi

le cose potrebbero essere svariate anche un loop di massa tra i vari componenti

Monta dei condensatori proprio sul motore e uno tra VCC e GND vicino al motore, avvolgi i fili di alimentazione (rendili twisted)
Sei su breadboard?

Ciao

hai misurato la tensione dell'alimentatore che usi per vedere se si siede ?
potrebbe essere che l'alimentatore e' sottodimensionato

Allora..
innanzi tutto grazie mille delle risposte.
ci sono delle novità: ho cambiato motorino con uno più serio (è un motorino a 12V DC della ventola di un'automobile) perchè mi son accrotto che l'altro sfiammava di brutto (se al buoio si guardava il retro del motore in rotazione si vedeva blu...spazzole andate presumo).
All'inizio credevo di aver risolto nel senso che per provare ho tolto dalla breadboard tutto il circuito di comando con mosfet, e quando mi avicinavo all'Arduino (che è montato a fianco della breadboard) con il motore attaccato all'alimentatore con il motore precedente subito saltava la seriale, mentre con questo tutto fila liscio...
Allora ho rimesso sulla breadboard il Mosfet IRF520, diodo di protezione etc etc, ed ora il comportamento è il contrario!!!
Nel senso che se setto il pwm a 255 tutto fila liscio mentre appena lo abbasso anche solo a 254 perdo la connessione...
Ho provato ad avolgere il cavo di alimentazione del motore ma non cambia nulla.
L'alimentatore (12V 2A) non credo sia un problema perchè attaccandolo direttamente al motore lo riesce a far partire bene ed ha anche un bella coppia.
Problema di codice non credo possa essere perchè sto facendo girare un codice prova che semplicemente mi manda sulla seraile dei byte per capire quando perdo la comunicazione (per ora ho abbandonato il progetto iniziale di contagiri etc etc).
Questo è il codice:

int motorPin=9;
/////LED/////
int redPin=4;
int greenPin=3;

///////////////////////////SETUP///////////////////////
void setup()
{
  pinMode(redPin,OUTPUT);
  pinMode(greenPin,OUTPUT);
  pinMode(motorPin,OUTPUT); 
  Serial.begin(9600);
  analogWrite(motorPin,255);
}
///////////////////////////LOOP///////////////////////
void loop()
{
 Serial.println(millis());
 delay(100);
}

Per provare invece che il motore ho anche attaccato al Mosfet una lampadina ad incandescenza di quelle delle posizioni (dei fari intendo) ed in questo caso nessun problema...riesco a settare il pwm a piacere senza perdere la connessione.
A stò punto il fatto è che il motore rischiedendo più corrente, e quando il duty cicle non è pari a 100% e che quindi ci sono delle variazioni di corrente, nascono i casini...
Stò sclerando!!!!! Non è possibile che non riesca a far andare una cosa così...
Se volessi provare a mettere un condensatore attaccato al motore in parallelo da quando lo devo mettere?
Grazie dell'aiuto!

Mi viene il dubbio che tu abbia collegato l'alimentatore a 12V 1A all'ingresso di Arduino e con lo stesso alimentatore alimenti anche il motore.

Prova ad alimentare Arduino tramite la sola USB del PC ed il motore con l'alimentatore.

Un motore per la ventola credo consumi qualcosa come un paio di ampere se non di più, quindi l'alimentatore sarebbe insufficiente.

Comunque, lo spunto potrebbe portare la tensione di 12V a valori molto più bassi

Visto il carico in gioco, metti in parallelo all'uscita dell'alimentatore un condensatore elettrolitico da 4000 uF (o più) per ridurre questi effetti.

Ettore Massimo Albani

No...non stò alimentando arduino con lo stesso alimentatore con cui alimento il motore ma lo alimento dall'USB...anche perchè se così fosse i problemi sarebbero quando setto il pwm a 255 (piena potenza e quindi possibilità di tensione che si abbassa) e non se setto il dutycicle minore al 100%..
Purtoppo ora in casa non ho un condensatore così grosso...me lo devo procurare..

Ciao, io ho avuto e ho tuttora un problema simile: praticamente utilizzando arduino per regolare l'anticipo della scintilla in un motore 2 tempi mi è venuto in mente quale può essere il tuo problema.
Si tratta delle scintille provocate dalle spazzole del motorino: seppur minime queste emettono segnale a frequenze molto elevate e la comunicazione seriale tramite usb è molto suscettibile e ancor di più arduino.
I consigli che ti do sono 3:

  1. prova a cambiare il cavo usb mettendone uno schermato: quelli con la treccia o calza che racchiude i fili.
  2. prova a cambiare motorino usando un brushless
  3. prova a chiudere arduino in una scatola metallica mettendo poi la scatola a massa dell'arduino: se non hai tale scatola prendi una scatola di cartone e rivestila di nastro d'alluminio e poi collega un filo a massa e al nastro che hai incollato. ovviamente devi comunque collegare arduino al pc con un cavo usb schermato.

Facci sapere