Управление до 65 280 реле с Arduino: расширители IO и реле
Компоненты и материалы
- Arduino Nano R3 — 1 шт. (главный контроллер)
- IO Expander — 1 шт. (базовый модуль расширения)
- Relay Expander — 1 шт. (модуль реле для каскадирования)
- IO Extender — 1 шт. (для увеличения дальности связи)
- Arduino 16 Relay Board — 1 шт. (стандартная плата с 16 реле)
Программное обеспечение
- Arduino IDE
О проекте
Система IO Expander позволяет управлять до 65 280 реле от одного Arduino.
- Один IO Expander управляет до 16 каскадно подключенных Relay Expander'ов = 256 реле.
- Максимум 255 IO Expander'ов на одной шине = 255 × 256 = 65 280 реле.
Управление реле через один IO Expander
Ключевые особенности
- Используются дешевые платы реле (< $15 за 16 реле).
- Простые команды управления отдельным реле или банком.
- Драйверы не требуются — экономия памяти кода и данных.
- Дополнительное питание не нужно (питаются от плат реле).
Необходимые детали для сборки банка реле
- IO Expander
- IO Extender
- Relay Expander
- Arduino 16 Relay Board
Схема подключения (один IO Expander)
Пример кода (один IO Expander, 64 реле)
/* IO Expander - Control 64 Relays */
#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); // Инициализация 4 банков (64/16)
SerialCmdDone(cmd);
}
void loop() {
static int i = 1;
sprintf(cmd, "e%df", i); // Включить реле i
SerialCmdDone(cmd);
if (i++ >= MAX_RELAYS) i = 1;
sprintf(cmd, "e%do", i); // Выключить реле i
SerialCmdDone(cmd);
delay(100);
wdt_reset();
}
Несколько IO Expander'ов (распределенная сеть)
Для распределения датчиков и реле по удаленным узлам (до 4000 футов) используются IO Extender'ы и витая пара Cat5.
Схема подключения (несколько IO Expander'ов)
Пример кода (4 IO Expander'а, 64 реле)
/* IO Expander - Relay Bonanza with IO Expanders! */
#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); // Перевод IO Expander'ов в 9-битный режим
wdt_enable(WDTO_8S);
for (int board = 1; board <= 4; board++)
SerialCmdDone(board, "eb1"); // Инициализация каждого на 1 банк (16 реле)
}
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();
}
Зачем нужно столько реле? Пример: аквапоника/гидропоника
В аквапонике/гидропонике множество датчиков и исполнительных механизмов (насоса, клапаны, освещение) на каждую грядку или даже растение. IO Expander решает проблему нехватки пинов и расстояния.
Производственный процесс
- Управление потолочным вентилятором через Alexa: пошаговое руководство
- Умная копилка: управление монетоприёмником на Arduino Nano
- Arduino Power Control Center: N-FET, P-FET, реле и RTC
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Управление двумя шаговыми двигателями через джойстик на Arduino Nano — простой урок (Visuino)
- Управление светодиодом Arduino через Cortana по Bluetooth в Windows 10
- ThimbleKrox: управление мышью с пальца на Arduino Micro и MPU-6050
- Беспроводное управление домашним освещением со смартфона через 1Sheeld
- Управление 4-пиновым PWM-вентилятором 25 кГц на Arduino Uno — Сборка, код и тесты