Arduino Nano ESP32 - Motor de corriente continua

Este tutorial proporciona instrucciones sobre cómo usar Arduino Nano ESP32 para controlar un motor de corriente continua utilizando un controlador de motor L298N. En detalle, aprenderemos a controlar la velocidad y la dirección del motor de corriente continua. Aprenderemos a controlar un solo motor de corriente continua y, a continuación, dos motores de corriente continua usando un único controlador L298N.

Acerca del motor de corriente continua

Pinout del motor de corriente continua

Un motor de corriente continua tiene dos cables: Negativo(negro), y Positivo(rojo)

Pinout de motor de corriente continua

Cómo funciona un motor de corriente continua

La dirección y la velocidad del motor de corriente continua estarán determinadas por cómo le suministramos energía. Las imágenes a continuación muestran la relación detallada entre la potencia y la velocidad/dirección.

Cómo controlar un motor de corriente continua

En el caso de usar PWM, cuanto mayor sea el ciclo de trabajo del PWM, mayor será la velocidad a la que gira el motor.

Cómo controlar la velocidad y la dirección de un motor de corriente continua con Arduino Nano ESP32

En primer lugar, el motor de corriente continua funciona con un voltaje alto que puede quemar el Arduino Nano ESP32. Por lo tanto, no podemos conectar directamente el motor de corriente continua al Arduino Nano ESP32. Necesitamos un controlador de hardware entre el motor de corriente continua y el Arduino Nano ESP32. El controlador tiene tres responsabilidades:

  • Protección del Arduino Nano ESP32 frente a la alta tensión
  • Recibir la señal del Arduino Nano ESP32 para cambiar la polaridad de la fuente de alimentación y controlar la dirección del motor.
  • Amplificar la señal PWM del Arduino Nano ESP32 (corriente y voltaje) para controlar la velocidad del motor.
Control de motor de corriente continua con Arduino Nano ESP32

Hay muchos controladores de motores de corriente continua. Este tutorial utilizará el controlador L298N.

Acerca del controlador L298N

Un solo controlador L298N puede controlar dos motores de corriente continua o un motor paso a paso. Este tutorial utiliza este controlador para controlar el motor de corriente continua.

Disposición de pines del controlador L298N

La imagen de abajo muestra el pinout del controlador L298N.

Pinout del controlador L298N

La explicación detallada de cada pin está disponible en este Arduino - DC motor tutorial

Un solo controlador L298N puede controlar dos motores DC de forma independiente:

  • El primer motor (llamado motor A) se controla mediante los pines IN1, IN2, ENA, OUT1, OUT2.
  • El segundo motor (llamado motor B) se controla mediante los pines IN3, IN4, ENB, OUT3, OUT4.

Cómo controlar la velocidad de un motor de corriente continua mediante el controlador L298N

Es sencillo controlar la velocidad del motor de corriente continua generando una señal PWM en el pin ENA/ENB del L298N. Podemos hacerlo de la siguiente manera:

  • Conectar el pin de salida digital de un ESP32 al pin ENA/ENB del L298N
  • Creando una señal PWM para el pin ENA/ENB utilizando la función analogWrite(). Esta señal PWM pasa a través del driver L298N y aumenta la corriente y el voltaje antes de llegar al motor DC
analogWrite(PIN_ENA, speed); // control motor A analogWrite(PIN_ENB, speed); // control motor B

El valor de speed está entre 0 y 255. Si es 255, el motor funciona a la velocidad máxima. Si es 0, el motor se detiene.

Cómo controlar la dirección de un motor de corriente continua mediante el controlador L298N

La dirección del motor DC A puede controlarse mediante los pines IN1 e IN2. La siguiente tabla muestra la relación entre la dirección del motor y la señal en los pines IN1 e IN2.

IN1 pin IN2 pin Direction
HIGH LOW DC Motor A rotates in clockwise direction
LOW HIGH DC Motor A rotates in anticlockwise direction
HIGH HIGH DC Motor A stops
LOW LOW DC Motor A stops

Del mismo modo, la tabla a continuación es para el motor de corriente continua B.

IN3 pin IN4 pin Direction
HIGH LOW DC Motor B rotates in clockwise direction
LOW HIGH DC Motor B rotates in anticlockwise direction
HIGH HIGH DC Motor B stops
LOW LOW DC Motor B stops

Aprendamos a programar para controlarlo. Tomemos el motor A como ejemplo. El motor B es similar.

  • Controlando la dirección del motor A en sentido horario.
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, LOW);
  • Controlando la dirección del motor A en sentido antihorario
digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, HIGH);

※ Nota:

La dirección del motor de corriente continua es opuesta si el cableado entre el motor DC y el controlador L298N está en sentido inverso. En ese caso, intercambia los pines OUT1 y OUT2.

Cómo detener un motor de corriente continua

Hay dos formas de detener un motor de corriente continua.

  • Controlando la velocidad a cero
analogWrite(PIN_ENA, 0);
  • Controlar los pines IN1 e IN2 para que estén en el mismo nivel bajo o alto
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, HIGH);
  • o
digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW);

Cómo controlar un motor de corriente continua utilizando un controlador L298N.

Diagrama de Cableado

Hay tres jumpers en el módulo L298N. Quítalos todos antes de hacer el cableado.

Diagrama de cableado para Arduino Nano ESP32, motor DC y controlador L298N

This image is created using Fritzing. Click to enlarge image

Código para Arduino Nano ESP32

Veamos el código de abajo que hace lo siguiente una por una:

  • Arduino Nano ESP32 controla cada vez más la velocidad del motor de corriente continua.
  • Arduino Nano ESP32 invierte la dirección del motor de corriente continua.
  • Arduino Nano ESP32 controla la velocidad del motor de corriente continua disminuyendo.
  • Arduino Nano ESP32 detiene el motor de corriente continua.
/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-dc-motor */ #define PIN_ENA D5 // The Arduino Nano ESP32 pin connected to the EN1 pin L298N #define PIN_IN1 D4 // The Arduino Nano ESP32 pin connected to the IN1 pin L298N #define PIN_IN2 D3 // The Arduino Nano ESP32 pin connected to the IN2 pin L298N // The setup function runs once on reset or power-up void setup() { // initialize digital pins as outputs. pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_ENA, OUTPUT); } // The loop function repeats indefinitely void loop() { digitalWrite(PIN_IN1, HIGH); // control the motor's direction in clockwise digitalWrite(PIN_IN2, LOW); // control the motor's direction in clockwise for (int speed = 0; speed <= 255; speed++) { analogWrite(PIN_ENA, speed); // speed up delay(10); } delay(2000); // rotate at maximum speed 2 seconds in clockwise direction // change direction digitalWrite(PIN_IN1, LOW); // control the motor's direction in anti-clockwise digitalWrite(PIN_IN2, HIGH); // control the motor's direction in anti-clockwise delay(2000); // rotate at maximum speed for 2 seconds in anti-clockwise direction for (int speed = 255; speed >= 0; speed--) { analogWrite(PIN_ENA, speed); // speed down delay(10); } delay(2000); // stop motor 2 second }

Pasos R\u00e1pidos

  • Si es la primera vez que usas Arduino Nano ESP32, consulta cómo configurar el entorno para Arduino Nano ESP32 en Arduino IDE.
  • Quita los tres jumpers del módulo L298N.
  • Copia el código anterior y pégalo en Arduino IDE.
  • Compila y sube el código a la placa Arduino Nano ESP32 haciendo clic en el botón Subir en Arduino IDE
  • Observa el motor de corriente continua; verás:
    • El motor de corriente continua se acelera y gira a la velocidad máxima durante 2 segundos
    • La dirección del motor de corriente continua se invierte
    • El motor de corriente continua gira en la dirección inversa a la velocidad máxima durante 2 segundos
    • El motor de corriente continua se desacelera
    • El motor de corriente continua se detiene durante 2 segundos
  • El proceso anterior se repite indefinidamente.

※ Nota:

Este tutorial proporciona instrucciones sobre cómo controlar la velocidad de un motor de corriente continua de forma relativa. Para controlar la velocidad absoluta (revoluciones por segundo), se necesita usar un controlador PID y la retroalimentación de un codificador.

Cómo controlar dos motores de corriente continua con el controlador L298N

(próximamente)

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Referencias de idioma

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!