応援クリックお願いします
応援クリックお願いします

🌿 LEDテープライトと人感センサー No1

アイキャッチ画像 電子工作入門
LEDテープ

夜中の足元をそっと照らすために、まずは Arduino で試してみる

最近、母が夜中にトイレへ行くことが増えてきました。 暗い廊下を歩くとき、足元が見えないのは危ないし、急に明るい照明をつけると眩しくて目が覚めてしまいます。 そこで、人が通ったときだけ足元をふわっと照らす装置を作れないかと考え、このプロジェクトを始めました。

私は電子工作の専門家ではなく、プログラムもほとんど書けません。 C言語の本を少し読んだ程度で、いきなりコードを書けと言われても正直むずかしいです。 だからこそ、AIの先生たちに相談しながら、配線の仕方やプログラムの組み立て方を教えてもらい、少しずつ形にしています。 素人が試行錯誤しながら作っている記録として読んでいただければ嬉しいです。

最終的には ESP32 に変えて、廊下に貼って実際に使える形にする予定ですが、 この No1 ではまず Arduino とブレッドボードを使って光るところまで を確認します。 机の上で動作を試しながら、基本の仕組みを理解する段階です。

アルデュイーノ1

🌱 人感センサーの反応のしかた

今回使っている人感センサーは、 真正面だけでなく、左右45度くらいまでゆっくり広がるように反応するタイプ です。

センサーの前を通った瞬間にピッと反応するというより、 中心からじわっと広がるように「人が近づいてきた気配」を拾う感じです。

そのため、

  • 正面はもっとも反応しやすい
  • 左右45度くらいまで反応する
  • 真横は反応しにくい
  • ゆっくり近づくと反応しやすい

という特徴があります。

廊下のように「ゆっくり歩いてくる場所」ではとても自然に反応してくれるので、 今回の足元ライトとの相性も良いセンサーです。

#include <Adafruit_NeoPixel.h>

#define PIR_PIN    2    // SR602 OUTピン
#define LED_PIN    6    // テープLED DINピン
#define NUM_LEDS  58    // 使用するLEDの個数

// 最後の反応から点灯を維持する時間(ミリ秒): 30秒 = 30000
const unsigned long KEEP_ON_TIME = 10000; 

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

unsigned long lastTriggerTime = 0; // 最後に人を検知した時刻
bool isLit = false;

void setup() {
  pinMode(PIR_PIN, INPUT);
  strip.begin();
  strip.show(); // 初期状態:消灯
}

void loop() {
  int val = digitalRead(PIR_PIN);
  unsigned long currentMillis = millis();

  // センサーが反応したら時刻を更新
  if (val == HIGH) {
    lastTriggerTime = currentMillis;
  }

  // 最後の検知から設定時間(30秒)以内であれば点灯
  if (currentMillis - lastTriggerTime < KEEP_ON_TIME) {
    if (!isLit) {
      // ふわっと優しく点灯(温かみのある電球色:R=120, G=40, B=5 程度)
      for (int b = 0; b <= 100; b += 5) {
        for (int i = 0; i < NUM_LEDS; i++) {
          strip.setPixelColor(i, strip.Color((120 * b)/100, (40 * b)/100, (5 * b)/100));
        }
        strip.show();
        delay(20);
      }
      isLit = true;
    }
  } else {
    if (isLit) {
      // ふわっと消灯
      for (int b = 100; b >= 0; b -= 5) {
        for (int i = 0; i < NUM_LEDS; i++) {
          strip.setPixelColor(i, strip.Color((120 * b)/100, (40 * b)/100, (5 * b)/100));
        }
        strip.show();
        delay(20);
      }
      isLit = false;
    }
  }

  delay(100);
}
配線図

🌱 LEDテープを10個だけ光らせてみる

最初は、LEDテープのうち 10個だけ光らせる簡単なプログラム を作り、 人感センサーが反応したときにふわっと点灯するかどうかを試しました。

机の上でブレッドボードにつないだ状態でも、 センサーの前に手をゆっくり近づけると反応し、 LED がやさしく光ってくれました。

この「まずは少ない数で試す」という段階がとても大事で、 光り方や反応のタイミングを確認しながら、 自分のイメージに近づけていくことができます。

🌿 LEDを58個に増やして本番の光り方を確認

10個で動作が確認できたので、 次に LEDを58個すべて使う本番の長さ に変更しました。

長いLEDテープがふわっと点灯すると、 足元をやさしく照らす雰囲気が一気に出てきます。 人感センサーの反応も自然で、 中心から左右45度くらいまでゆっくり広がるように検知してくれるため、 廊下で使うとちょうど良い動作になりそうです。

実際に光っている様子も写真に撮りました。 机の上ですが、十分に雰囲気が伝わる明るさで、 「これなら夜中でも安心できる」と感じられる光り方でした。

LEDテープ

🌱 今回はここまで(No1 完了)

今回の No1 では、

  • ふわっと点灯・ゆっくり消灯の動作を確認
  • Arduino とブレッドボードで動作確認
  • LEDテープを10個 → 58個へ拡張
  • 人感センサーの反応を確認

コメント

タイトルとURLをコピーしました