サンタさんの正体を暴くシステムを作る【ラズパイ】

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

私は現在大学生ですが、長年謎だったことがあるんです。

そう、サンタさんの正体です。

今回はその疑問を解消するために、ラズパイを使って『サンタさん撮影システム』を作ってみました。

必要な物

Raspberry Pi

今回サンタさんを撮影するにあたって、文明の力に頼ります。

サンタさんも、どこからでも侵入してくるというチート能力を持っているので、それに対抗するためには必要不可欠です。

人感センサー

“人感”と名がつくように、人間が発する赤外線の変化を感知するセンサーです。

今回のシステムはサンタさんから赤外線が発せられるという大前提に基づいたものになっています。
もしかしたら、サンタさんからは赤外線は出ていないかもしれません。その時は負けです。

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

サンタさんは闇夜に紛れて侵入してきます。

それに対抗するには”光”を灯さなくてはなりません。
そんなとき、強力なツールとなるのが赤外線LEDです。

ラズパイからシーリングライトに、赤外線信号を送ることによって自動的に光を灯すことができます。

webカメラ

いくら自分の目でサンタさんをとらえることができても、確固たる証拠にはなりません。虚言だと笑われてしまいます。

そんなとき、一枚の画像があれば強力な証拠となります。

システムの概要

サンタさんは対象が完全に眠りに入ったときに、どこからともなく侵入してきます。

そのため、自分の意識ではサンタさんを捕らえることができません。
そこで、文明の力を活用しサンタさんを画像という”証拠”に収めることを目標にシステムを作成します。

システム①:人感センサー

以前もこのブログで紹介した人感センサーを使って、サンタさんが部屋に入ってきたときに分かるようにします。

これはサンタさんにも、人間のような温かい血が通っているという前提に基づいています。

システム②:赤外線リモコン

テレビのリモコンなどに使われる赤外線信号をハッキングして、家の家電などの操作を学習することができます。

それを利用して、人感センサーでサンタさんを感知したときに、自動で部屋の電気を点ける仕組みにします。

システム③:カメラで撮影

人感センサーでサンタさんを感知した後、赤外線リモコンでライトが点き、部屋が明るくなります。

そこまでできたら、カメラで鮮明にサンタさんを捉えることができます。

回路図

以前の記事に基づいて回路を作成しました。

特に赤外線受光モジュールと、赤外線LEDの回路は以前の記事と全く同じです。

※一番右側のトランジスタを人感センサーに見立ててください。

  • gpio17 <-> 赤外線LEDの+
  • gpio18 <-> 赤外線受光モジュールの信号線
  • gpio5 <-> 人感センサーの信号線

プログラム

import pigpio
import time
import subprocess
import cv2

GPIO_IN = 5
GPIO_OUT = 17
pi = pigpio.pi()
pi.set_mode(GPIO_IN, pigpio.INPUT)
pi.set_mode(GPIO_OUT, pigpio.OUTPUT)
pi.set_pull_up_down(GPIO_IN, pigpio.PUD_DOWN)
pi.write(GPIO_OUT, 0)

count = 0

try:
    while True:
        DATA = pi.read(GPIO_IN)
        print(DATA)
        if DATA:
            proc = subprocess.run("python3 irrp.py -p -g17 -f codes light_on", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
            time.sleep(2)
            cap = cv2.VideoCapture(0)
            ret, frame = cap.read()
            path = "santa_" + str(count) + ".jpg"
            cv2.imwrite(path,frame)
            count += 1
            cap.release()
            proc = subprocess.run("python3 irrp.py -p -g17 -f codes light_off", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
            
        time.sleep(1)
        
except KeyboardInterrupt:
    cap.release()
    pi.write(GPIO_OUT, 0)
    pi.stop()

使い方

上のプログラムを実行するだけでは、動作しません。

下準備が必要です。

以前の記事で紹介した赤外線リモコンの学習を行う必要があります。

これを参考にして、「light_on」と「ligtht_off」というコード名で、お使いのシーリングライトのリモコンの赤外線を学習します。

学習が完了したら、上のプログラムを実行するだけで動作させることができます。

プログラムの解説

赤外線LEDからの赤外線信号を発信するプログラムは、21行目と29行目です。

シェルで実行するコマンドをpythonで実行しています。pythonでシェルを実行するにはsubprocessをインポートすれば簡単に使うことができます。

また、webカメラからの画像の取得に関してはopencvを用いています。以前の記事でwebカメラをラズパイで使う方法についてまとめていますので、参考にしてみてください。

サンタさんの正体

上のプログラムを実行し、サンタさんの正体を暴くことができました。

しかし、サンタさんの正体は国家機密レベルなので、ネットで公開することはできません。

そのため、顔を隠したものをアップしますが、ご了承ください。

まとめ

今回は、長年気になっていた謎を解決することができました。

皆さんもサンタさんの正体を知りたければ、同じシステムを作ってみて下さい。

一つだけ言えることは、

サンタさんはいます