Controla 65.280 Relés con Arduino: Soluciones Expandibles de E/S y Relés
Componentes y suministros
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino Nano R3 | 1 | |
| Expansor E/S | 1 | Expansor E/S |
| Expansor Relés | 1 | |
| Extensor E/S | 1 | |
| Placa 16 Relés Arduino | 1 |
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Usa el Expansor E/S y Expansor Relés para controlar hasta 65.280 relés.
¿Necesitas añadir muchos relés a tu proyecto? Entonces necesitas el Expansor E/S con Expansores de Relés. Cada Expansor E/S puede controlar hasta 16 Expansores de Relés en cadena para un total de 256 relés. Luego, conectando 255 Expansores E/S juntos puedes controlar selectivamente hasta 65.280 relés.
Controlar relés con un solo Expansor E/S

Lista de características
- Usa placas de 16 relés Arduino baratas (< $15).
- Comandos de control de relés fáciles de usar.
- Controla un relé individual o un banco a la vez.
- No se requiere driver. Ahorra espacio de código.
- No se necesita espacio de datos para mantener estado de relés.
- No se necesita fuente de alimentación extra.
Partes necesarias para construir un banco de relés
- Expansor E/S
- Extensor E/S
- Expansor Relés
- Placa 16 Relés Arduino
Diagrama de cableado

Nota: En el diagrama anterior, el Expansor E/S y Arduino Nano son alimentados por la primera placa de relés. Todos los Expansores de Relés son alimentados desde la placa de relés a la que están conectados.
/* Expansor E/S
* Control 64 Relés
*/
#include <SoftwareSerial.h>
#include "IOExpander.h"
#include <avr/wdt.h>
//#define SERIAL_DEBUG
#define MAX_RELAYS 64
#ifdef SERIAL_DEBUG
SoftwareSerial swSerial(8,7);
#endif
char cmd[10];
void setup() {
Serial.begin(115200);
#ifdef SERIAL_DEBUG
swSerial.begin(115200);
swSerialEcho = &swSerial;
#endif
wdt_enable(WDTO_8S);
sprintf(cmd, "eb%d", MAX_RELAYS / 16);
SerialCmdDone(cmd);
}
void loop() {
static int i = 1;
sprintf(cmd, "e%df", i);
SerialCmdDone(cmd);
if (i++ >= MAX_RELAYS) i = 1;
sprintf(cmd, "e%do", i);
SerialCmdDone(cmd);
delay(100);
wdt_reset();
}
Múltiples Expansores E/S Controlando Relés
Otra forma de controlar relés es usar múltiples Expansores E/S. Esto nos da la capacidad de distribuir sensores y relés a una red central o en estrella, pero seguir interconectando todos los Expansores E/S en un bus serial único. Si tienes que separar los Expansores E/S hasta 4000 pies, usa los Extensores E/S como se muestra abajo con cable de red Cat5 estándar azul.

Diagrama de cableado

Nota: En el diagrama anterior, todos los Expansores E/S y Arduino Nano son alimentados por la primera placa de relés a través del bus serial. Todos los Expansores de Relés son alimentados desde la placa de relés a la que están conectados.
/* Expansor E/S
* ¡Bonanza de Relés con Expansores E/S!
*/
#include <HardwareSerial9Bit.h>
#include "IOExpander9Bit.h"
#include <avr/wdt.h>
#define MAX_BOARDS 4
char cmd[10];
void setup() {
Serial9Bit.begin(115200, SERIAL_9N1);
Serial9Bit.write(0); // Configurar Expansores E/S a 9-bit
wdt_enable(WDTO_8S);
for (int board = 1; board <= 4; board++)
SerialCmdDone(board, "eb1");
}
void loop() {
static int board = 1;
static int relay = 1;
sprintf(cmd, "e%df", relay);
SerialCmdDone(board, cmd);
if (++relay > 16) {
relay = 1;
if (++board > MAX_BOARDS) board = 1;
}
sprintf(cmd, "e%do", relay);
SerialCmdDone(board, cmd);
delay(100);
wdt_reset();
}
¿Por qué necesito controlar tantos relés?
Una aplicación es en acuaponía o hidropónica. Muchos sensores y dispositivos necesitan automatizarse hasta cada lecho de cultivo o planta individual. Esto requiere E/S extrema y el Expansor E/S lo proporciona.

¡Consigue tu Expansor E/S hoy y construye tu sistema!
Código
Controlar 64 Relés con un Solo Expansor (C/C++)
/* Expansor E/S * Control 64 Relés * */
#include <SoftwareSerial.h>
#include "IOExpander.h"
#include <avr/wdt.h>
//#define SERIAL_DEBUG
#define MAX_RELAYS 64
#ifdef SERIAL_DEBUG
SoftwareSerial swSerial(8,7);
#endif
char cmd[10];
void setup() {
Serial.begin(115200);
#ifdef SERIAL_DEBUG
swSerial.begin(115200);
swSerialEcho = &swSerial;
#endif
wdt_enable(WDTO_8S);
sprintf(cmd, "eb%d", MAX_RELAYS / 16);
SerialCmdDone(cmd);
}
void loop() {
static int i = 1;
sprintf(cmd, "e%df", i);
SerialCmdDone(cmd);
if (i++ >= MAX_RELAYS) i = 1;
sprintf(cmd, "e%do", i);
SerialCmdDone(cmd);
delay(100);
wdt_reset();
}
Controlar 64 Relés con Múltiples Expansores (C/C++)
/* Expansor E/S * ¡Bonanza de Relés con Expansores E/S! * */
#include <HardwareSerial9Bit.h>
#include "IOExpander9Bit.h"
#include <avr/wdt.h>
#define MAX_BOARDS 4
char cmd[10];
void setup() {
Serial9Bit.begin(115200, SERIAL_9N1);
Serial9Bit.write(0); // Configurar Expansores E/S a 9-bit
wdt_enable(WDTO_8S);
for (int board = 1; board <= 4; board++)
SerialCmdDone(board, "eb1");
}
void loop() {
static int board = 1;
static int relay = 1;
sprintf(cmd, "e%df", relay);
SerialCmdDone(board, cmd);
if (++relay > 16) {
relay = 1;
if (++board > MAX_BOARDS) board = 1;
}
sprintf(cmd, "e%do", relay);
SerialCmdDone(board, cmd);
delay(100);
wdt_reset();
}
Esquemáticos
Proceso de manufactura
- Controla tu Ventilador de Techo con Alexa: Guía Paso a Paso
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Centro de Control de Potencia Arduino: N-FET, P-FET, Relé y RTC
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Controla Dos Motores Paso a Paso con Arduino Nano y Joystick - Tutorial Sencillo
- Controlar un LED de Arduino con Cortana vía Bluetooth en Windows 10
- ThimbleKrox: Control de ratón montado en el dedo con Arduino Micro y MPU-6050
- Control Inalámbrico de Iluminación Doméstica desde Smartphone con 1Sheeld
- Sistema DIY de Control de Cucarachas con Arduino – Construcción por Menos de $30
- Control de Ventilador PWM de 4 Pines a 25 kHz con Arduino Uno – Montaje, Código y Pruebas