Utente:Sashett/Motore

Motore DC regolabile tramite potenziometroModifica

Il progetto che segue è pensato per la realizzazione di una ventola, realizzata con un motore DC controllato da un transistor, in grado di azionarsi tramite un pulsante e regolabile attraverso un potenziometro.

Descrizione del progettoModifica

Il sistema è composto da:

  • Motore DC, che ruotando fa girare una ventola;
  • Transistor NPN, che svolge la funzione di un interruttore;
  • Pulsante, che aziona o ferma il motore;
  • Potenziometro, che regola la velocità del motore DC.

Schema elettricoModifica

lo schema elettrico del circuito effettuato è il seguente.

 
schema elettrico

Alla scheda di Arduino vengono collegati i componenti utilizzando sia i pin analogici, per il potenziometro, sia i pin pwm, per il motore DC

Schema di montaggioModifica

 

CodiceModifica

Per la realizzazione del progetto è stato utilizzato il seguente codice:

int pinMotore = 3;
int pinPulsante = 4;
int pinPotenziometro = A0;
int bootTime = 300;

Definisco le variabili e i pin dei componenti, più il boot time, ossia la velocità massima del motore alla sua accensione, indipendentemente dal potenziometro.

bool enabled = false;
int lastEnableValue = LOW;
unsigned long startTime = 0;

Creo delle variabili per la lettura dello stato del pulsante, e utilizziamo "unsigned long" per memorizzare il tempo in cui il motore è rimasto acceso.

int velocitàMotore = map(analogRead(pinPotenziometro), 0, 1023, 70, 255);
int enableValue = digitalRead(pinPulsante);

La velocità del motore viene impostata attraverso la lettura del potenziometro. I pin però restutiscono un valore da 0 a 1023, non compatibili con i pin pwm (da 0 a 255) quindi attraverso la funzione map effettuo una conversione proporzionale (70 è il valore minimo sotto il quale il motore smette di girare).

void setup(){
  pinMode(pinMotore, OUTPUT);
  pinMode(pinPulsante, INPUT);
}

void loop(){
  
  if(enableValue != lastEnableValue && enableValue == HIGH){
    if(!enabled){
      startTime = millis();
    }
    enabled = !enabled;
  }

Leggo il valore del pulsante, se esso è cambiato ed è uguale a HIGH, impostiamo il tempo attuale nella variabile startTime

  lastEnableValue = enableValue;

  if(enabled){
    if((millis()-startTime) > bootTime){
      analogWrite(pinMotore, velocitàMotore);
    }else{
      analogWrite(pinMotore, 255);
    }
  }else{
    analogWrite(pinMotore, 0);
  }
  delay(50);
}

Dopo aver aggiornato la variabile che verrà utilizzata nella if successiva, se il motore era acceso, dopo il tempo di accensione, viene letto il valore del potenziometro e si imposta la velocità del motore. Se siamo ancora nella fase inziale impostiamo il valore a 255 indipendentemente dal potenziometro. Se invece viene premuto il pulsante di nuovo impostiamo la velocità a 0.

ConclusioniModifica

In conclusione, la realizzazione di questo circuito permette, grazie ad un pulsante, l'accensione e lo spegnimento del motore DC; la velocità del motore DC è regolata da un potenziometro, realizzando così una ventola.

Progetto è stato realizzato da Daniel Gostoli e Sasha Fasolo Massoli.