Arduino y Optoacopladores NeoPixel: Control Eficiente de Múltiples Relés
Componentes y materiales
| Tira LED NeoPixel (WS2812B, 5 V, 300 LED/m, 5050 RGB) – corte de 10 LED (4 usados) | × | 1 |
| Resistencia 27 kΩ (en serie con cada LDR) | × | 4 |
| Fotorresistencia (LDR) – resistor dependiente de la luz | × | 4 |
| Módulo relé 5 V (4 canales) – p.ej. RobotGeek o similar | × | 4 |
| Lámpara LED 230 V (carga de prueba) | × | 1 |
| Arduino UNO / NodeMCU ESP32 – cualquier modelo sirve | × | 1 |
Herramientas necesarias
- Soldador
- Herramientas comunes (cortadores, pelacables, multímetro, etc.)
Aplicaciones y servicios
- Vídeo demostrativo (ver sección «Code»)
Descripción del proyecto
Este proyecto muestra cómo controlar múltiples relés u otros actuadores desde un único pin de salida de Arduino.
Es la solución típica cuando los pines de salida disponibles son insuficientes y se necesitan controlar varios actuadores (relés) en paralelo desde un solo pin.
El principio se basa en usar una tira de NeoPixels (LED SMD5050 con controlador WS2812B integrado). Cada pixel se empareja con un LDR, creando así optoacopladores caseros (tantos como LED haya en la tira, p.ej. 300 en 5 m, limitados solo por la fuente de 5 V). Así se logra una conversión serie-a-paralelo (de 1 a muchos).
Cada LED individual se direcciona desde el mismo pin de Arduino. Cada LDR (en serie con una resistencia de 27 kΩ) alimenta un relé de 5 V. De este modo, muchas combinaciones NeoPixel/LDR pueden controlarse desde 1 pin de Arduino usando la librería Adafruit_NeoPixel. En lugar de relés, podrían conectarse otros actuadores, usando los LDR como entrada para cualquier circuito.
En este proyecto (parte de uno mayor) se usa un ESP32 (NodeMCU), pero un Arduino Uno normal (u otro modelo) funciona igual.
Paso 1: Fabricar los optoacopladores NeoPixel
El optoacoplador casero se hace con:
- Un trozo de tira LED de 10 WS2812 (cortada de una tira mayor); solo se usan 4 en el proyecto
- Un trozo de espuma gris oscura
- Una tira de protoboard
- Cinta aislante negra (duck tape)


Nota: la separación de los puntos coincide con la separación de los LED.
Es crucial aislar la luz de cada LED para que no afecte a los LDR vecinos («light cross-talk»). En la práctica es casi imposible aislar totalmente, por lo que en software se fija el brillo de los LED en nivel bajo, suficiente para activar el relé vía LDR.

La tira tiene 10 LED pero solo se usan 4 pixels con 4 LDR (para simplificar).
Paso 2: Montaje electrónico
En la protoboard usé un ESP32s (NodeMCU), pero cualquier Arduino sirve.
El esquema (hecho con Fritzing) es:

En la práctica queda así:

Como se ve, solo 1 pin de salida controla 4 relés en paralelo. Este número puede subir hasta 300 (tantos LED como haya en una tira de 5 m).
El ESP32 trabaja a 3,3 V (regulador integrado), mientras la tira NeoPixel 5050 funciona a 5 V. El ESP32 se alimenta con 5 V (puerto USB desde adaptador o powerbank 5 V). Los NeoPixel toman los 5 V directamente del pin 5 V del ESP32; los relés también son de 5 V.
En el ejemplo, 4 circuitos optoacopladores controlan 4 relés, cada uno con una lámpara 230 V. El pin de salida usado es GPIO 21 y los relés se dirigen mediante los números de pixel 1, 2, 3, 4.
Paso 3: Software
La función loop() es simple: una serie de bucles for que muestran distintos patrones de encendido de lámparas controlando cada relé.
Para controlar un relé concreto se llama a esta función desde el loop:
void ControlRelais (int RelaisNo, bool RelaisState) {
strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
strip.show();
Serial.print(" RelaisNo ");
Serial.print(RelaisNo);
Serial.print(" = ");
Serial.println(RelaisState);
}
Esta función solo enciende o apaga un LED concreto. La dirección del LED corresponde al número de relé. Los LED se encienden a bajo brillo (valor 15), justo lo necesario para disparar el relé vía LDR, evitando así contaminación lumínica («light cross-talk»).
El resultado del sketch se muestra en el vídeo adjunto.
Código
Sketch para controlar múltiples relés mediante optoacopladores NeoPixel caseros (Arduino)
/* Control de múltiples relés/actuadores desde un solo pin de Arduino
Desarrollado por Pierre Pennings (diciembre 2018)
Licencia GPL3+
*/
#include <Adafruit_NeoPixel.h>
#define NUM_LEDS 10
// Pin de control
const int RelaisPin = 21; // GPIO 21 envía datos (0-3.3V) a la tira
int RelaisNo = 0;
bool RelaisState = false;
int r = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, RelaisPin, NEO_RGB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
pinMode(RelaisPin, OUTPUT);
strip.begin();
// Test de encendido al arranque
for (int t = 0; t < 10; t++) {
strip.setPixelColor(t, 15, 15, 15);
strip.show();
delay(500);
strip.setPixelColor(t, 0, 0, 0);
}
}
void loop() {
// Secuencia 1: encender relés 1-4 uno a uno
for (int r = 1; r < 5; r++) {
delay(500);
ControlRelais(r, true);
delay(500);
ControlRelais(r, false);
}
// Secuencia 2: encender relés 4-1 descendente
for (int k = 4; k > 0; k--) {
delay(500);
ControlRelais(k, true);
delay(500);
ControlRelais(k, false);
}
// Secuencia 3: patrón combinado
for (int r = 1; r < 5; r++) {
for (int k = 4; k > 0; k--) {
delay(500);
ControlRelais(r, true);
ControlRelais(k, true);
delay(500);
ControlRelais(r, false);
ControlRelais(k, false);
}
}
}
void ControlRelais(int RelaisNo, bool RelaisState) {
strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
strip.show();
Serial.print(" RelaisNo ");
Serial.print(RelaisNo);
Serial.print(" = ");
Serial.println(RelaisState);
}
Esquemáticos
Archivo Fritzing: neopixel_optocoupler_relais__hNIrhGIMtD.fzz
Proceso de manufactura
- Construya Efectos de Audio Controlados por Sensores con el Kit Satellite CCRMA
- Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
- Panel de interruptores y LEDs para Microsoft Flight Simulator 2020 con Arduino
- Pantalla LED Interactiva con Giroscopio, Anillo NeoPixel y Arduino
- Persianas Inteligentes: Control Automático de Luz con Arduino y Energía Solar
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Controla tu Roomba Create 2 con Arduino y Android: Guía Completa
- Construye un Robot Cuadrúpedo Inteligente con Arduino: Guía Paso a Paso
- Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
- Control de brillo LED sin interrupciones con Bolt IoT y Arduino UNO