Friday, March 20, 2015

tutorial Arduino - Motore DC comandato da pulsante con LED di segnalazione

Ecco una applicazione base per il pilotaggio di un piccolo motore in corrente continua DC con alimentazione indipendente.
utilizza i comandi digitalRead e digitalWrite.

DigitalRead permette di leggere un segnale ed assegnargli 2 stati (HIGH o LOW); in questo caso il segnale proviene da un pulsante.

DigitalWrite invece "scrive" in uscita il segnale che è stato letto, sempre considerando i due livelli alto e basso; in questo caso il segnale di uscita è collegato al Gate del transistor, cioè il piedino che permette di "aprire" il canale tra Source e Drain, quindi di far funzionare il motore che vi è collegato.





Il pilotaggio avviene attraverso un transistor MOSFET IRF520(datasheet), che è un transistor di potenza specifico per modellini e piccoli motori.

Il motore si avvia premendo il pulsante, i LED visualizzano lo stato (rosso = off, verde = on).




Lo schema circuitale è il seguente






Qui trovate lo sketch:

// comando di un motore in DC tramite transistor IRF520

const int switchPin = 2; // piedino pulsante
const int motorPin = 9; // piedino motore (collegato al gate del transistor
const int greenLed = 3; // piedino LED verde
const int redLed = 4; // piedino LED rosso



int switchState = 0; // definisco una variabile per lo stato del pulsante e la inizializzo a zero
void setup(){
  pinMode(motorPin, OUTPUT); // imposto il pin del motore come uscita
  pinMode(switchPin, INPUT); // imposto il pin del pulsante come ingresso
  pinMode(greenLed, OUTPUT); // imposto il pin del LED verde come uscita
  pinMode(redLed, OUTPUT); // imposto il pin del LED rosso come uscita

  
  
}
void loop(){
  switchState = digitalRead(switchPin); // imposta lo stato di SwitchState uguale a quello letto sul piedino del pulsante
  if (switchState == HIGH) {
    digitalWrite(motorPin, HIGH);
    digitalWrite(greenLed, HIGH);
    digitalWrite(redLed, LOW);

  }
  else {
    digitalWrite(motorPin, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(redLed, HIGH);
  }
}

Post a Comment