Circular FAB
CIRCULAR FAB Jarandilla de la Vera · Arduino Week 2026
Circular FAB
CIRCULAR FAB
Jarandilla de la Vera · práctica educativa de electrónica aplicada

INVERSOR
DE GIRO
2 RELÉS

Práctica educativa del Circular FAB Jarandilla de la Vera para controlar el sentido de giro de un motor DC utilizando Arduino, un módulo de 2 relés, fuente externa de 12V y tres pulsadores de control.

Arduino UNO / Nano / Mega Módulo relé 2CH Motor DC 12V GND común D7 → K1 D8 → K2 D2 · D3 · D4
Objetivo: comprender cómo invertir la polaridad de un motor DC con dos relés, evitando activaciones peligrosas y documentando el proyecto para que pueda replicarse en talleres y centros educativos.
Esquema inversor de giro con dos relés
ESQUEMA ORIGINAL · INVERSOR DE GIRO CON 2 RELÉS
01 / MATERIALES

LO QUE USAMOS

🎛️
Arduino UNO / Nano / Mega
Controla las entradas del módulo de relés y lee los pulsadores de avance, retroceso y parada.
🟪
Módulo relé 2 canales
Permite conmutar la alimentación del motor para obtener dos sentidos de giro. En muchos módulos: LOW = relé activado.
⚙️
Motor DC 12V
Motor de corriente continua. Al invertir la polaridad en sus bornes, cambia el sentido de giro.
🔋
Fuente externa 12V DC
Alimenta el motor. El Arduino solo entrega señales de control al módulo relé.
🔘
Pulsadores ×3
Adelante, atrás y stop. Usan INPUT_PULLUP, por lo que se conectan entre pin y GND.
Protección recomendada
Diodos de protección si se usan relés sueltos y comprobar siempre la corriente máxima del módulo.
02 / CONEXIONES

TABLA DE PINES

ELEMENTOCONEXIÓNDESCRIPCIÓN
Arduino D7IN1 / K1Controla el relé K1: giro adelante.
Arduino D8IN2 / K2Controla el relé K2: giro atrás.
Arduino 5VVCC reléAlimenta la lógica del módulo de relés.
Arduino GNDGND comúnDebe unirse con GND del módulo y negativo de la fuente.
Arduino D2Botón adelantePulsador entre D2 y GND. INPUT_PULLUP.
Arduino D3Botón atrásPulsador entre D3 y GND. INPUT_PULLUP.
Arduino D4Botón STOPPulsador entre D4 y GND. INPUT_PULLUP.
Fuente +12VCOM K1Línea de alimentación positiva para el motor.
Fuente GNDCOM K2Retorno/negativo de la alimentación del motor.
NO K1 / NO K2Motor M+ / M-Salidas hacia los bornes del motor DC.
// DIAGRAMA DE SEÑALES
── CONTROL ARDUINO → RELÉS ────────
Arduino D7
IN1 · Relé K1
Arduino D8
IN2 · Relé K2
── BOTONES ─────────────────────────
D2 / D3 / D4
Adelante · Atrás · Stop
GND
── POTENCIA 12V ────────────────────
+12V
COM K1
Motor M+
GND fuente
COM K2
Motor M-
⚠ NO ACTIVAR K1 Y K2 A LA VEZSi ambos relés se activan simultáneamente puede producirse un cortocircuito. El código apaga uno antes de activar el otro.
✓ GND COMÚNArduino, módulo de relés y fuente externa deben compartir referencia de masa.
⚡ MÓDULO ACTIVO BAJOEn este ejemplo se asume LOW = relé activado y HIGH = relé apagado. Comprueba tu módulo.
ℹ ESQUEMA CONSERVADOSe mantiene el esquema de dos relés que ya teníamos, sustituyendo la práctica de Tinkercad por el montaje correcto.
03 / LÓGICA

CÓMO FUNCIONA

// TABLA DE VERDAD
K1 OFF
K2 OFF
Motor parado
K1 ON
K2 OFF
Giro adelante
K1 OFF
K2 ON
Giro atrás
K1 ON · K2 ONEstado prohibido: riesgo de cortocircuito.
MOTOR PARADO GIRO ADELANTE GIRO ATRÁS K1 ON K2 ON STOP
✓ ADELANTESe apaga K2 y después se activa K1. El motor recibe polaridad en un sentido.
✓ ATRÁSSe apaga K1 y después se activa K2. La polaridad del motor se invierte.
⚡ STOPAmbos relés quedan apagados. Es el estado seguro al arrancar y al pulsar parada.
ℹ BOTONES Y SERIALSe puede controlar con botones o desde el monitor serie: f, b y s.
04 / CÓDIGO

SKETCH ARDUINO

inversor_giro_2_reles.ino
// ════════════════════════════════════════════════════════
// INVERSOR DE GIRO — 2 relés + Arduino
// Módulo relé activo bajo: LOW = activado / HIGH = apagado
// Pines: D7=K1, D8=K2, D2=adelante, D3=atrás, D4=stop
// ════════════════════════════════════════════════════════

#define RELE1    7
#define RELE2    8
#define BTN_FWD  2
#define BTN_BWD  3
#define BTN_STP  4

void setup() {
  Serial.begin(9600);
  pinMode(RELE1, OUTPUT);
  pinMode(RELE2, OUTPUT);
  pinMode(BTN_FWD, INPUT_PULLUP);
  pinMode(BTN_BWD, INPUT_PULLUP);
  pinMode(BTN_STP, INPUT_PULLUP);
  motorStop();
}

void loop() {
  if (digitalRead(BTN_FWD) == LOW) { motorFwd(); delay(250); }
  if (digitalRead(BTN_BWD) == LOW) { motorBwd(); delay(250); }
  if (digitalRead(BTN_STP) == LOW) { motorStop(); delay(250); }

  if (Serial.available()) {
    char cmd = Serial.read();
    if (cmd == 'f') motorFwd();
    if (cmd == 'b') motorBwd();
    if (cmd == 's') motorStop();
  }
}

void motorFwd() {
  digitalWrite(RELE2, HIGH);
  delay(10);
  digitalWrite(RELE1, LOW);
  Serial.println("▶ ADELANTE");
}

void motorBwd() {
  digitalWrite(RELE1, HIGH);
  delay(10);
  digitalWrite(RELE2, LOW);
  Serial.println("◀ ATRÁS");
}

void motorStop() {
  digitalWrite(RELE1, HIGH);
  digitalWrite(RELE2, HIGH);
  Serial.println("■ STOP");
}
05 / SIMULADOR

PRUEBA EL SISTEMA

MOTOR VIRTUAL — 2 RELÉS
K1 · D7
OFF
K2 · D8
OFF
K1 OFF
K2 OFF
SERIAL MONITOR — 9600 baud
// Arduino booting...
// D7 y D8 configurados como OUTPUT
// D2 · D3 · D4 configurados como INPUT_PULLUP
Sistema listo. Estado seguro: STOP