Far girare un motore

modifica

Questo progetto permette a un motore DC di girare in 2 sensi grazie all'utilizzo di un ponte H.

Descrizione del progetto

modifica

il sistema è così composto:

In uscita si hanno 3 pin il 7, 8, e il 9:

  • I pin 7 e 8 servono per dare energia al motore e farlo girare nei 2 sensi, che dipende da che cavo viene messo come "HIGH" e come "LOW";

(immagine high low)

  • Il pin 9 invece serve a comandare la velocità a cui gira il motore;

Questi pin sono collegati ad un ponte H alla quale poi collegherò il motore che (rispetto al codice fatto da me) girerà per 1,8 secondi in un senso, starà un secondo fermo e girerà nel senso opposto per altri 1.8 secondi per poi ripartire.

Schema elettrico

modifica

(non posso caricare lo schema elettrico del ponte ad H perchè sul sito che ho usato per disegnare il progetto non è presente)

Ponte a H

modifica

Questo componente ci permette di controllare la velocità e i senso di rotazione del motore, a differenza di un semplice deviatore che ci fa cambiare la direzione in cui gira semplicemente alimentando uno o l'altro filo del motore.

Schema di montaggio

modifica
 
Schema di montaggio con un motore

Modo di utilizzo dei pin, in questo caso, di uscita.

int A = 7;                          
int B = 8;  
int vel = 9;

Specifica il modo di utilizzo dei vari pin e spegne il motore.

void setup() {
  pinMode(A, OUTPUT);               
  pinMode(B, OUTPUT);               //A e B in uscita
  pinMode(vel, OUTPUT);
                                    //A e B bassi per tenere il motore spento
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
}

Il processo prevede che il motore ruoti a destra, si fermi, ruoti a sinistra e si fermi per un secondo.

void loop() {
  DX();
  STOP();
  SX();
  delay(1000);
}

Funzione di arresto del motorre.

void STOP() {                        //creo la variabile per fermare il motore
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  delay(1000);
}

Funzioni per il movimento a sinistra e a destra del motore.

void SX() {                          //creo la variabile per girare il motore in un senso
  digitalWrite(A, LOW);
  digitalWrite(B, HIGH);
  analogWrite(vel, 255);
  delay(1800);
}

void DX() {                          //creo la variabile per girare il motore nell'altro senso
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  analogWrite(vel, 255);
  delay(1800);
}

Conclusioni

modifica
  • gestire la velocità del motore;
  • modificare il processo (loop);
  • calcolo di delay in funzione della velocità;
  • Volendo il dispositivo può essere espanso, aggiungendogli delle parti meccaniche, facendo muovere un carrello avanti e indietro, collegando al motore un ingranaggio e sul carrello una sbarra dentata, il carrello farà avanti e indietro rispetto a da che parte starà girando il motore.