Arduinoで最大65,280個のリレーを制御できます!
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
IOエキスパンダーとリレーエキスパンダーを使用して、最大65,280個のリレーを制御します。
プロジェクトに多くのリレーを追加する必要がありますか?次に、リレーエキスパンダーを備えたIOエキスパンダーが必要です。各IOエキスパンダーは、最大16個のデイジーチェーン接続されたリレーエキスパンダーを制御して、合計256個のリレーを実行できます。次に、255個のIOエキスパンダーを接続すると、最大65,280個のリレーを選択的に制御できます。
単一のIOエキスパンダーを備えた制御リレー <図>
機能リスト
- 安価な<$ 15 Arduino16リレーボードを使用してください。
- リレー制御コマンドを簡単に使用できます。
- 一度に個々のリレーまたはバンクを制御します。
- ドライバーは必要ありません。コードスペースを節約します。
- リレー状態を維持するためのデータスペースがありません。
- 追加の電源は必要ありません。
リレーバンクを構築するために必要な部品
- IOエキスパンダー
- IOエクステンダー
- リレーエキスパンダー
- Arduino16リレーボード
配線図 <図>
注: 上の配線図では、IOExpanderとArduinoNanoは最初のリレーボードから電力を供給されています。すべてのリレーエキスパンダーは、接続されているリレーボードから電力を供給されます。
/ * IOエキスパンダー
*
* 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エキスパンダーを相互接続することができます。最大4000フィートのIOエクスパンダーを分離する必要がある場合は、以下に示すように、標準の青いCat5ネットワークワイヤーでIOエクステンダーを使用します。
<図>
配線図 <図>
注: 上の配線図では、すべてのIOエキスパンダーとArduino Nanoは、シリアルバスを介して最初のリレーボードから電力を供給されています。すべてのリレーエキスパンダーは、接続されているリレーボードから電力を供給されます。
/ * IOエキスパンダー
*
* IOエキスパンダーで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(++リレー> 16){
リレー=1;
if(++ボード> MAX_BOARDS)ボード=1;
}
sprintf(cmd、 "e%do"、relay);
SerialCmdDone(board、cmd);
delay(100);
wdt_reset( );
}
では、なぜこれほど多くのリレーを制御する必要があるのでしょうか?
そのようなアプリケーションの1つは、アクアポニックスまたは水耕栽培です。多くのセンサーとデバイスは、各栽培床または個々の植物に至るまで自動化する必要があります。これには極端なIOが必要であり、IOExpanderが提供します。
<図>今すぐIOExpanderを入手して、システムを構築してください!
コード
- 単一のエキスパンダーで64個のリレーを制御する
- 複数のエキスパンダーで64個のリレーを制御する
単一のエキスパンダーで64個のリレーを制御する C / C ++
/ * IOエキスパンダー**コントロール64リレー** /#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); if(i ++> =MAX_RELAYS)i =1; sprintf(cmd、 "e%do"、i); SerialCmdDone(cmd); delay(100); wdt_reset();}
複数のエキスパンダーを使用して64個のリレーを制御する C / C ++
/ * IOエキスパンダー** IOエキスパンダーで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; static int relay =1; sprintf(cmd、 "e%df"、リレー); SerialCmdDone(board、cmd); if(++リレー> 16){リレー=1; if(++ board> MAX_BOARDS)board =1; } sprintf(cmd、 "e%do"、relay); SerialCmdDone(board、cmd); delay(100); wdt_reset();}
回路図
製造プロセス