Controllare un carico tramite un MOSFET

In questo tutorial imparerai come controllare un dispositivo che richiede molta potenza attraverso un PIN digitale di Arduino.

Fino a questo punto, gli attuatori che abbiamo collegato ad Arduino erano dispositivi che non avevano esigenze significative in termini di potenza.

La potenza è una grandezza che si misura in Watt e misura la quantità di energia trasferita o di lavoro svolto in un certo tempo.

Nei dispositivi elettrici, la potenza può essere calcolata moltiplicando la tensione applicata al dispositivo (misurata in Volt) per la corrente che lo attraversa (misurata in Ampere).

Un semplice LED, ad esempio, quando viene alimentato a 5 Volt (ovviamente tramite una resistenza di valore opportuno), è percorso da una corrente di 10/20 milliampere, per cui la sua potenza è di circa 50/100 milliwatt.

Anche il mini display OLED che hai sperimentato in questo corso funziona con potenze di alcune decine di milliwatt.

Il motore micro servo 9g che hai visto nei precedenti tutorial assorbe una potenza di 100/200 milliwatt.

In tutti questi casi, la corrente assorbita era sempre al di sotto dei 50 milliampere, che possiamo considerare come valore massimo della corrente erogabile da un PIN Arduino.

Al contrario, un semplice motore DC, di quelli usati nel modellismo per muovere automodelli radiocomandati o le eliche dei droni, richiede una potenza di alcuni watt.

Questo vuol dire che la corrente che alimenta questi dispositivi supera il limite di 50 milliampere ritenuto sicuro per un PIN di un microcontrollore e quindi non possiamo più utilizzare Arduino come sorgente di alimentazione.

Ricorda sempre che i PIN di un microcontrollore, e quindi i PIN di Arduino, non sono fatti per fornire corrente ma sono progettati per fornire semplicemente informazioni, sotto forma di valori di tensione.

Se hai la necessità di alimentare un dispositivo che richiede energia, e quindi corrente, in modo significativo, devi realizzare un apposito circuito di alimentazione, connesso ad una fonte di energia adeguata, ad esempio una pila al Litio o un trasformatore adattatore AC/DC da rete elettrica domestica.

Arduino funziona a 5 Volt, mentre dispositivi attuatori di potenza possono anche richiedere di essere alimentati con tensioni superiori, di 12 o 24 Volt, oltre a richiedere correnti di valori pari a qualche Ampere.

Un dispositivo che richiede correnti significative, viene spesso definito con il termine “carico“.

In questo tutorial ti mostreremo una semplice soluzione, adeguata ad alimentare carichi che richiedono tensioni entro i 30 Volt e correnti di qualche Ampere.

Al di sopra di questi valori si entra nel campo dell’elettrotecnica e devono essere adottate soluzioni diverse, di tipo industriale, nel rispetto di norme di sicurezza adeguate.

La soluzione che presentiamo fa uso di un componente elettronico molto comune, chiamato Transistor MOSFET.

Nel video che segue viene mostrato un MOSFET IRL540N, si tratta di un componente facilmente acquistabile su Internet e spesso incluso nei Kit Arduino.

È possibile replicare l’esperimento mostrato in questo tutorial utilizzando un qualunque altro “MOSFET a canale N“, con l’accortezza di verificare, caso per caso, qual’è il PINOUT del componente, poiché la posizione dei terminali Gate, Source e Drain non è sempre la stessa e varia in base al componente.

Il motore da modellismo utilizzato nel video come esempio di carico è uno dei prodotti più comuni facilmente reperibili in commercio. Al suo posto puoi utilizzare un qualunque altro motore DC da modellismo.

Motore da Modellismo usato nel video
Motore DC generico


Lo schema del circuito, è raffigurato nell’immagine che segue. Tale schema è valido per un MOSFET IRL540N, in caso tu abbia sotto mano un differente MOSFET, fai bene attenzione all’identificazione dei terminali G, S, e D che potrebbero essere disposti in un ordine differente.

Il codice sorgente dello sketch mostrato nel video è riportato di seguito.

// Parametrizzo il PIN di controllo
#define CTR_PIN 8

void setup() {
  // Inizializzo la comunicazione seriale
  Serial.begin(9600);

  // Configuro il PIN di controllo
  // e lo pongo in stato LOW
  pinMode(CTR_PIN, OUTPUT);
  digitalWrite(CTR_PIN,LOW);

  // Stampo un messaggio di informazioni
  Serial.println("Digita 'go' oppure 'stop' e premi INVIO...");

}

void loop() {
  // Verifico se è stato inviato un comando
  // e in caso positivo lo interpreto ed eseguo
  if (Serial.available()) {
    String comando = Serial.readString();
    Serial.print("Ricevuto: ");
    Serial.print(comando);
    if (comando == "gon") {
      Serial.println("Attivo il motore!");
      digitalWrite(CTR_PIN, HIGH);
      return;
    }
    if (comando == "stopn"){
      Serial.println("Fermo il motore!");
      digitalWrite(CTR_PIN, LOW);
      return;
    }
    Serial.println("Comando sconosciuto!");
  }

}

Dovresti essere in grado di interpretare il codice senza problemi, poiché hai già incontrato tutte le istruzioni utilizzate.

L’unico elemento degno di nota è l’utilizzo della Classe String per l’oggetto “comando”, che rende semplice la gestione e l’interpretazione dei comandi inviati tramite il terminale seriale, ma anche questo è uno chema che hai già visto.

Ricorda, che quando si usa il terminale dall’IDE Arduino, l’ultimo carattere inviato è sempre un “newline”, carattere indicato con ‘n’, per questo motivo la stringa di comparazione dei comandi comprende il newline.