2021年07月30日 更新

ラズパイで100均ドア開閉センサー検知

どうも、クラゲです。
100円ショップのダイソーで100円で売っていた「LEDセンサーライト」からセンサー部を取り出し、ラズパイで検知できるようにしました。ドアの開閉を検知してスマホで表示しています。

応用すれば、見守り、来客通知、ドア閉め忘れ防止などにも使えそうです。

商品の動作確認

まず、商品そのものを見てみましょう。
こんなパッケージに入っていました。100円でコイン電池も入っています。両面テープも張り付いているので、取り出してすぐ設置することが可能です。

※最近は見かけなくなったのでこちらの代替品も参照ください

実際に動かしてみました。

白い直方体が2つあり、直方体同士が近いとLEDが消灯し、離れるとLEDが点灯します。線が付いている方がセンサーで、線が付いていない方は磁石です。実際にはドア開閉の可動部に「磁石部」を貼り付け、固定部に「センサー部」を貼り付けて使います。

センサーの仕組み

センサー部の中には「リードスイッチ」と呼ばれる部品が入っていて、磁石が近くにあるとスイッチON、離れるとスイッチOFFします。なお、センサーを動作させるための電源は不要です。

画像引用元:秋月電子通商

動作が逆では?と思った人は鋭いです。分解して中を見てゆきましょう

分解

プラスドライバーとピンセットがあれば簡単に分解できます。センサーの先には基板がありリードLEDが載っています。またセンサーとLEDの間に回路があります。

基板を拡大して見てみましょう。チップ抵抗2つとチップトランジスタが2つあります。

抵抗の1つはLEDの制限抵抗62Ωで、もう1つはプルアップ抵抗5.1MΩです。
トランジスタの種類や型は不明ですが、前段がバッファー用で、後段が反転スイッチング用と推測できます。前段は反転なしで後段は反転ありなので、結果として元の信号が反転するということになります。
これが、リードスイッチのON/OFFとLEDのON/OFFが反転している理由です。

改造

ハンダごてを使って、センサー部の線2本を基板から外しました。初心者でも簡単にできます。使うのはセンサー部と磁石部だけです。その他は不要です。
ラズパイのGPIOに直接接続できるように、ジャンパー線(オスーメス)をハンダ付けしました。
念のため、ハンダ付けした箇所には熱収縮チューブを付けています。ポリイミドテープ(カプトンテープ)や絶縁ビニールテープなどで巻いても良いと思います。ショートに気を付ければ、これらが無くても動作は出来ます。

回路接続

センサーライトの電源はコイン電池1.5V×3で4.5Vですが、リードスイッチ自体は電源不要で動きます。
なので、特に電圧は気にせずラズパイには接続できます。
プルアップ抵抗については、ラズパイの内部抵抗を利用します。こちらのブログによると、ラズパイのプルアップ抵抗値は50kΩくらいとのことです。
元々の5.1MΩのプルアップはコイン電池の消費をできるだけ小さくするために大きくしたものと推測されます。GPIO端子に流れるシンク電流値は非常に小さいことと、ラズパイ電源はコンセントに常時接続しての使用なので、抵抗値50kΩ程度であっても問題ないとクラゲは判断しました。

見やすい結線図を添付します。非常にシンプルです。
一方をGNDに、他方をGPIO18pinに接続しました。

ソースコード

Python3で実行させています。
念のためtry~exceptを使って、確実にGPIO.cleanup()を実行させるようにしていますが、無くても問題なく動きました。

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

#GPIO18pinを入力モードとし、pull up設定とします
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)

sw_status = 1

while True:
    try:
        sw_status = GPIO.input(18)
        if sw_status == 0:
            print("Close")
        else:
            print("Open!")

        time.sleep(0.03)
    except:
        break

GPIO.cleanup()
print("end")

動作結果

動作の様子は冒頭の動画の通りです。ラズパイの底面にケースを装着しています。金属ラックの上などに直接置くとショートして壊れる危険性があるので気を付けて下さい。
スマホのターミナルアプリ(VX ConnectBot)でSSHにてログインし、先ほどのプログラムを実行し、それを拡大表示しています。

分かりやすいように、線は結んだままにしていますが、100cmのコードですのでラズパイは離れた位置に置くことが可能です。コンセントの位置にもよりますが、センサーと磁石は見えない方(この画像で言うと扉の内側)に設置した方がスッキリします。
応用で音を出したり、チャット通知したり、データベースに記録したりなど、色々できると思います。

参考にさせていただいたサイト

以上、100均LEDセンサーライトをハックしてドア開閉検知でした!

追記

本コンテンツと似た内容で最新のものがありますので、こちらもお勧めします。
https://monomonotech.jp/learning/contents_trial/raspi_okigashi/raspi_okigashi/