Controlador de motor con Arduino (básico)

Controlador de motor

El día de hoy te enseñare a programar un motor (DC) con un puente H L293D y una placa Arduino que será activada por un push botton, el puente h L293D es un controlador de motor que permite manejar la dirección y velocidad de motores de corriente continua (DC) de manera eficiente y sencilla. Te guiare en la conexión del puente h, las conexiones y programación del Arduino para que tus futuros proyectos.

Para esto vamos a usar Tinkercad para poder realizar las conexiones y la programación, de igual manera funciona en físico.

Materiales

Conexión de puente h L293D

Como ya mencioné el puente h sirve para poder controlar un motor de corriente continua, nos permite cambiar el giro del motor y su velocidad, pero antes de usarlo debemos saber cómo funciona para saber las conexiones que aremos después. El L293D es el puente h que usaremos en esta ocasión, existen otras, pero esta es la más conocida.

El L293D cuenta con 16 pines de los cuales 2 son de voltaje, 4 de tierra (GND) 4 de salida donde irán las conectado los motores, si digo motores ya que es capaz de controlar 2 motores a la vez, aunque usaremos solo 1 y 6 de entrada que serán donde conectaremos el Arduino. Funciona con un voltaje de 4.7v a 36v y debe ser alimentado por ambos pines de voltaje, el pin 16 es para el funcionamiento del integrado y es de 5v mientras que el pin 8 es para los motores y puede llevar voltajes inferiores a 36v, sus características son:
  • Puede controlar 2 motores
  • puede soportar hasta 36v
  • tiene «enable» (nos permite controlar la velocidad)


Conexión

Bien empecemos con las conexiones a la protoboard de los componentes.

  1. Primero pondremos el Arduino, motor. L293D, batería y protoboard
  2. conectaremos el motor en los pines 3 y 6

  3. Conectaremos los pines del L293D (h) al Arduino (A), 2(h) al 2(A), el 7(h) al 3(A) y por último el 1(h) al 5(A).
  4. Por último, aremos las conexiones al voltaje, procura tener cuidado y no juntar los voltejes del Arduino con los de otras fuentes de voltaje ya que puede traer varios problemas, pero no hay problema con las tierras (GND) favor de hacerlo tal cual en la imagen:





Programas

Giro de motor

Bien iniciaremos con la programación del Arduino, este programa es para que el motor gire de un lado a otro.

//Declaramos las entradas
int enable = 5;
int in1 = 2;
int in2 = 3;


void setup() {
pinMode(enable, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT); 
 
}


void loop() {

digitalWrite(enable, HIGH);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(3000); // Espera 3 segundos

// Detener el motor
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(2000); // Espera 2 segundos

// Hacer que el motor gire en la direccion opuesta
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
delay(3000); // Espera 3 segundos

digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(2000); // Espera 2 segundos

}


Giro con variación de velocidad

En este caso aremos uso del enable que atreves de este aremos que la velocidad varie, para eso cambiaremos algunas partes del código antes echo.

int enable = 5;
int in1 = 2;
int in2 = 3;


void setup() {
pinMode(enable, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT); 
Serial.begin(9600);
}


void loop() {
// El bucle for nos sirve para ir aumentando un valor y solo saldrá de este al momento de concluir
  for(int i=0; i <= 250; i++){ 
analogWrite(enable, i);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(25); 
  Serial.println(i);
  }
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}

Push botton

por ultimo agregaremos un botón, para eso usaremos una resistencia de 330 ohms y nuevo pin del Arduino en este caso asignamos el 7 y su conexión queda así:


EL código quedaría así:

int enable = 5;
int in1 = 2;
int in2 = 3;
int bot = 7;//se declara la entrada del boton
bool boton = LOW;// se declara una variable que cambiara al precionar el boton

void setup() {
pinMode(enable, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT); 
pinMode(bot, INPUT);//Lo marcamos como entrada
Serial.begin(9600);
}


void loop() {
 boton = digitalRead(bot);
  //usamos un if para activar el codigo al precionarse el boton
  if(boton == HIGH){
  for(int i=0; i <= 250; i++){
analogWrite(enable, i);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(25); 
       Serial.println(i);
  }
  }
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}

Gracias y espero que les sirva, traeré más en un futuro!

Comentarios

Entradas populares de este blog