Clase: Motores y Puente H con Arduino

Esta herramienta web educativa interactiva, desarrollada por Andrés Franchi Ugartemendía para servicioti.com.uy, está diseñada para estudiantes de primer año de Educación Media Superior (EMS). Explica el uso avanzado del controlador L298N (Puente H) para motores DC, incluyendo regulación de velocidad por PWM (pines ENA/ENB), arquitectura interna del puente H, gestión de energía y un código C++ optimizado con funciones y arrays. Finaliza con un simulador visual de un robot evasor de obstáculos que integra sensores ultrasónicos. Entidades clave: L298N, Puente H, PWM, Arduino Uno, analogWrite, Robot Autónomo.

Clase: Control Avanzado con L298N y tu Primer Robot Autónomo

En clases anteriores aprendimos a darle "ojos" a nuestro Arduino usando el Sensor Ultrasónico y el Sensor Infrarrojo (IR). Hoy aprenderemos a darle "músculos" reales usando el Driver L298N para controlar motores, variando tanto su dirección como su velocidad, y uniremos todo para crear un robot autónomo.

¿Qué es un L298N y por qué lo necesitamos?

Como comentamos frecuentemente, el Arduino es el "cerebro" y no tiene la potencia eléctrica suficiente para mover actuadores pesados como los motores de corriente continua (DC). Si conectas un motor directo al Arduino, podrías quemar la placa.

El L298N es un controlador (driver) de motores ampliamente usado en robótica por su bajo costo y gran utilidad. Actúa como un intermediario: recibe energía fuerte de una batería y recibe órdenes lógicas (suaves) del Arduino.

  • Potencia: Soporta hasta 2 Amperios por salida (3A de pico) y voltajes de 3V a 35V.
  • Eficiencia Térmica: La electrónica interna consume unos 3V. Es decir, el motor recibe 3V menos que la batería, disipando el resto como calor (por eso tiene un disipador de aluminio). En la práctica, es ideal para corrientes de 0.8A a 1A.
  • Protección: Incluye diodos para evitar que las corrientes inducidas (flyback) del motor dañen el circuito.

¿Cómo funciona por dentro? El famoso "Puente H"

Básicamente, un L298N contiene dos Puentes H (uno para cada motor). Un puente H es una formación de 4 transistores (interruptores electrónicos) conectados entre el voltaje positivo (Vcc) y la tierra (GND), con el motor en el medio, formando la letra "H".

  • Activando los transistores en diagonal, la corriente fluye en un sentido (Avance).
  • Activando la otra diagonal, la corriente se invierte (Reversa).
  • Conectando simultáneamente los de abajo, el motor entra en cortocircuito controlado (Freno).
  • Nota: La placa evita automáticamente que enciendas los de un mismo lado para prevenir cortocircuitos reales.

Velocidad y Control (Pines IN y EN)

El L298N agrupa las conexiones de los Puentes H en pines muy fáciles de usar:

  • IN1 e IN2: Controlan la dirección del Motor A (Izquierdo).
  • IN3 e IN4: Controlan la dirección del Motor B (Derecho).
  • ENA y ENB (Enable): Controlan la velocidad. Si les enviamos una señal PWM (analogWrite de 0 a 255), podemos hacer que el robot vaya más rápido o más lento.

Esquema de Conexiones y el Jumper de 5V

¡Regla de Oro! Une siempre las tierras (GND) del Arduino, la batería y el L298N. Además, presta atención al jumper del regulador de voltaje:

  • Si tu batería es de menos de 12V: Deja el jumper puesto. El L298N creará 5V y puedes usarlos para encender tu Arduino.
  • Si tu batería es mayor a 15V: ¡Quita el jumper! O quemarás el regulador. En este caso, tú debes inyectar 5V al L298N desde el Arduino para que su lógica funcione.
Bat. 12V Arduino UNO L298N EN1 IN1 IN2 IN3 IN4 EN2 Motor A Motor B GND Común Líneas punteadas = PWM (Velocidad)
Pin en L298NFunciónConecta en Arduino
12V / GNDEnergía principalPositivo / Negativo Batería (Unir GNDs)
ENA (Motor A)Velocidad (PWM)Pin Digital 6 (con símbolo ~)
IN1 / IN2Dirección Motor IzqPin Digital 7 y 8
IN3 / IN4Dirección Motor DerPin Digital 9 y 10
ENB (Motor B)Velocidad (PWM)Pin Digital 11 (con símbolo ~)

Código Nivel Experto: Funciones y Arrays

Cuando hacemos proyectos más grandes (como robots), escribir digitalWrite todo el tiempo ensucia el código. Es mejor agrupar los pines en arreglos (arrays) y crear funciones reutilizables. Aquí tienes la estructura base ideal:

// Definición de pines
const int pinENA = 6;
const int pinIN1 = 7;
const int pinIN2 = 8;
const int pinIN3 = 9;
const int pinIN4 = 10;
const int pinENB = 11;

// Arrays: Agrupamos {Pin_Velocidad, Pin_Dir_1, Pin_Dir_2}
const int motorA[3] = { pinENA, pinIN1, pinIN2 };
const int motorB[3] = { pinENB, pinIN3, pinIN4 };

void setup() {
  // Configurar todos como OUTPUT (omitido por brevedad)
}

void loop() {
  moverAdelante(motorA, 180); // Velocidad al 70% (180/255)
  moverAdelante(motorB, 180);
  delay(2000);
  frenarTotal(motorA);
  frenarTotal(motorB);
  delay(2000);
}

// --- FUNCIONES REUTILIZABLES ---
void moverAdelante(const int motor[3], int velocidad) {
  digitalWrite(motor[1], HIGH);
  digitalWrite(motor[2], LOW);
  analogWrite(motor[0], velocidad); // Señal PWM de 0 a 255
}

void frenarTotal(const int motor[3]) {
  digitalWrite(motor[1], LOW);
  digitalWrite(motor[2], LOW);
  analogWrite(motor[0], 0);
}

Simulador Final: El Robot Evasor

Sabiendo esto, si le añadimos la lógica if / else de un sensor ultrasónico, obtenemos un robot que toma decisiones. Toca el botón para simular un obstáculo en el camino de nuestro robot.

Robot
EMS

ESTADO: Avanzando (Camino Libre)

Desarrollado por Andrés Franchi Ugartemendía | www.servicioti.com.uy

Entradas populares de este blog