使用您的 Arduino 控制多达 65,280 个继电器!
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
使用 IO 扩展器和继电器扩展器控制多达 65,280 个继电器。
需要在您的项目中添加大量继电器吗?那么您需要带有继电器扩展器的 IO 扩展器。每个 IO 扩展器最多可以控制 16 个菊花链式继电器扩展器,总共 256 个继电器。然后将 255 个 IO 扩展器连接在一起,您可以有选择地控制多达 65,280 个继电器。
带有单个 IO 扩展器的控制继电器
功能列表
- 使用便宜的 <15 美元 Arduino 16 继电器板。
- 易于使用的继电器控制命令。
- 一次控制单个继电器或银行。
- 无需驱动程序。节省代码空间。
- 没有数据空间来维持中继状态。
- 无需额外的电源。
构建继电器组所需的部件
- IO 扩展器
- IO 扩展器
- 中继扩展器
- Arduino 16 继电器板
接线图
注意: 在上面的接线图中,IO 扩展器和 Arduino Nano 由第一个继电器板供电。所有继电器扩展器都由它们所连接的继电器板供电。
/* IO Expander
*
* 控制 64 个继电器
*
*/
#include
# include "IOExpander.h"
#include
//#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();
}
多个 IO 扩展器控制继电器
另一种控制继电器的方法是使用多个 IO 扩展器。这使我们能够将传感器和继电器分配到中央或星型网络,但仍将所有 IO 扩展器互连到单个串行总线上。如果您必须将 IO 扩展器分开长达 4000 英尺,请使用如下所示的 IO 扩展器和标准的蓝色 Cat5 网络线。
接线图
注意: 在上面的接线图中,所有 IO 扩展器和 Arduino Nano 都由第一个继电器板通过串行总线供电。所有继电器扩展器都由它们所连接的继电器板供电。
/* IO 扩展器
*
* 带有 IO 扩展器的 Relay Bonnaza!
*
*/
#include
#include "IOExpander9Bit.h"
#include
#define MAX_BOARDS 4
char cmd[10];
void setup()
{
Serial9Bit.begin(115200, SERIAL_9N1);
Serial9Bit.write(0); // 将 IO 扩展器设置为 9 位
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( );
}
那么为什么我需要控制这么多继电器?
一种这样的应用是在鱼菜共生或水培中。许多传感器和设备需要自动化到每个种植床或单个植物。这需要极高的 IO,而 IO 扩展器可以提供。
因此,立即获取您的 IO 扩展器并构建您的系统!
代码
- 使用单个扩展器控制 64 个继电器
- 使用多个扩展器控制 64 个继电器
使用单个扩展器控制 64 个继电器C/C++
/* IO Expander * * Control 64 Relays * */#include#include "IOExpander.h"#include //#define SERIAL_DEBUG#define MAX_RELAYS 64#ifdef SERIAL_DEBUGSoftwareSerial swSerial(8,7);#endifchar 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);如果 (i++>=MAX_RELAYS) i =1; sprintf(cmd, "e%do", i); SerialCmdDone(cmd);延迟(100); wdt_reset();}
使用多个扩展器控制 64 个继电器C/C++
/* IO 扩展器 * * 带有 IO 扩展器的 Relay Bonnaza! * */#include#include "IOExpander9Bit.h"#include #define MAX_BOARDS 4char cmd[10];void setup(){ Serial9Bit.begin(115200, SERIAL_9N1); Serial9Bit.write(0); // 将 IO 扩展器设置为 9 位 wdt_enable(WDTO_8S); for (int board =1; board <=4; board++) SerialCmdDone(board, "eb1");}void loop(){ static int board =1;静态 int 中继 =1; sprintf(cmd, "e%df", 中继); SerialCmdDone(board, cmd);如果(++继电器> 16){继电器=1;如果(++板> MAX_BOARDS)板=1; } sprintf(cmd, "e%do", 中继); SerialCmdDone(board, cmd);延迟(100); wdt_reset();}
示意图
制造工艺