Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

En el fascinante mundo de la robótica y la automatización, el controlador de motor L298N se ha convertido en una herramienta indispensable para los entusiastas de Arduino. En este artículo, te guiaremos a través de su interfaz con Arduino, su funcionamiento, códigos de programación y esquemas de conexión. Descubre cómo este versátil dispositivo puede llevar tus proyectos al siguiente nivel. ¡No te lo pierdas!

En este tutorial de Arduino, aprenderemos cómo controlar motores de CC usando Arduino. Echaremos un vistazo a algunas técnicas básicas de control de motores de CC y crearemos dos ejemplos que nos ayudarán a aprender cómo controlar motores de CC utilizando el controlador de motor L298N y la placa Arduino.

Puede ver el vídeo a continuación o leer el tutorial escrito a continuación.

Podemos controlar la velocidad del motor de CC simplemente controlando el voltaje de entrada del motor. La forma más común de hacer esto es utilizar una señal PWM.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Control de motores de corriente continua PWM

PWM o Modulación de Ancho de Pulso es una técnica que nos permite ajustar el valor medio del voltaje aplicado al dispositivo electrónico encendiendo y apagando rápidamente la corriente. El voltaje promedio depende del ciclo de trabajo, que es la cantidad de tiempo que la señal está encendida versus la cantidad de tiempo que la señal está apagada en un solo período.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Entonces,>

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas
Nota:>

Control de motor CC con puente H

Por otro lado, para controlar el sentido de rotación, todo lo que necesitamos hacer es invertir la dirección del flujo de corriente a través del motor, y el método más común para esto es usar un puente en H. Un circuito de puente H contiene cuatro elementos de conmutación, transistores o MOSFET, con el motor formando una configuración en forma de H en el medio. Accionando dos interruptores específicos al mismo tiempo, podemos cambiar el sentido del flujo de corriente y por tanto el sentido de giro del motor.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Entonces,>

controlador L298N

El L298N es un controlador de motor de puente H dual que permite el control de velocidad y dirección de dos motores de CC simultáneamente. El módulo puede accionar motores de CC con voltajes entre 5 y 35 V y una corriente máxima de hasta 2 A.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Echemos>

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Esto>

Podemos ver aquí que este IC provoca una caída de voltaje de alrededor de 2V. Por ejemplo, si utilizamos una fuente de alimentación de 12V, el voltaje en los terminales del motor rondará los 10V, lo que significa que no podremos sacarle la máxima velocidad a nuestro motor de 12V DC.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Las>

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

A>

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Ver también
Tutorial de control de motores sin escobillas Arduino | ESC | BLDC

Controlador de motor Arduino y L298N

Ahora hagamos algunas aplicaciones prácticas. En el primer ejemplo, controlamos la velocidad del motor mediante un potenciómetro y cambiamos el sentido de rotación mediante un pulsador. Aquí está el diagrama del circuito.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Entonces>

Puede obtener los componentes necesarios para este tutorial de Arduino en los siguientes enlaces:

  • Controlador L298N ……………………………….. Amazon/Banggood/Aliexpress
  • Motor de alto par de 12 V CC………….. Amazon/Banggood/Aliexpress
  • Motor DC con rueda de plástico……. Amazon/Banggood/Aliexpress
  • Placa Arduino……………………………… Amazon/Banggood/Aliexpress
  • Cables de puente y placa de pruebas………… Amazon/Banggood/Aliexpress

Divulgación: estos son enlaces de afiliados. Como asociado de Amazon, gano con compras que califican.

código arduino

Aquí está el código Arduino:

/*  Arduino DC Motor Control - PWM | H-Bridge | L298N  -  Example 01

    by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#define enA 9
#define in1 6
#define in2 7
#define button 4

int rotDirection = 0;
int pressed = false;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(button, INPUT);
  // Set initial rotation direction
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
}

void loop() {
  int potValue = analogRead(A0); // Read potentiometer value
  int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the potentiometer value from 0 to 255
  analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin

  // Read button - Debounce
  if (digitalRead(button) == true) {
    pressed = !pressed;
  }
  while (digitalRead(button) == true);
  delay(20);

  // If button is pressed - change rotation direction
  if (pressed == true  & rotDirection == 0) {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    rotDirection = 1;
    delay(20);
  }
  // If button is pressed - change rotation direction
  if (pressed == false & rotDirection == 1) {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    rotDirection = 0;
    delay(20);
  }
}
Code language: Arduino (arduino)

Descripción: Primero necesitamos definir los pines y algunas variables necesarias para el programa. En la sección de configuración, necesitamos configurar los modos de los pines y la dirección de rotación inicial del motor. En la sección de bucle, primero leemos el valor del potenciómetro y luego asignamos el valor resultante, que está entre 0 y 1023, a un valor entre 0 y 255 para la señal PWM, o un ciclo de trabajo de 0 a 100% de la señal PWM. Luego usamos la función analogWrite() para enviar la señal PWM al pin de habilitación de la placa L298N, que en realidad impulsa el motor.

A continuación comprobamos si pulsamos el botón, y si es así cambiamos el sentido de giro del motor invirtiendo los estados de la entrada 1 y la entrada 2. El pulsador actúa como botón de palanca y cada vez que lo pulsamos cambia el sentido de giro del motor.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Ver también
Cómo funciona el servomotor y cómo controlar servos con Arduino

Controlador de coche robot Arduino con controlador de motor L298N

Una vez que hayamos aprendido esto, ya podremos construir nuestro propio coche robot Arduino. Aquí está el diagrama del circuito:

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Todo>

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Ahora>

int xAxis = analogRead(A0); // Read Joysticks X-axis
int yAxis = analogRead(A1); // Read Joysticks Y-axisCode language: Arduino (arduino)

Luego de definir los pines, en la sección de bucle comenzamos a leer los valores de los ejes X e Y del joystick. En realidad, el joystick consta de dos potenciómetros que están conectados a las entradas analógicas del Arduino y tienen valores de 0 a 1023. Cuando el joystick permanece en su posición central, el valor de ambos potenciómetros o ejes ronda el 512.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Agregamos>

// Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  }Code language: Arduino (arduino)

Cuando movemos el eje Y del joystick hacia adelante y el valor está por encima de 550, configuramos los motores para que avancen y convertimos las lecturas de 550 a 1023 en valores PWM de 0 a 255. Si el joystick permanece en su centro, la velocidad del motor será cero.

A continuación, veamos cómo usamos el eje X para el control izquierdo y derecho del automóvil.

// X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  }Code language: Arduino (arduino)

Entonces, primero debemos convertir las mediciones del eje X en valores de velocidad de 0 a 255. Para el movimiento hacia la izquierda, usamos este valor para disminuir la velocidad del motor izquierdo y aumentar la velocidad del motor derecho. Debido a las funciones aritméticas, aquí utilizamos dos declaraciones «if» adicionales para limitar el rango de velocidad del motor de 0 a 255.

Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas

Se>

Relacionado: Cómo crear un controlador de velocidad de motor de CC PWM utilizando el IC del temporizador 555

Dependiendo del voltaje aplicado y del motor en sí, es posible que el motor no se mueva a velocidades más bajas y produzca un zumbido. En mi caso, los motores no podían moverse cuando el valor de la señal PWM estaba por debajo de 70. Es por eso que me limité al rango de velocidad de 70 a 255 con estas dos declaraciones if. Al final, simplemente enviamos las velocidades finales del motor o la señal PWM a los pines de habilitación del controlador L298N.

// Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor BCode language: Arduino (arduino)

Aquí está el código completo del ejemplo del coche robot Arduino:

/*  Arduino DC Motor Control - PWM | H-Bridge | L298N
         Example 02 - Arduino Robot Car Control
    by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7

int motorSpeedA = 0;
int motorSpeedB = 0;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  int xAxis = analogRead(A0); // Read Joysticks X-axis
  int yAxis = analogRead(A1); // Read Joysticks Y-axis

  // Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  }
  else if (yAxis > 550) {
    // Set Motor A forward
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    // Set Motor B forward
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    // Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 550, 1023, 0, 255);
    motorSpeedB = map(yAxis, 550, 1023, 0, 255);
  }
  // If joystick stays in middle the motors are not moving
  else {
    motorSpeedA = 0;
    motorSpeedB = 0;
  }

  // X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  }
  if (xAxis > 550) {
    // Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 value
    int xMapped = map(xAxis, 550, 1023, 0, 255);
    // Move right - decrease right motor speed, increase left motor speed
    motorSpeedA = motorSpeedA + xMapped;
    motorSpeedB = motorSpeedB - xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA > 255) {
      motorSpeedA = 255;
    }
    if (motorSpeedB < 0) {
      motorSpeedB = 0;
    }
  }
  // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
}Code language: Arduino (arduino)

Eso es todo por este tutorial y en mi próximo video actualizaremos este automóvil robot Arduino agregando dispositivos Bluetooth y de radio para habilitar el control inalámbrico y por teléfono inteligente.

No dudes en hacer tus preguntas en la sección de comentarios a continuación y no olvides echar un vistazo a mi colección de proyectos Arduino.

Categorías tutoriales de arduino
Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

En este artículo vamos a hablar sobre el controlador de motor L298N y cómo podemos interactuar con él utilizando la plataforma Arduino. Veremos su interfaz, funcionamiento, códigos y esquemas para que puedas comenzar a trabajar con este dispositivo de forma efectiva.

¿Qué es el controlador de motor L298N?
El L298N es un controlador de motor de doble puente en H que permite el control de la velocidad y dirección de dos motores de corriente continua al mismo tiempo. Este módulo puede manejar motores DC con voltajes entre 5 y 35V, con una corriente máxima de hasta 2A.

¿Cómo funciona el L298N?
El L298N utiliza un circuito de puente en H que contiene cuatro elementos de conmutación, ya sea transistores o MOSFETs. Al activar dos interruptores particulares al mismo tiempo, podemos cambiar la dirección del flujo de corriente a través del motor, lo que a su vez cambia la dirección de rotación del motor.

¿Cómo se conecta el L298N a Arduino?
El L298N se conecta a Arduino a través de los pines de control de la velocidad y dirección de los motores. Además, podemos utilizar la señal PWM de Arduino para controlar la velocidad del motor y los pines de entrada digital para cambiar la dirección de rotación.

¿Qué código se necesita para controlar un motor con el L298N y Arduino?
Para controlar un motor con el L298N y Arduino, necesitamos escribir un código que incluya la lectura de la señal del potenciómetro para ajustar la velocidad del motor y el uso de un botón para cambiar la dirección de rotación del motor. También podemos utilizar un joystick para controlar un robot car con dos motores utilizando el L298N.

En resumen, el controlador de motor L298N es una herramienta poderosa para controlar motores DC con Arduino. Con la combinación de la señal PWM y el puente en H, podemos lograr un control preciso sobre la velocidad y dirección de nuestros motores. ¡Esperamos que este artículo te haya sido útil para comenzar a trabajar con el L298N y Arduino!

3 comentarios en «Controlador de motor L298N: interfaz Arduino, funcionamiento, códigos, esquemas»

Deja un comentario