自動点灯する照明を作った|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。自動点灯する照明を作ったokada.kenシェアツイートブックマークLINEはじめにBPSに10月に入社しましたokada.kenです。転職するたびに新しい会社には新鮮な驚きがあるのですが、ここBPSでは「新人さんは自己紹介がてらtechrachoの記事を書いてみたら」「内容は自由です」と言われました。アドベントカレンダーの季節ということもあるので、自宅IoTネタを書かせて頂きます。暗い廊下は怖い私は1年ほど前に一軒家に引っ越しました。物が多いので置き場所に困らない環境を求めて、また都心からそこそこ離れると安くて広い貸家物件があるので、気がついたら千葉県の片田舎の貸家に移り住みました。お引っ越し当初からささやかな悩みがありました。寝室までの暗く長い廊下が怖いのです。階段から寝室まで3mそこそこの廊下があり、また寝室のスイッチが部屋の入り口からさらに1mほど奥にあります。以下の写真は我が家の寝室を廊下から撮ったものです。撮影時は採光のため灯りを付けていますが、夜は当然真っ暗です。寝るためには真っ暗な廊下をひたひた...と歩く必要があります。この暗い廊下を毎晩歩くのは怖いじゃないですか。後ろにお化けが立つかもしれない。引き戸から何か出て来るかもしれない。横の窓ガラスが割れていきなり野犬が飛び込んでくるかもしれないじゃ無いですか。(記事のために写真を撮る作業も怖かったです。何か写り込んでたらどうしよう)市販の自動点灯ライトはイマイチホームセンターで売られている人感センサ付きライトを試しに買ってみました。ライトの前を人が通ると点灯するやつで、1000~3000円くらいで売られています。廊下に置いたら、より怖くなっただけでした。以下がより怖くなった夜の廊下です。左側の明り取り窓にライトを設置しています。ひとつは人感センサの向きとライトの向きが同じこと。センサは廊下に向けてライトは天井に向けて、なんて設置をしたかったのですが、安いライトでは望むべくもありません。次にライトの光量も不十分です。横に照射しても部屋全部を照らすことは出来ず、むしろ影がたくさん障子に映るので怪談の雰囲気です。部屋に入って、もしも誰かが後ろに立ったら目の前には二人分の影が出来てしまうわけです。この手の人感センサ付きライトは防犯目的で玄関やガレージに置いたり、通り過ぎる廊下や階段の一番下に配置するのに適していると思います。ところが部屋にこの手のライトを置くと、光量不十分で影がたくさん出来て怖いです。部屋では十分な光を天井から照射して、変な影が出来ないのが怖くなくて良いです。部屋の照明のオンオフをしたいですね。ぼくのかんがえたさいきょうのしょうめいではどうするか。私が廊下を通ると、部屋の照明が自動で点灯する仕組みが欲しいです。そのために以下のような材料が必要です。廊下を誰かが通ったときにそれを検知するセンサこれはRaspberryPiと人感センサを使えば何とかなりそうです。照明を点灯/消灯する仕組み寝室の照明はリモコンが使えます。この家を借りたときにリモコンは無かったのですが、照明の型番を調べるとリモコンに対応していることが分かり、リモコンの型番を調べてメルカリやヤフオクで2000円以下で購入しました。賃貸の場合は照明用リモコンが無くても諦めないほうがいいですね。このリモコンの点灯/消灯の信号をRaspberryPiに学習させて、同じ赤外線信号をRaspberryPiから送信すればよさそうです。作ってみたまず以下を用意します。RaspberryPiZero:ちっちゃいものは正義なのでZeroを使います。お財布にも優しいですし。人感センサ:人が通ったかどうかを検知するのに必要です。赤外線受信モジュール:リモコンの赤外線信号を受信して学習させるために必要です。赤外線LED:リモコンの赤外線信号を送信するために必要です。抵抗はあった方がいいけど、無くてもたぶん動きます(抵抗を使わない場合はRaspberryPiの寿命が短くなるかも)。人感センサの使い方RaspberryPiに人感センサを繋いで(電源、GND、GPIOの14番に接続)、廊下に向けて置いてみました。試しに書いてみたテストコードはこちら。gpioコマンドを使うためにはWiringPiをインストールする必要があります。wiringpiでインストール可能です。14done実行すると「0」が連続してコンソールに表示され、人感センサの前で手を動かすと「1」が表示されます。試行錯誤すると4mくらいは検知してくれるので、良い位置に置けば廊下の奥まで検知してくれそうです。赤外線送受信のやりかた赤外線送受信するために、必要ライブラリとしてlircをインストールします。中の以下の該当行を次のように書き換えて下さい。/dev/lirc0次に送信に使う赤外線LEDと、受信に使う赤外線受信モジュールをRaspberryPiに繋ぎます。今回は前者をGPIO18、後者をGPIO15に繋ぎました。以下のような設定を加えます。dtoverlay=lirc-rpi,gpio_in_pin=15,gpio_out_pin=18これで赤外線の送受信が出来るはずです。試しにリモコンを学習させます。以下のようなコマンドを実行して、赤外線受信モジュールに照明リモコンを向けて、点灯ボタンを押してみます。すると以下のように受信した信号がテキストで出力されます。点灯ボタンと消灯ボタンの信号をファイルに採取しておきましょう。書き写します(lircd.conf.dフォルダ内にファイルを作るほうが適切かもしれません。ON」以降に書かれている数字は、上の受信データのうち先頭のspaceを取り除いた各行の数値を書き写したものです。OFF」に関しても、同様に消灯ボタンを押したときの数値を書き写しましょう。remoteなお書き写す際には、以下のようなコマンドを叩いて出てきた文字列をコピペすると、ちょっとだけ楽に作業が出来ます。$では以下のコマンドを実行して、赤外線送信してみましょう。ONこれでRaspberryPiを使って照明を点灯させることが出来ました。同様に消灯させるときの信号も記録して、設定ファイルに書き込みましょう。すれば以下のコマンドで消灯出来るようになります。OFF送信ルールに基づいてシェルスクリプトを書くあとは好きなルールに従って照明をON/OFFさせるシェルスクリプトを書きます。私が考えたルールは以下の通り。動作するのは夜の23時~2時だけ人感センサが反応したら、照明を点灯する照明が点灯したら1分停止して、その後に消灯する。灯りが付いても1分後に消灯させるのは、誤動作で灯りが付いてしまった場合の対策のためです。照明点きっぱなしは環境的にもお財布的にも嫌ですから。作ったシェルスクリプトは以下の通り。/home/pi/logさいきょう!出来たのがこちら。RaspberryPiや人感センサは押しピンで固定しています。下に垂れ下がっているのは普段使わない赤外線受信モジュールです。不格好ですが、我が家で機能すれば良いので気にしません。人感センサを廊下に向けています。これで階段の先まで感知してくれます。赤外線LEDは照明に向けています。照明に信号が届くように、向きを何度も微調整しました。これが運用されるようになって、廊下が怖くなくなりました。階段を上がると自動的に灯りが付く。これだけでこんなに心理的に快適になるものか。怖くないって素晴らしい。皆さんも自宅内で暗い場所があり、かつ赤外線リモコンで操作可能な照明がある部屋なら試してみるといいと思います。作る上で問題になりがちなのが赤外線LEDの強さと向きです。私は一本のLEDしか使わなかったので出力はとても弱く、ちょっとLEDの向きがずれただけで信号が照明に届かないということが起こりました。私と同じように一本しか使わないのであれば、対象となる照明から遠すぎない距離に装置を作ったほうが良いかもしれません(私の経験では3m離れると信号が届きにくくなります)。確実に赤外線を届かせたいなら、LEDを増やすのもアリです。秋月電子さんは以下のようなLEDを56本並べたキットを販売しています。私の師匠は「四面体を作ってこれを4つ貼り付ければ部屋中どこでも赤外線が届くね(ニッコリ)」と語ってました。そんな部屋嫌だhttp://akizukidenshi.com/catalog/g/gK-00094/問題点この仕組み、運用を始めてからひとつの問題が起きました。我が家の猫は冬は布団に潜り込み、夏も布団のそばで寝ます。ご主人様といつも一緒にいたい性格のようです。猫は元々夜行性ですから、たまに夜中に起き出してトイレに行ったり、家を徘徊したりするのです。その猫が廊下を通過すると、人感センサが反応して照明を点灯してしまうのです。私が寝ていても、猫が通過することで照明が点灯してしまい、目が覚めてしまうのです。この仕組みを導入するまでは私は寝ている最中の猫の行動など気にもしていなかったのですが...。今のところ問題は解決していません。手元に古いAmazonDashボタンがあるので、布団に入ったらボタンを押して「今夜はもう点灯しなくていいよフラグ」を付ける仕組みを検討しています。解決したらまた記事にするかもしれません。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。