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.
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.
Entonces,>
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.
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.
Echemos>
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.
Las>
A>
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.
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.
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:
Todo>
Ahora>
int xAxis = analogRead(A0); // Read Joysticks X-axis
int yAxis = analogRead(A1); // Read Joysticks Y-axis
Code 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.
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.
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 B
Code 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.
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!
Excelente tutorial, muy explicativo y fácil de entender. Me ayudó a comprender mejor cómo funciona el controlador de motor L298N con Arduino. ¡Gracias!
¡Muy bueno! Me encantó la forma en que detallaron el funcionamiento y los códigos para usar el controlador de motor L298N con Arduino. ¡Sigan así!
Gracias por el artículo, me resultó muy útil para comprender cómo utilizar el controlador de motor L298N con Arduino. ¡Sigan compartiendo este tipo de contenido!