概要

人が近づいたら、サーボモータで壁の照明スイッチを無理やり操作するシステムを製作した。


背景と目的

最近、引っ越しをして住み始めた家では、階段の照明をよく消し忘れる。その結果、一日つけっぱなしという無駄を何度も発生させてしまっているので、改善したい。王道として思いつくのは、人感式の照明に付け替えることだが付け替えるお金をかけたくないのと、引っ越し後工作をしていないせいで無駄でもいいから何かしら工作をしたいという欲求が抑えられないため、消し忘れても自動で消えるシステムをわざわざ作ってみる。


詳細

1.方法の検討

問題の電灯は、階段の2階側と1階側にそれぞれ壁スイッチがあり、押すごとに点灯/消灯が切り替わる。そこで、これを無理やりサーボモータで押すという力技が思いつくが、実は、以前同システムを作ったのでまさにそれが流用できそうである。ただ、そのシステムはIoT系の工作でGoogleHomeから呼び出して動かすものであったが、今回はネット経由で操作する必要はないので、人感センサでトリガしてあげるように変更する。(なんだか、IoTから退化した感じで微妙だが使い道を考えると仕方ない)


以前作成したシステム

DSC_0237


2.設計

ハードウェアは、すべて手持ち品のArduinoNano互換ボードと、人感センサSB412A、サーボモータSG-92Rを組み合わせで間に合わせた。また、壁スイッチは点灯/消灯の状態を知ることができないので、明るさセンサで状態を知る必要もありそうだ。

というわけで、以下のような回路にした。SB412Aが2つあるのは、私の家の階段が途中で折れ曲がっており、1つでは階段全体が検出範囲に入らないためである。SB412Aの出力レベルはArduinoNano互換ボードと厳密には合わないがちゃんとHIGH状態が読み取れたので気にしないことにした。明るさセンサはCdSとし、直列抵抗との分圧点をセンサ出力としてアナログ入力端子に接続。

20180927233430


3.プログラム

非常に簡単なので、コードは割愛するが、おおざっぱに言って、

  • 2つの人感センサ出力のORがTRUEで、暗い場合、サーボモータを動かす
  • 2つの人感センサ出力のORがFALSEで、明るい場合、サーボモータを動かす

だけ。1秒周期で上記ロジックを実行する。ただし、人感センサは1度検出すると30秒程度HIGHが持続するようにしている。サーボモータの駆動は標準ライブラリのServo.hを使用。


4.実装

以下が実装した図。見た目は全然気にしていないので、いずれ家族からクレームが出そうだが、所望の動作はしている。2つの人感センサはそれぞれ1階と2階の階段の初段付近に設置。明るさセンサは2階側の人感センサと並べて設置。

DSC_0571


まとめ

それなりに実用的なシステムができた。今後は見た目をまともにして生活空間に溶け込ませたい。