同時に数百のリレーを制御/同期する
コンポーネントと消耗品
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 1 |
このプロジェクトについて
何百ものリレーをすべて同時に制御および同期する必要がありますか?次に、Arduino、ESP8266、Pi、PC、またはMacをリレーエキスパンダーを備えたIOエキスパンダーに接続し、新しい外部ラッチ機能を使用します。
これにより、ラッチする準備ができている非常にコンパクトなビット形式で新しいリレー設定を送信できます。次に、MCUまたはIOエキスパンダーからの単一のGPIOラインを使用して、すべてのラッチされたデータを同時に出力します。
Arduinoプロジェクトで最大65、280のリレーを制御するをご覧ください!
では、外部ラッチ用のIOエキスパンダーをセットアップするには何が必要ですか? IOエキスパンダーの簡単なコマンド構造を使用して、外部ラッチを使用してx16リレーボードを制御する簡単な使用例を設定しましょう。
[g] pioピン[4]を[1]レベルの高い[o]出力として設定し、[g] pioピン[10]で[n]負のエッジ検出を有効にし、最後にリレー[e]を有効にします。 xpander external [l] atch on pin [10]。
> g4o1; g10n; el10
ok
ok
10
>
これで、リレー[e] xpanders [o] n / o [f] f / [s] etを回し、外部ラッチを使用して、[g] pioピン[4]を[o]出力として設定して有効にすることができます。 [1]ミリ秒の間低い[0]レベル。ピン4をハイ状態に戻して、再びラッチできるようにします。
> e1o; e10o; e16o
ok
ok
ok
> g4o0,1
ok
>
Arduino Nanoを使用して、このプロジェクトをx2 IOエキスパンダー、x2リレーエキスパンダー、x216リレーボードに拡張してみましょう。 x2 IOエキスパンダーは、最大255のIOエキスパンダーを備えたマルチドロップ9ビットプロトコルを使用して相互に接続されます。
IOエキスパンダーの外部ラッチ図 <図>
Arduinoコード
/ * IOエキスパンダー
*
*リレーエキスパンダーの外部ラッチ
*
* /
#include
#include "IOExpander9Bit.h"
#include
//#define SERIAL_DEBUG
#define MAX_BOARDS 2
#ifdef SERIAL_DEBUG
SoftwareSerial swSerial(8,7);
#endif
void setup()
{
Serial9Bit.begin(115200 、SERIAL_9N1);
Serial9Bit.write(0); // IOエクスパンダを9ビットに設定
#ifdef SERIAL_DEBUG
swSerial.begin(115200);
swSerialEcho =&swSerial;
#endif
wdt_enable(WDTO_8S);
for(uint8_t board =1; board <=MAX_BOARDS; board ++)
SerialCmdDone(board、 "eb1");
SerialCmdDone(1、 "g4o1; g10n; el10 "); //リレーの外部ラッチ用にGPIOを設定します
SerialCmdDone(2、 "g10n; el10");
}
void loop()
{
static uint16_t i =0;
uint8_t r [2];
r [0] =〜(uint8_t)(i>> 8);
r [1] =〜 (uint8_t)i ++;
SerialWriteRelayExpander(1、r、2);
delay(50);
r [0] =〜r [0]; //ボード2上のすべてのリレーを反転します
r [1] =〜r [1];
SerialWriteRelayExpander(2、r、2);
delay(50);
SerialCmdDone(1、 "g4o0,1"); //すべてのリレーをラッチします
wdt_reset();
}
IOエキスパンダーの外部ラッチの動作
今すぐIOExpanderを入手して、システムを構築してください!
コード
- IOエキスパンダーの外部ラッチ
IOエキスパンダー外部ラッチ Arduino
/ * IOエキスパンダー**リレーエキスパンダー外部ラッチ** /#include#include "IOExpander9Bit.h" #include //#define SERIAL_DEBUG#define MAX_BOARDS 2#ifdef SERIAL_DEBUGSoftwareSerial swSerial(8,7);#endifvoid setup(){Serial9Bit.begin(115200、SERIAL_9N1); Serial9Bit.write(0); // IOエキスパンダーを9ビットに設定します#ifdef SERIAL_DEBUG swSerial.begin(115200); swSerialEcho =&swSerial; #endif wdt_enable(WDTO_8S); for(uint8_t board =1; board <=MAX_BOARDS; board ++)SerialCmdDone(board、 "eb1"); SerialCmdDone(1、 "g4o1; g10n; el10"); //リレーの外部ラッチ用にGPIOを設定しますSerialCmdDone(2、 "g10n; el10");} void loop(){static uint16_t i =0; uint8_t r [2]; r [0] =〜(uint8_t)(i>> 8); r [1] =〜(uint8_t)i ++; SerialWriteRelayExpander(1、r、2); delay(50); r [0] =〜r [0]; //ボード2のすべてのリレーを反転しますr [1] =〜r [1]; SerialWriteRelayExpander(2、r、2); delay(50); SerialCmdDone(1、 "g4o0,1"); //すべてのリレーをラッチしますwdt_reset();}外部ラッチ
回路図
製造プロセス