Controlant motors amb arduino v2.0

En aquest projecte el que realitzarem serà el mateix del projecte anterior però en un projecte. Per tant mitjançant un sol circuit elèctric podrem controlar la velocitat de gir i el sentit de gir d'un motor. La peça clau per a aquest projecte és un pont en h. Aquest aparell és un petit sistema integrat que consta de 16 pins (potes) amb les quals fent les connexions pertinents podem controlar la direcció i velocitat de gir d'un motor. En la imatge inferior podeu observar per a que serveix cada pin d'aquest aparell. També cal tenir en compte que en un dels extrems d'aquest sistema hi ha una osca (muesca en castellà) per tal de saber quina és la orientació del sistema i també a partir d'aquesta poder saber quin és cadascun dels pins. Doncs bé aquest projecte constarà de dos pulsadors i un potenciòmetre. Mantenint pulsat un dels pulsdors (el de dalt) s'encén el motor el qual gira sempre cap a un sentit i mantenint pulsat l'altre pulsador (el de abaix) podem canviar el sentit de gir. Amb el potenciòmetre el que fem és controlar la velocitat de gir del motor.

Una vegada ja explicat el projecte, disposem-nos a realitzar el circuit elèctric. Els materials necessaris són els següents:
  • 1xPlaca Arduino UNO
  • 1xProtoboard
  • 1xPila 9V
  • 1xMotor DC
  • 2xPulsadors
  • 1xPotenciòmetre
  • 1xPont en H L293D
  • 2xresistències 220ohms
  • cables


Una vegada ja haguem realitzat el circuit, és hora de programar la placa.

const int PindeControl1=2;         //A on va connectat un dels pins de control de gir 
const int PindeControl2=3;         //A on va connectat l'altre pin de control de gir
const int PindeActivacion=9;       //Pin que quan dona corrent encén el motor, i quan no en dona no
const int PinDireccionGiro=4;      //Pin que va connectat a l'interruptor que controla el gir
const int PinEncendidoApagado=5;   //Pin que va connectat a l'interruptor que encén i apaga el motor
const int PinPotenciometro=A0;     //Pin connectat al potenciòmetre que controla la velocitat

int EstadoPulsadorArranque=0;      //Guarda la variable per a saber si el motor ha d'estar encès o no
int EstadoPrevioPulsadorArranque=0;//Guarda un valor que explicarem més tard
int EstadoPulsadorDireccion=0;     //Guarda la variable per saber en quina direcció gira el motor
int EstadoPrevioPulsadorDireccion=0;//Guarda un valor que explicarem més tard

int ActivarMotor=0;                //Pin per a saber si hem d'activar el motor o no
int VelocidadMotor=0;              //Pin que guarda la velocitat del motor
int DireccionMotor=1;              //Pin que guarda la direcció del motor

void setup() {
//Diem a la placa Arduino si els pins són d'entrada o de sortida
pinMode(PinDireccionGiro,INPUT);
pinMode(PinEncendidoApagado,INPUT);
pinMode(PindeControl1,OUTPUT);
pinMode(PindeControl2,OUTPUT);
pinMode(PindeActivacion,OUTPUT);

//Ens assegurem que al començar el programa el motor està apagat
digitalWrite(PindeActivacion,LOW);

}

void loop() {

//El primer que fem és comprobar en quina posició estan els dos pulsadors
//i llegir quin valor entra per el pin del potenciòmetre
EstadoPulsadorArranque=digitalRead(PinEncendidoApagado);
delay(1);
EstadoPulsadorDireccion=digitalRead(PinDireccionGiro);
VelocidadMotor=analogRead(PinPotenciometro)/4;


/*En aquestes dues properes condicions el realment fem és comprobar 
 que el pulsador cambia d'estat i a sobre és positiu, que fagi una
 cosa o una altra. Per tant no només val en que canviï d'estat, sinó
 també comproba en quina posició està actualment. Per tant si mantenim
 premut un pulsador el motor fa una cosa, i si no fa una altra. En el
 cas de que el pulsador estigui pulsat, el que es fa és canviar el
 valor de la variable activar motor (si es pulsa el primer pulsador) o 
 canviar el valor de la variable direcció de gir (si es pulsa el segon
 pulsador).
 */

if(EstadoPulsadorArranque!=EstadoPrevioPulsadorArranque){
  if(EstadoPulsadorArranque==HIGH){
    ActivarMotor=!ActivarMotor;
  }
}
if(EstadoPulsadorDireccion!=EstadoPrevioPulsadorDireccion){
  if(EstadoPulsadorDireccion==HIGH){
    DireccionMotor=!DireccionMotor;
  }
}


/*Seguidament el que fem és comprobar el valor de la variable dirección motor.
 en cas de que sigui 1,gira cap a una banda, i en cas de que no gira cap
 a l'altra. Quan en l'ordre anterior ens referim que en cas de que es 
 compleixi la condició, canviem el valor de la variable és perque si era 1, ara
 és 0; i si era 0, ara és 1.
 */
if(DireccionMotor==1){
  digitalWrite(PindeControl1,HIGH);
  digitalWrite(PindeControl2,LOW);
}else{
  digitalWrite(PindeControl1,LOW);
  digitalWrite(PindeControl2,HIGH);
}

/*Finalment el mateix que hem fet per a la direcció ho fem per a l'activació del motor.
 Si aquesta varaible és 1, s'encén el motor; i si és 0, no. Després de la condició 
 el que fem és igualar el valor de les variables de l'estat del pulsador i l'estat
 anterior del pulsador per a que quan torni a començar el programa poguem tornar
 a comprobar que els pulsadors han canviat d'estat.
 */
if(ActivarMotor==1){
  analogWrite(PindeActivacion,VelocidadMotor);
}else{
  analogWrite(PindeActivacion,0);
}
EstadoPrevioPulsadorDireccion=EstadoPulsadorDireccion;
EstadoPrevioPulsadorArranque=EstadoPulsadorArranque;


  }

Una vegada realitzat el projecte, ja tenim un circuit elèctric mitjançant el qual podem controlar la velocitat i el sentit de gir d'un motor amb un component molt petit però clau; el pont en H. Clicant en el botó inferior podeu descarregar l'arxiu Arduino.



Cap comentari:

Publica un comentari a l'entrada

↓↓↓ Si vols deixar un comentari fes-ho aquí ↓↓↓