🔐

丸ドアノブ鍵用スマートロック制作

2023/10/13に公開

概要

諸事情(リアル事情)にて、丸ドアノブのドアをICカードで開けれたら最高に楽になる...!という事案が発生したのでRaspberryPiでスマートロックを自作する記事となります。

スマートロックについては巷に沢山記事や事例があってn番煎じとなりますが、作ったものを残していく意味で記事化しました。

ドアの形状

https://item.rakuten.co.jp/tkhope/1686_hmw-3st/

Rakutenの物になりますが、こちらのドアノブに適用します。
通常のドアですが、鍵穴がドアノブの真ん中についているタイプです。
これのせいで通常のスマートロックが使用できない...!

という事でこれに適用するためにスマートロック機構を自作します。

計画

ICカードリーダーとサーボモータを用いてドアにくっつけようという事になりました。加えてAPIとWebサービスを構築してUIから色々出来るようにします。(理想)
APIとWEBサービスを載せるのである程度性能能あるRaspberryPiを使おうという事になりました。

また、途中でオートロックみたいな機構をつけたいという事と、鍵でも開閉ができるようにしたいという事が発生したので、その部品も購入しました。

なお、私がGoを使ってみたかったのでソフトウェアはGoで記述します。

見通し

  1. ドア形状の確認
  2. 情報収集
  3. 開閉ソフトウェア作成
  4. 取り付け

用意するもの

  • Raspberry pi 4B 4GB
  • サーボモーター

https://www.amazon.co.jp/gp/product/B00WQWZXKW/

  • ドアノブにつけるハンドル

https://www.amazon.co.jp/gp/product/B007KDX4RG/

  • GPIOとサーボなどの部品をつなぐ線
  • カードリーダー(RC-S380)

https://www.amazon.co.jp/gp/product/B00948CGAG/

  • ドアの開閉検知用センサ

https://akizukidenshi.com/catalog/g/gP-13371/

  • 鍵を回したときにサーボモーターが邪魔しないように電流を制限するもすふぇっと

https://akizukidenshi.com/catalog/g/gI-16488/

なお、カードリーダーは新しすぎるとライブラリが対応していない事があるので少し前のモデルを購入しました。

まさか私がMosfetを使うと思わなかったので仕様をあんまり覚えていませんでした()

ドアと機材の接続

ドアとサーボモーターの接続と固定に使用する部材については知人にドアノブの形と予定形状を伝えて作っていただきました。

困ったこと

サイズが合わない

改造済みEnder3を用いて印刷をしたのですが、精度が若干怪しく、ぴったり作るとギアが固すぎたり上手く穴にギアが入らなかったりしました。
最終的に異なるサイズを複数印刷して組み合わせていました(n敗)

ドアにうまく固定されない

ドアの材質は木なのですが、どうやら3Dプリンターと接着剤、ドアの相性が悪く、数時間経過後に脱落する事態が多発しました。
その結果鍵が開かずに困ったり...

最終的にドアに釘を打ち付け、そこに部品を取り付けました。
更に接着剤と両面テープを組み合わせて固めました。

Raspberry Pi 環境構築

Goインストール

こちらの記事を参照

https://zenn.dev/ni_rila/articles/327d214eb9fe13

前提ライブラリインストール

libusb-1.0

$ sudo apt install git libusb-1.0-0-dev

ソフトウェア設計

前述の通りGoで開発します!

出来たものはこちら

https://github.com/niwaniwa?tab=repositories

Goの使用をつかめていないので(特にほかのプロダクトを見ていなかった)main.goが荒れてます。
もう少し勉強するべき...

Goでの使用ライブラリについて

RaspberryPiのGPIOを使うためにgo-rpioを使用します。またICカードの読み込みにはpasoriを使います。

ソフトウェア機能概要

  • ICカードの登録APIを実装
    • 外部からPostすると登録できるように
  • ユーザー管理
    • 登録されたユーザーのみ開閉できるように
  • オートロック機構
    • 指定時間で自動的に鍵が閉まるように
  • Discordメッセージ送信
    • 鍵の開閉によってDiscordのチャンネルにメッセージを送信します。
    • ユーザー名と時間が送信されます

ソフトウェア詰まったところ

VIDとPIDについて

lsusbにて接続されているVIDとPIDの値を確認します。
これをしないとエラーが発生します。これで一時間程度死んでました。

GPIOのPWM対応PINは限られている

全部大丈夫と思ったら一部のピンしか対応していないとのこと。

ginでJson出力するときにしっかり名称を付けないといけない

確かにC#などでも[SerializeProperity]などでつけたりするので確かにそう。

Pasoriを使うには管理者権限が必要

ライブラリの使用で、ICカードを読み取るには管理者権限が必要とのこと。

実際の動作

動画撮影できていないのでまた今度!

終わりに

計画立案から大体1年くらい経過しました。

現在はWebアプリは存在しませんが、今後1年間で実装していきたいところ。

余談

本システムを作るのに情報収集をした際、丸ノブのアダプタは無く、自身で作るしかないと考え作成していたのですが、完成間近に友人からSesamiを紹介され「丸ノブ型のアダプタ作ってくれたの?!」となりました。
よっぽどじゃない限りこちらのSesamiを使った方が安く済みますし、見た目もカッコよくなります!!!!!!!😭😭😭😭😭😭😭😭

Discussion