窓開閉検知bot作ってみた ~Jetson GPIO × Discord Bot~

2025-12-22

はじめに

情報学部自然情報学科B3のヌヌーピーです。

一人暮らしをしていると、外出後にふと「窓を閉め忘れていないか?」と不安になることがあります。

特に天気が崩れそうな日や、出先で急に風が強くなったときなど、確認したくても家にいないためどうしようもありません。

そこで、「窓の状態をいつでもスマホから確認できる仕組みがあれば便利なのでは」と考え、手元にあった Jetson Orin Nano を使って、窓が開いた/閉まったことを Discord に通知する Bot を作りました。

構成

本システムの構成は次の通りです。

  • Jetson Orin Nano
  • 磁気リードスイッチ(窓枠に取り付け)
  • GPIO による状態取得
  • Discord Bot API を利用した通知

Jetson が一定間隔でリードスイッチの状態を読み取り、

変化があれば Discord のチャンネルへ通知します。

また、スラッシュコマンド /status にも対応させ、現在の窓の状態を取得できるようにしました。

Jetson Orin Nano Setup

Setupしよう!となって公式サイト(https://developer.nvidia.com/embedded/learn/get-started-jetson-orin-nano-devkit#firmware)に行くと更新が必要なことがわかりました。

しかし、更新用のページ(https://www.jetson-ai-lab.com/initial_setup_jon.html)の6️⃣ Boot with JetPack 6.x SD card で詰まりました!永遠にShellから抜け出せません…

今回は無理に最新版へ移行せず JetPack 5.x(Python 3.8, CUDA 11.x) の環境を維持したまま構築を進めました。

窓開閉検知という用途では重いライブラリは必要ないため、安定して動作するバージョンを優先しています。

リードスイッチを接続

リードスイッチを買いました!(https://www.amazon.co.jp/dp/B08XZ28DR9?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1)こんなに3つもいらんかった…

JetsonのGPIOの設定のエクセルを元にどこのピンに接続するかを決めます。(Jetson_Orin_NX_series_and_Orin_Nano_series_Pinmux_Config_Template.xlsm)

今回は以下のようにしました。

磁石を近づけるとOPEN(1)磁石を離すとCLOSE(0)。この挙動が確認できれば勝ちです

リードスイッチ線Jetson ピン内容
青(COM)6 (GND)グラウンド
黒(NC)32 (GPIO9)入力ピン

ここで一つ問題が発生します。リードスイッチの先端、ジャンパワイヤにそのまま刺さらない。はんだづけ……?いや、今回はなるべく「部屋に工作跡を残さない」「精神的ハードルを上げない」方針です。めんどくさいためですね

ということで購入したのが ワンタッチコネクター。ワイヤを差し込んでレバーを倒すだけ。文明の力です。

しかし使い方が下手なのか?下のアルミホイル+テープの方が上手くいってしまいました…

技術は進歩しても、最後に信頼できるのは物理と圧力、という学びを得ました。

Discord連携

Jetson Orin Nano から GPIO を監視し、

変化があれば Discord のチャンネルへメッセージを送信する Bot を動かしています。

通知は次のような流れ:

  • Jetson が GPIO の状態変化を検知
  • Discord Bot API を使って指定チャンネルへ通知
  • スラッシュコマンド /status にも対応し、現在の窓の状態をいつでも取得可能

実装部分は詳しく GitHub に載せています ↓

賃貸での戦い

今回の制作で、技術的に一番悩んだポイントは

実は電子回路でもコードでもなく、「どうやって窓に取り付けるか」 でした。

というのも、私は賃貸暮らし。

リードスイッチに付属していた両面テープを見た瞬間に察しました。

「これ、絶対あと残るやつだ……」

粘着力が明らかに強く、一度貼ったら最後、剥がすときに壁や窓枠の塗装を持っていかれそうな雰囲気。IoT より先に、原状回復費用との戦いが始まりそうでした。

そこで採用したのが、テープをくるっと丸めて貼る作戦です。

  • 粘着力を弱める
  • それでも位置はズレにくい
  • いざというときはきれいに剥がせる

という、賃貸フレンドリー設計です。

結果として、窓の開閉検知には十分な安定性を保ちつつ、「退去時どうしよう……」という精神的ダメージも回避できました。

費用

最後に、気になるお金の話です。

今回かかった費用は以下の通り。

  • 3ピン → 2ピン変換プラグ:¥540
  • micro SD card:¥999
  • 磁気リードスイッチ:¥1,069
  • ワンタッチコネクター:¥626
  • ジャンパワイヤ:¥870

合計:¥4,104

一方で、市販の窓開閉ブザーはおよそ ¥1,050。しかも電池を入れるだけで動くし、大音量。冷静に考えると、完全にコスパでは負けています。ですが今回作ったものは、

  • 外出先からスマホで状態を確認できる
  • Discord に履歴が残る
  • 通知先やロジックを自由に変えられる
  • Jetson や Bot を他用途に流用できる

という拡張性があります。また、部品はかなり余りました。結果としてこれは、「安い代替品」ではなく「安心と遊び心を買った」プロジェクトだったと思っています。

あとはLT会のネタになります

最後に

Jetson はオーバースペックかもしれませんが、その分、画像処理や他のセンサと組み合わせる余地もあります。今後は設置方法をもう少しスマートにして、生活の邪魔にならない形へ改良していきたいと思います。窓の状態が分かるだけでも意外と安心感があるので、気になった方は身の回りのちょっとした不安を題材に、ぜひ気軽にやってみてください。