人が通ると勝手にライトが点く装置を自作してみた【Raspberry Pi/人感センサー】

こんにちは! けい(Twitter)です。

前回の記事では、赤外線リモコンを作ったり、人感センサーを使ってみたりしたので、
今回はそれらを組み合わせて、人が通ると勝手にライトが点くシステムを作ってみたいと思います。

よく夜に通ると光ったりするライトがありますが、それを自作してみたという内容です。

システムの概要

我が家のライト

今回のシステムは、シーリングライトで作ります。
家にあるシーリングライトは、リモコン操作でライトをオン・オフにする機能がついています。

ライトのリモコン

このリモコンの送信する信号と同じ信号をラズパイから出せれば、ラズパイからライトを操作することができます。

概略図

  1. 人感センサーが人間を検知
  2. 赤外線LEDから「ライトオン」の信号を送信
  3. 一定時間が経つと、「ライトオフ」の信号を送信

必要なもの

赤外線LED & 赤外線受光モジュール

赤外線LEDは、ラズパイからライトに向けて赤外線信号を送る時に必要になるものです。

赤外線受光モジュールは、赤外線リモコンを作るときに、学習させたいリモコンからの赤外線信号を受信するために必要になるものです。

送信時・受信時に必要になるものがセットになったこちらの商品がお得だと思います。

人感センサー

前準備

赤外線リモコンの学習

ラズパイから赤外線信号を出すために、ライト付属のリモコンの信号を学習する必要があります。
こちらの方法は以前の記事でまとめたので、そちらを参考にしてみてください。

人感センサー(HC-SR501)の使い方・設定

今回使う人感センサーは、細かい設定などがあります。
前回の記事で、それらの設定方法などを解説しているので、こちらも参考にしてみてください。

作り方

回路構成

※fritizingで人感センサーがなかったので、上の画像のトランジスタを人感センサーに見立ててください。

人感センサーからの入力をgpio17、赤外線LEDへの出力をgpio18に繋ぎます。

シェルスクリプトを作る

前準備で、赤外線信号の学習が終わりましたら、今回のプログラムを書いていきます。

いつもは、pythonでプログラムを書いていきますが、irrp.pyのプログラムをいじりたくないので、シェルスクリプトで書いていこうと思います。

#!/bin/bash
sudo pigpiod
cd ~
echo 'm 18 w   w 18 0' > /dev/pigpio
echo 'm 17 r   pud 17 d' > /dev/pigpio

while true
do
	value=`pigs r 17`
	echo "$value"
	if [ $value -eq 1 ]; then
		python3 irrp.py -p -g18 -f codes light_on
		sleep 15
		python3 irrp.py -p -g18 -f codes 1
	fi
	sleep 1
done

プログラム解説

2行目

ラズパイのgpioを制御するためのライブラリで、「pigpio」というものを使います。それを使うためにpigpiodデーモンを起動させます。

3行目

今回使うpythonファイルの「irrp.py」がホームディレクトリにあるので、ホームディレクトリに移動します。

4-5行目

gpio18を出力に、gpio17を入力用のピンとして用いるので、その設定です。

9行目

「pigs r 17」というコマンドで、gpio17の状態を得ることができます。人感センサーからの入力で、人が通ると’1’、人がいないと’0’が変数valueに格納されます。

11-15行目

valueの値で条件分岐させます。人が通るとライトをオンにするようにしています。
ライトをオンにしたら、15秒待って、ライトをオフにしています。

シェルスクリプトの使い方

もし、同じシェルスクリプト使いたい方は上のプログラムをコピペして、○○○○.shというファイル名で保存してください。

任意のディレクトリに保存したら、そのディレクトリに移動して、実行権限を次のコマンドで与えます。

$ chmod 755 IR_human.sh

私の場合、「IR_human.sh」というファイル名で保存したので、上のようなコマンドになります。

実行権限を与えたら、次のコマンドでプログラムを実行できます。

$ ./IR_human.sh

動作確認

実際にシェルスクリプトを実行させてみましょう。

私はシェルスクリプトが~/Documents/に保存してあるので、cdコマンドで移動してから実行しています。

一秒おきに’0’が画面に表示されます。’1’が表示されると、15秒間経ってからまた画面の出力が開始します。

動画では手を目の前で動かしていますが、勿論だいぶ離れていても大丈夫です。

まとめ

いかがでしたでしょうか。今回やったことは人感センサー付きのライトを買えば何もせずとも出来てしまいますが、やはり自分で作ってみると、どういう原理で動いているのか分かるので楽しいですね。
また、市販のものではできないようなライトの制御が自由自在で出来るので、作る価値は大いにあると思います。

今回使用したものまとめ

created by Rinker
Sintron
¥298 (2021/10/16 12:01:04時点 Amazon調べ-詳細)