Utente:Sashett/Motore
Motore DC regolabile tramite potenziometro
[modifica]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 progetto
[modifica]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 elettrico
[modifica]lo schema elettrico del circuito effettuato è il seguente.
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 montaggio
[modifica]Codice
[modifica]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.
Conclusioni
[modifica]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.