Tech Racho エンジニアの「?」を「!」に。
  • IT Tips
  • ライフ

暗い廊下も怖くない: 自動点灯する照明を作った

はじめに

BPSに10月に入社しましたokada.kenです。よろしくお願いいたします。転職するたびに新しい会社には新鮮な驚きがあるのですが、ここBPSでは「新人さんは自己紹介がてらtechrachoの記事を書いてみたら」「内容は自由です」と言われました。ちょうどアドベントカレンダーの季節ということもあるので、自宅IoTネタを書かせて頂きます。

暗い廊下は怖い

私は1年ほど前に一軒家に引っ越しました。とにかく物が多いので置き場所に困らない環境を求めて、また都心からそこそこ離れると安くて広い貸家物件があるので、気がついたら千葉県の片田舎の貸家に移り住みました。

さて、お引っ越し当初からささやかな悩みがありました。寝室までの暗く長い廊下が怖いのです。階段から寝室まで3mそこそこの廊下があり、また寝室のスイッチが部屋の入り口からさらに1mほど奥にあります。

以下の写真は我が家の寝室を廊下から撮ったものです。撮影時は採光のため灯りを付けていますが、夜は当然真っ暗です。寝るためには真っ暗な廊下をひたひた…と歩く必要があります。

この暗い廊下を毎晩歩くのは怖いじゃないですか。後ろにお化けが立つかもしれない。引き戸から何か出て来るかもしれない。横の窓ガラスが割れていきなり野犬が飛び込んでくるかもしれないじゃ無いですか。(記事のために写真を撮る作業も怖かったです。何か写り込んでたらどうしよう)

市販の自動点灯ライトはイマイチ

ホームセンターで売られている人感センサ付きライトを試しに買ってみました。ライトの前を人が通ると点灯するやつで、1000~3000円くらいで売られています。

廊下に置いたら、より怖くなっただけでした。以下がより怖くなった夜の廊下です。左側の明り取り窓にライトを設置しています。

問題は2つです。まずひとつは人感センサの向きとライトの向きが同じこと。センサは廊下に向けてライトは天井に向けて、なんて設置をしたかったのですが、安いライトでは望むべくもありません。

次にライトの光量も不十分です。横に照射しても部屋全部を照らすことは出来ず、むしろ影がたくさん障子に映るので怪談の雰囲気です。部屋に入って、もしも誰かが後ろに立ったら目の前には二人分の影が出来てしまうわけです。怖い。

この手の人感センサ付きライトは防犯目的で玄関やガレージに置いたり、通り過ぎる廊下や階段の一番下に配置するのに適していると思います。ところが部屋にこの手のライトを置くと、光量不十分で影がたくさん出来て怖いです。部屋では十分な光を天井から照射して、変な影が出来ないのが怖くなくて良いです。やはり部屋の照明のオンオフをしたいですね。

ぼくのかんがえたさいきょうのしょうめい

ではどうするか。私が廊下を通ると、部屋の照明が自動で点灯する仕組みが欲しいです。そのために以下のような材料が必要です。

  • 廊下を誰かが通ったときにそれを検知するセンサ

これはRaspberryPiと人感センサを使えば何とかなりそうです。

  • 照明を点灯/消灯する仕組み

寝室の照明はリモコンが使えます。この家を借りたときにリモコンは無かったのですが、照明の型番を調べるとリモコンに対応していることが分かり、リモコンの型番を調べてメルカリやヤフオクで2000円以下で購入しました。賃貸の場合は照明用リモコンが無くても諦めないほうがいいですね。

で、このリモコンの点灯/消灯の信号をRaspberryPiに学習させて、同じ赤外線信号をRaspberryPiから送信すればよさそうです。

作ってみた

まず以下を用意します。

  • RaspberryPiZero:ちっちゃいものは正義なのでZeroを使います。お財布にも優しいですし。約2000円。

  • 人感センサ:人が通ったかどうかを検知するのに必要です。約500円。

  • 赤外線受信モジュール:リモコンの赤外線信号を受信して学習させるために必要です。50円くらい。

  • 赤外線LED:リモコンの赤外線信号を送信するために必要です。1本20円くらい。

  • 抵抗はあった方がいいけど、無くてもたぶん動きます(抵抗を使わない場合はRaspberryPiの寿命が短くなるかも)。

人感センサの使い方

RaspberryPiに人感センサを繋いで(電源、GND、GPIOの14番に接続)、廊下に向けて置いてみました。

で、試しに書いてみたテストコードはこちら。gpioコマンドを使うためにはWiringPiをインストールする必要があります。(sudo apt-get install wiringpiでインストール可能です。最近のRaspberryPi用OSなら最初から入ってるかも)

while :; do
  gpio -g read 14
done

実行すると「0」が連続してコンソールに表示され、人感センサの前で手を動かすと「1」が表示されます。試行錯誤すると4mくらいは検知してくれるので、良い位置に置けば廊下の奥まで検知してくれそうです。

赤外線送受信のやりかた

赤外線送受信するために、必要ライブラリとしてlircをインストールします。

$ sudo apt install lirc

lircの設定ファイル /etc/lirc/lirc_options.conf の中の以下の該当行を次のように書き換えて下さい。

driver = default
device = /dev/lirc0

次に送信に使う赤外線LEDと、受信に使う赤外線受信モジュールをRaspberryPiに繋ぎます。今回は前者をGPIO18、後者をGPIO15に繋ぎました。

(左の黒いのが赤外線受光モジュール、右上の白いのが赤外線LED)

そして /boot/config.txt に以下のような設定を加えます。

dtoverlay=lirc-rpi,gpio_in_pin=15,gpio_out_pin=18

これで赤外線の送受信が出来るはずです。

試しにリモコンを学習させます。以下のようなコマンドを実行して、赤外線受信モジュールに照明リモコンを向けて、点灯ボタンを押してみます。すると以下のように受信した信号がテキストで出力されます。点灯ボタンと消灯ボタンの信号をファイルに採取しておきましょう。

pi@raspberrypi:~ $ mode2 -d /dev/lirc0
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
space 16777215
pulse 2062
space 1007
pulse 5658
space 1023
pulse 1547
space 505
pulse 1551
space 501
pulse 531
space 496
...

今度はこの記録した信号をRaspberryPiから送信するために、設定ファイル /etc/lirc/lircd.conf に書き写します(lircd.conf.dフォルダ内にファイルを作るほうが適切かもしれません。お好みで)。以下の「name ON」以降に書かれている数字は、上の受信データのうち先頭のspaceを取り除いた各行の数値を書き写したものです。「name OFF」に関しても、同様に消灯ボタンを押したときの数値を書き写しましょう。

begin remote

  name light
  flags RAW_CODES|CONST_LENGTH
  eps 30
  aeps 100
  gap 129850
  begin raw_codes
    name ON
      2062 1007 5658 1023 1547 505 1551 501 531 496 519 506 522 503 525 501 527 498 519 514 1545 499 527 499 519 506 522 504 524 501 527 499 520 506 1550 502 526 498 520 505 1551 512 506 508 520 505 523 502 527 498 519 509 520 501 527 499 518 507 521 503 526 499 518 506 522 503 525 503 526 495 522 503 1553 495 1551 500 1556 495 524 502 1553 496 1551 476 552
    name OFF
      ............
  end raw_codes
end remote

なお書き写す際には、以下のようなコマンドを叩いて出てきた文字列をコピペすると、ちょっとだけ楽に作業が出来ます。

$ mode2 -d /dev/lirc0 > test.txt
$ vi test.txt # 先頭行を取り除く
$ cat test.txt | awk '{print $2}' | tr "\n" " "
2062 1007 5658 1023 1547 505 1551 501 531 496 519 506 522 503 525 501 527 498 519 514 1545 499 527 499 519 506 522 504 524 501 527 499 520 506 1550 502 526 498 520 505 1551 512 506 508 520 505 523 502 527 498 519 509 520 501 527 499 518 507 521 503 526 499 518 506 522 503 525 503 526 495 522 503 1553 495 1551 500 1556 495 524 502 1553 496 1551 476 552 $

では以下のコマンドを実行して、赤外線送信してみましょう。

$ sudo /etc/init.d/lircd start
$ /usr/bin/irsend SEND_ONCE light ON

これでRaspberryPiを使って照明を点灯させることが出来ました。同様に消灯させるときの信号も記録して、設定ファイルに書き込みましょう。そうすれば以下のコマンドで消灯出来るようになります。

$ /usr/bin/irsend SEND_ONCE light OFF

送信ルールに基づいてシェルスクリプトを書く

あとは好きなルールに従って照明をON/OFFさせるシェルスクリプトを書きます。私が考えたルールは以下の通り。

  • 動作するのは夜の23時~2時だけ
  • 人感センサが反応したら、照明を点灯する
  • 照明が点灯したら1分停止して、その後に消灯する。

灯りが付いても1分後に消灯させるのは、誤動作で灯りが付いてしまった場合の対策のためです。照明点きっぱなしは環境的にもお財布的にも嫌ですから。

作ったシェルスクリプトは以下の通り。

#!/bin/bash
while :; do
  h=$(date +%H)
  if [ "$(gpio -g read 14)" = "1" -a \
        \( $h -eq 23 -o $h -eq 0 -o $h -eq 1 -o $h -eq 2 \) ]; then
    echo "Censord!! $(date)"            # ログ用の出力
    /usr/bin/irsend SEND_ONCE light ON  # 照明点灯
    sleep 60                            # 60秒待つ
    /usr/bin/irsend SEND_ONCE light OFF # 照明消灯
    sleep 10                            # 10秒待つ
  fi
done >> /home/pi/log

さいきょう!

出来たのがこちら。RaspberryPiや人感センサは押しピンで固定しています。下に垂れ下がっているのは普段使わない赤外線受信モジュールです。不格好ですが、我が家で機能すれば良いので気にしません。

人感センサを廊下に向けています。これで階段の先まで感知してくれます。

赤外線LEDは照明に向けています。照明に信号が届くように、向きを何度も微調整しました。

これが運用されるようになって、廊下が怖くなくなりました。階段を上がると自動的に灯りが付く。これだけでこんなに心理的に快適になるものか。怖くないって素晴らしい。皆さんも自宅内で暗い場所があり、かつ赤外線リモコンで操作可能な照明がある部屋なら試してみるといいと思います。お勧めです。

注意点

作る上で問題になりがちなのが赤外線LEDの強さと向きです。私は一本のLEDしか使わなかったので出力はとても弱く、ちょっとLEDの向きがずれただけで信号が照明に届かないということが起こりました。私と同じように一本しか使わないのであれば、対象となる照明から遠すぎない距離に装置を作ったほうが良いかもしれません(私の経験では3m離れると信号が届きにくくなります)。

確実に赤外線を届かせたいなら、LEDを増やすのもアリです。秋月電子さんは以下のようなLEDを56本並べたキットを販売しています。私の師匠は「四面体を作ってこれを4つ貼り付ければ部屋中どこでも赤外線が届くね(ニッコリ)」と語ってました。そんな部屋嫌だ

http://akizukidenshi.com/catalog/g/gK-00094/

問題点

この仕組み、運用を始めてからひとつの問題が起きました。猫問題です。

我が家の猫は冬は布団に潜り込み、夏も布団のそばで寝ます。ご主人様といつも一緒にいたい性格のようです。

が、猫は元々夜行性ですから、たまに夜中に起き出してトイレに行ったり、家を徘徊したりするのです。その猫が廊下を通過すると、人感センサが反応して照明を点灯してしまうのです。私が寝ていても、猫が通過することで照明が点灯してしまい、目が覚めてしまうのです。この仕組みを導入するまでは私は寝ている最中の猫の行動など気にもしていなかったのですが…。

今のところ問題は解決していません。手元に古いAmazonDashボタンがあるので、布団に入ったらボタンを押して「今夜はもう点灯しなくていいよフラグ」を付ける仕組みを検討しています。解決したらまた記事にするかもしれません。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。