動作検出によるリレー制御

このArduinoプロジェクトは、パッシブ赤外線(PIR)センサーを使用してリレーで操作する照明を制御することを目的としています。PIRセンサーが動きを検出すると、リレーが活性化し、照明が点灯します。照明は最後に検出された動きから5秒間点灯したままです。

警告

このデモンストレーションでは、RGB LEDモジュールを制御するためにリレーを使用しています。しかし、現実のシナリオではこれが最も実用的な方法であるとは限りません。

実際の用途でリレーを他の機器に接続することはできますが、高電圧ACに対する極度の注意が必要です。不適切または誤った使用は重傷や死亡につながる可能性があります。したがって、高電圧ACに精通している方を対象としています。安全を最優先にしてください。

1. 回路の作成

../_images/05-fun_Motion_triggered_relay_circuit.png

2. コード

  1. 05-Motion_triggered_relay.ino ファイルを ultimate-sensor-kit\fun_project\05-Motion_triggered_relay のパスから開くか、このコードを Arduino IDE にコピーペーストしてください。

3. コードの説明

このプロジェクトは、PIR動作センサーの動きを検出する能力を中心に展開されています。動きが検出されると、Arduinoに信号が送られ、これがリレーモジュールをトリガーし、照明が活性化します。照明は、最後に検出された動き後、指定された期間(この場合は5秒)点灯したままとなります。

  1. 初期設定と変数の宣言

    この部分では、コード全体で使用される定数と変数を定義しています。リレーとPIRのピン、動きの遅延定数を設定し、最後に検出された動作の時間と動作検出のフラグを追跡する変数も用意しています。

    const int relayPin = 9;
    const int pirPin = 8;
    const unsigned long MOTION_DELAY = 5000;
    unsigned long lastMotionTime = 0;
    bool motionDetected = false;
    
  2. setup()関数内のピン設定

    setup() 関数で、リレーとPIRセンサーのピンモードを設定します。また、最初はリレーをオフにしています。

    void setup() {
      pinMode(relayPin, OUTPUT);
      pinMode(pirPin, INPUT);
      digitalWrite(relayPin, LOW);
    }
    
  3. loop()関数における主要なロジック

    loop() 関数は主要なロジックを含んでいます。PIRセンサーが動きを検出すると、 HIGH 信号を送り、リレーをオンにし、 lastMotionTime を更新します。特定の遅延(この場合は5秒)で動きがない場合、リレーはオフになります。

    このアプローチにより、動きが断続的または短時間であっても、最後に検出された動きから少なくとも5秒間ライトが点灯し、一貫した照明時間を提供します。

    void loop() {
      if (digitalRead(pirPin) == HIGH) {
        lastMotionTime = millis();
        digitalWrite(relayPin, HIGH);
        motionDetected = true;
      }
      if (motionDetected && (millis() - lastMotionTime >= MOTION_DELAY)) {
        digitalWrite(relayPin, LOW);
        motionDetected = false;
      }
    }