多くのリレーを制御するNeoPixelオプトカプラーを備えたArduino
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 4 | |||
![]() |
| × | 4 | |||
![]() |
| × | 4 | |||
| × | 1 | ||||
![]() |
| × | 1 |
必要なツールとマシン
> ![]() |
| |||
|
アプリとオンラインサービス
|
このプロジェクトについて
このプロジェクトは、単一のArduino出力ピンから複数のリレーまたは他のアクチュエーターを制御することに関するものです。
このソリューションは、利用可能なArduino出力ピンの数が不十分で、リレーなどのより多くのアクチュエーターを単一の出力ピンから並列に制御する必要がある一般的な状況に使用できます。
動作原理は、多数のNeoPixelsのLEDストリップ(WS2812Bコントローラーチップを備えたSMD5050 LED)の使用に基づいています。すべてのピクセルがLDR(Light Dependent Resistor)と組み合わされて、DIYオプトカプラーが作成されます(必要な数だけ、LEDストリップの長さ(300ピクセルなど)と利用可能な5V電源によってのみ制限されます)。このようにして、シリアルからパラレルへの変換が作成されます(1から多数)
すべての個々のLEDは、1つの同じArduino出力ピンからアドレス指定されます。各LDR(27kOhm抵抗と直列)は、5Vリレーに接続されています。このようにして、Adafruit NeoPixelライブラリを使用して、1つのArduino出力PINから多くのNeoPixel / LDRの組み合わせを制御できます。リレーの代わりに、LDRを任意の回路への入力として使用して、他のアクチュエータデバイスを接続することもできます。
より大きな計画の一部であるこのプロジェクトでは、ESP32(NodeMCU)が使用されます。ただし、通常のArduino Uno(または他のほとんどのモデル)がその役割を果たします。
ステップ1:NeoPixelオプトカプラーを作成する
DIYオプトカプラーは次の材料で作られています:
- 10個のWS2812LED(長いストリップから切り取ったもの)で構成されるLEDストリップは、プロジェクトで実際に使用されているのは4個だけです
- 濃い灰色の泡
- ブレッドボードのストリップ
- 黒いガムテープ

<図>

注:ドットの間隔は、LEDの間隔と同じです。
「ライトクロストーク」を回避するために、個々のLEDのライトを他のLEDのLDRから分離することが重要です。 。 "実際にはこれはほとんど不可能であることが判明したため、「オン」状態の各LEDから放出される光の量は、ソフトウェアで低レベルに設定されています。
<図>
使用されるLEDストリップは10個のLEDの長さですが、このプロジェクトでは4つのLDRと組み合わせて使用されるのは4ピクセルのみです(単純にするため)
ステップ2:電子セットアップ
ブレッドボードのセットアップでは、ESP32(NodeMCU)を使用しましたが、どのArduinoでもその作業を実行できます。
回路図(Fritzingで作成)は次のとおりです。
<図>
実際には、これは次のようになります。
<図>
ご覧のとおり、4つのリレーを並列に制御するために使用される出力ピンは1つだけです。この数は300まで上がる可能性があります! (5 mの長さのストリップで利用可能な限り多くのLED)。
ESP32デバイスは3.3ボルトレベル(オンボード3.3V電圧レギュレーター)で動作し、5050LEDを備えたLEDストリップは5Vで動作します。ESP32には5V電源が供給されます(5Vアダプターまたは5VからのUSBポートを介して)パワー・バンク)。 NeoPixel LEDは、ESP32の5ボルトピンから直接5V電源を取得し、使用されるリレーも5Vタイプです。
この例では、それぞれ1つの230Vランプに接続された4つのリレーを制御する4つのオプトカプラー回路が使用されています。
使用される出力ピンはGPIOPIN 21であり、リレーはピクセル番号1、2、3、4を介して制御されます。
ステップ3:ソフトウェアを作成する
Arduino Sketchのループ機能はシンプルで、各リレーを制御することでランプを切り替えるさまざまなパターンを示す多数の「for」ループで構成されています。
特定のリレーを制御するために、ループコード内から次の関数が呼び出されます:
void ControlRelais(int RelaisNo、bool RelaisState){strip.setPixelColor(RelaisNo、RelaisState * 15、RelaisState * 15、RelaisState * 15); // RelaisNo strip.show();に属するLEDをオン/オフにします。 Serial.print( "RelaisNo"); Serial.print(RelaisNo); Serial.print( "="); Serial.println(RelaisState); }
実際、この機能はすべて、特定のLEDをオンにするか、オフにするだけです。
LEDアドレスはそれぞれのリレー番号に対応しています。 LEDは、LDRを介してリレーをトリガーするのに十分な低光レベルで点灯するため、光害を回避できます(上記では「光クロストーク」とも呼ばれます。
すべての努力と特定のスケッチの結果は、次の映画に示されています:
コード
- 自作のNeoPixelオプトカプラーを介して複数のリレーを制御するためのスケッチ
自作のNeoPixelオプトカプラーを介して複数のリレーを制御するためのスケッチ Arduino
このスケッチは、1つのARDUINO出力ピンから制御されるNeoPixelsで作成された複数のオプトカプラーを介して多数のリレーを制御する方法を示しています/ *単一のArduino出力ピンから複数のRelaisまたは他のアクチュエーターを制御するためのこのコードは、Pierreによって開発および製造されましたペニング(2018年12月)このソリューションは、利用可能なArduino出力ピンの数が不十分で、Relaisなどのより多くのアクチュエーターを並列に制御する必要がある一般的な状況に使用できます。動作の原理は、多数のネオピクセルのストリップを使用することに基づいています(WS2812Bコントローラーチップを搭載したSMD5050 LED)すべてのピクセルがLDR(光依存抵抗器)と組み合わされ、DIYオプトカプラーが作成されますすべての個々のLEDは、1つの同じARDUINO出力ピンとLDR(27kOhm抵抗器と直列)からアドレス指定されます)、5Vリレーに接続されていますこのようにして、Adafruit Neopixelライブラリを使用して、1つのArduino出力PINから多くのNeopixel / LDRの組み合わせを制御できます。より大きな計画の一部であるこのプロジェクトでは、ESP 32(NodeMCU)が使用されますが、通常のARDUINO UNO(または他のほとんどすべてのモデル)がその役割を果たします(もちろん、コードの設定を調整する必要があります)たとえば、ピン割り当てが異なるため)ESP32デバイスは3.3ボルトレベル(オンボード3.3V電圧レギュレーター)で動作しますが、5050LEDを備えたLEDストリップは5Vで動作しますESP32には5V電源が供給されます(経由5Vアダプターまたは5VパワーバンクからのUSBポート)Neopixel LEDは、ESP 32の5ボルトピンから直接5V電源を取得し、使用されるRelaisも5Vタイプです。この例では、10個のLEDのLEDストリップが使用されています。簡単にするために、それぞれ1つの230VLEDランプに接続された4つのリレーを制御する4つのオプトカプラー回路のみが作成されています。使用される出力ピンはGPIOPIN 21であり、RELAISはピクセル番号1、2、3、4を介して制御されます。このコードはGPL3 +ライセンスの下でライセンスされています。* /#include#define NUM_LEDS 10 ////// /////////////////////////////////////////// GPIO pinconst int RelaisPin =21; //ピン21は制御データ(0 -3.3 V)をRelaisintに送信しますRelaisNo =0; //適用可能なRelaisを制御するための変数boolRelaisState =false; int r =0; Adafruit_NeoPixel strip =Adafruit_NeoPixel(NUM_LEDS、RelaisPin、NEO_RGB + NEO_KHZ800); ///////////////// //////////////////////////////////次のセットアップコードは、「電源オン」の後または後に1回実行されますRESETvoid setup(){Serial.begin(115200); pinMode(RelaisPin、OUTPUT); // RelaisPinを出力strip.begin();として初期化します//すべてのLEDを「オフ」に初期化しますfor(int t =0; t <10; t ++){strip.setPixelColor(t、15、15、15); //電源投入後、ストリップのすべてのLEDが一度テストされますstrip.show(); // WS2812 LEDストリップの色の順序はR、G、B遅延(500)であることに注意してください。 strip.setPixelColor(t、0、0、0); //そしてオフに戻る}} ////////////////////////////////////////// /////////次のループコードは、「電源オフ」またはRESETvoid loop(){for(int r =1; r <5; r ++)// 4つのRelaisをオンにするまで繰り返し実行されます次々と1から4までのカウント形式{遅延(500); ControlRelais(r、true); delay(500); ControlRelais(r、false); } for(int k =4; k> 0; k-)// 4から1へのカウント形式で4つのRelaisを次々にオンにします{delay(500); ControlRelais(k、true); delay(500); ControlRelais(k、false); } for(int r =1; r <5; r ++)//パターン内の4つのリレーをオンにします{for(int k =4; k> 0; k-){delay(500); ControlRelais(r、true); ControlRelais(k、true); delay(500); ControlRelais(r、false); ControlRelais(k、false); }}} ////////////////// LOOPの終了////////////////////////// ////////////////////////////////// //////////////// ///////////////////////////////////以下は、(ループ内から呼び出される)Relaisを制御するための関数に従います。 void ControlRelais(int RelaisNo、bool RelaisState){strip.setPixelColor(RelaisNo、RelaisState * 15、RelaisState * 15、RelaisState * 15); // RelaisNo strip.show();に属するLEDをオン/オフにします。 Serial.print( "RelaisNo"); Serial.print(RelaisNo); Serial.print( "="); Serial.println(RelaisState); }
回路図
1つのArduinoピンから複数のリレーまたは他のアクチュエータを制御するように設定します製造プロセス