工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino & NeoPixel 自作オプトカプラで複数リレーを 1 ピン制御

概要

Arduino の出力ピンが足りないとき、NeoPixel(WS2812B)LED とフォトレジスタ(LDR)を組み合わせた自作オプトカプラで、1 本の出力ピンから複数のリレー(またはアクチュエータ)を独立制御する手法を紹介します。最大 300 系統(5m/300 LED ストリップの全長)まで拡張可能です。

原理

  1. NeoPixel ストリップの各 LED を個別にアドレッシング(1 ピンで制御可能)
  2. 各 LED に LDR を対向配置し、遮光材(黒色フォーム+黒テープ)で「光クロストーク」を防止
  3. LDR と直列抵抗(27kΩ)で分圧回路を構成、リレー駆動トランジスタのベースへ入力
  4. LED 点灯 → LDR 抵抗値低下 → トランジスタ ON → リレー駆動

必要な部品

部品数量備考
WS2812B LED ストリップ(5V、300 LED/m、5m巻き)110 LED 程度切り出して使用
フォトレジスタ (LDR, CdS セル)4リレー数に合わせて
抵抗 27kΩ4LDR 直列用(光電流調整)
5V リレーモジュール(4 回路版等)1または個別リレー ×4
Arduino UNO / Nano / ESP32 等1本例では ESP32 (NodeMCU) 使用
黒色フォーム、ブレッドボード、黒テープ適宜オプトカプラ筐体用
はんだ付け工具、配線材1式

製作手順

ステップ 1: 自作オプトカプラアレイの作成

  1. LED ストリップから必要数(例: 4)を切り出し、ピッチに合わせて LDR を配置
  2. 黒色フォームに LED と LDR のペアを埋め込み、黒テープで完全遮光
  3. LED のピッチ=LDR のピッチになるよう精密に配置(クロストーク防止の要)
  4. 実験では 10 LED 中 4 ペアのみ使用し、残りは未接続

ステップ 2: 電子回路の組み立て

ブレッドボード上に以下を構築:

注意: ESP32 は 3.3V ロジックですが、NeoPixel は 5V 駆動。ESP32 の 5V ピン(USB 入力直結)から NeoPixel とリレーに給電し、GPIO21 の 3.3V 出力で NeoPixel 制御可能(WS2812B は 3.3V ロジックでも動作)。

ステップ 3: ソフトウェア実装

Adafruit NeoPixel ライブラリを使用。リレー制御関数 ControlRelais(relayNo, state) で指定番目の LED を低輝度(RGB=15,15,15)点灯/消灯し、strip.show() で反映。

#include <Adafruit_NeoPixel.h>
#define NUM_LEDS 10
const int RelaisPin = 21; // ESP32 GPIO21
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, RelaisPin, NEO_RGB + NEO_KHZ800);

void setup() {
  Serial.begin(115200);
  pinMode(RelaisPin, OUTPUT);
  strip.begin();
  // 起動時テスト: 全 LED を順次点灯
  for (int t = 0; t < 10; t++) {
    strip.setPixelColor(t, 15, 15, 15);
    strip.show();
    delay(500);
    strip.setPixelColor(t, 0, 0, 0);
  }
}

void loop() {
  // パターン 1: 1→4 へ順次 ON/OFF
  for (int r = 1; r < 5; r++) {
    ControlRelais(r, true); delay(500);
    ControlRelais(r, false); delay(500);
  }
  // パターン 2: 4→1 へ順次 ON/OFF
  for (int k = 4; k > 0; k--) {
    ControlRelais(k, true); delay(500);
    ControlRelais(k, false); delay(500);
  }
  // パターン 3: 交差点灯
  for (int r = 1; r < 5; r++) {
    for (int k = 4; k > 0; k--) {
      ControlRelais(r, true); ControlRelais(k, true); delay(500);
      ControlRelais(r, false); ControlRelais(k, false);
    }
  }
}

void ControlRelais(int RelaisNo, bool RelaisState) {
  strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
  strip.show();
  Serial.print(" RelaisNo "); Serial.print(RelaisNo); Serial.print(" = "); Serial.println(RelaisState);
}

重要な設計上の考慮点

応用例

リソース

製造プロセス

  1. Satellite CCRMAキットでセンサー駆動オーディオエフェクトを構築
  2. Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
  3. Microsoft Flight Simulator 2020用Arduinoスイッチ&LEDパネル
  4. NeoPixelリングとArduinoで作るインタラクティブジャイロスコープLEDディスプレイ
  5. スマートブラインド:Arduinoとソーラー電源で実現する自動光制御
  6. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  7. Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
  8. ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
  9. スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
  10. Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
  11. Bolt IoTとArduino UNOでLED輝度をシームレス制御