こんにちは、ポニ丸です。
設計編から1ヶ月以上かかってしまいましたが、お待たせしました!ようやく完結です!
まだ、設計編を見ていない方はこちらから読んでいただけるとありがたいです。
回路作成
設計編にて設計した回路図をベースに、回路を組んではんだ付けをしていきました。
その後いろいろあって変更も加わったので完成版の回路図を貼っておきますね。
ファームウェア開発
ハードウェアとしてはOKだとして、お次はファームウェアです。
ファームウェアというのはハードウェアを動かすためのソフトウェアのことを指しています。
今回は以下が開発環境となっています。
項目 | 内容 | バージョン |
統合開発環境 | Arduino IDE | 1.8.13 |
言語 | C++ | – |
使用ライブラリ | MFRC522.h SP32Servo.h | – |
プロジェクトの構成
今回のプロジェクトはオブジェクト指向という考え方に基づいたプログラム言語を使用しています。
オブジェクト指向は簡単に言うと、物体を構成する各パーツの設計書から、必要な数だけ設計書を使って具現化するという考え方です。
そんなオブジェクト指向の言語のひとつであるC++を使って必要なパーツを作ってガッチャンコ!という構成でやっていきました。
ざっくり構成はこのようになりました。
ファイル名 | 機能 |
---|---|
isr_switch.cpp/h | スイッチの状態を取得するパーツ |
led.cpp/h | LEDの点灯/消灯を制御するパーツ |
rc522.cpp/h | NFCリーダ(RC522)を制御するパーツ |
sg92r.cpp/h | モータ(SG92R)を制御するパーツ |
print.cpp/h | 動作中の様子をシリアル通信で出力するためのパーツ |
user.cpp/h | スマートロックを開錠できるユーザの情報を登録するためのパーツ |
キーとなる機能
このスマートロックのファームウェアとしてキーとなる機能をご紹介します。
ユーザ認証
NFCでICチップと通信をするんですが、誰でも鍵を開けられちゃうとセキュリティ的にダメダメですよね。なので、ユーザ認証として簡易的ながら独自手法で実装をしました。
- 事前登録
スマートロック本体には認証できるユーザ情報(ICチップの固有ID、ユーザが設定したデータ、ユーザ名)をセットで登録しておきます。
また、スマートロック本体に登録した固有IDを持ったICチップに「ユーザが設定したデータを暗号化したデータ」を書き込んでおきます。
こうすることでICチップを落とした場合でも拾った人が暗号化のやり方を知らない限りは何のデータを書かれているのかを判別することはできません。(ここがミソ!) - ICチップのタッチ
ICチップをタッチすることでICチップに書かれているデータをとってきます。
ここで、スマートロックはICチップに書かれている暗号化されたデータがどうやって暗号化されたかわかっているので、タッチされたICチップの固有IDが持つデータとスマートロック本体で登録済みのデータを暗号化したデータが一致しているかを確認します。
そもそも固有IDの登録がなかったチップやデータが一致しないチップであれば認証はされません。
この関門を潜り抜けた猛者チップだけが開錠という優越感に浸ることを許されます。
スリープモード
今回使ってるESP32っていうマイコンは通常時結構電力を消費するんですよ。
なので、可能な限り消費を抑えたいという目論みです。
それを実現するためにはスリープモードというモードがあります。
簡単に言うと一時的にできる機能を減らして寝ることでエネルギー消費減らしますよーモードです。
本当は基本的にスリープモードに入りっぱなしにしておいて、OPEN/CLOSEボタンのプッシュかICチップのタッチで起き上がって必要な動きだけしてまた寝る。ってしたかったです。
切実にしたかったです。
でもNFCリーダのRC522でタッチ時に割り込み信号を出力するような設定がわからず断念したので、ボタンプッシュ時に起きる、と、1秒ごとに起き上がってタッチ状態に合わせて動いて寝る、という仕様になりました。
ESP32はスリープモードがいくつかの種類があるんですが、今回採用したのはlight sleep modeです。
モードの種類や違いは気になる人は調べてみてください!
プロジェクト
今回作成したスマートロックのプロジェクトはgitHubにアップロードしています。
気になる方はダウンロードしてみてください。
筐体作成
筐体(きょうたい)とは、回路とかを入れるカバーやケースのことです。
正直、この筐体作成のせいでここまで完成/更新が遅れてしまいました。サーセン。
なぜかというと、自分が「こうした見た目にしたい!」っていうケースって残念ながら売ってないんですよ。3DプリンターがあればCADで都合がいいように設計してプリントアウトすれば難なく完成!なんですが持っていないので、回路が入るケースを買って加工するという力技で試行錯誤マンでした。
買っては加工で失敗し、買いなおしてはうまくいかず、を繰り返してようやく完成を迎えることができました。機能としては充足しているのにケースのせいで心が折れそうになったんですが日の目を浴びることができてほんとによかったです。
完成!
すべてのパーツがそろい、スマートロック完成です!
ここまで来て写真だけでお伝えするのも忍びないので、動いてる様子見ていってください!
作成にかかった金額
皆さんが気になっているのは、最初に掲げていた5,000円という予算内でできたかどうかというところですよね。さあ見てみましょう!
品目 | 金額 |
---|---|
ESP32マイコン | 1,250円 |
NFCリーダ(RC522) | 680円 |
NFCタグ(10枚入り) | 763円 |
モータ(MG996) ※SG92Rだと力不足だったので変更 | 914円 |
ユニバーサル基板 | 140円 |
各電子素子(LED, スイッチ等) | 655円 |
合計金額 | 4,402円 |
無事5,000円以内に収めることができました!
とはいえ、機能とは無関係の筐体部分のお金が入ってないので実際はもうちょっとかかってしまっていますが。。
機能を満たすのはだいたい5,000円でできたんだねー、と優しい目で見ていただけるとありがたいです。
まとめ
最後になりましたが、今回スマートロックを自作してみて回路設計や筐体作成の難しさに触れることができました。
製作にあたり、色んなスマートロック製品の機能を見てこんな機能がこんな価格帯で!?みたいな驚きがあったり、どの企業さんも切磋琢磨してるんだなーと頭が上がらないです。
自分の知識だったり考えが及んでなかった点もいくつも見つかったので、これを次回の開発品に生かしてどんどんよいものを作れるように頑張っていこうと思います。
この記事上ではとりあえずの動作動画しか出せていなかったので、後日ちゃんとした動画にまとめて紹介をしていこうと思っています。
ここまでご覧いただき、ありがとうございました。
興味を持ってくれた方々に感謝感謝です!
コメント