おうちハックデバイスを作りました!
おうち(寮)ハックデバイスを作りました!
はじめに
きっかけ
寮暮らしをする中で、以下のような個人的要望が出てきました。
- 共用洗濯機・乾燥機がいつ終了したか分からない。
他の人が使い終わった後、すぐ使いたい。 - 食堂が何時に開いたか知りたい
- 郵便物が来たら知りたい
などなど。
→ センサで情報収集して、無線で自室まで飛ばせるデバイスが欲しい!
開発するデバイス
今回は各技術を勉強することを主目的とし、時間をかけて汎用的デバイスを開発するのではなく、
「食堂が何時に開いたか知りたい」
に絞ってデバイスを開発しました。
食堂が開く=電気がつく → 光センサデータを無線で自室へ送るデバイスです。
要求仕様
こんなデバイスだったら良いなーと思いながら、以下の要求仕様を書き出しました。
電源関連
- 電源が取れない可能性があるため、電池で稼働させる
- 電池交換の頻度は1〜2ヵ月に1度にしたい
- 電池残量を知りたい。切れる前に交換したい
通信関連
- デバイスは無線中継器としても動作し、寮全体を通信可能エリアとする
- 暗号化通信に対応し、スニッフィング・改ざん・不正コマンド受信を避けたい
→ 通信速度、ネットワーク構築の容易さ、開発ツールの使いやすさ、省電力であること等から、通信モジュールは、TWE-Lite REDを採用しました。
回路関連
- 外部に水晶発振子をつけ、クロックの精度を保証したい
- PICデバッグコネクタが欲しい
- 通信モジュール設定 & ファームウェア書換コネクタが欲しい
- 電池残量を調べる回路を組み込む
- デバイスの状態が一目でわかるLEDが欲しい
回路設計編
はじめにハードウェア側から取り掛かりました。
ブレッドボードで試験回路構築
要求仕様を満たせそうな電子部品・回路を考えて、ブレッドボード上で試しました。
下の写真では、直流安定化電源で電圧を変化させ、模擬放電特性カーブによって試験したり、
USB-UART変換を使ってPC側でデバッグをしたり、
テスターで消費電流を調べ、電池が持つ期間を計算したり、
オシロスコープで想定通りに動作しているかを確認しています。
ファームウェア開発 (試験用)
試験回路構築と同時並行で、MPLAB X IDEを使ってファームウェア開発を進めました。
今までArduinoで試験回路を組んで、ATmega328P-PUを本番環境で使っていた私が
PICマイコンを大好きになる程、MPLAB Code Configuratorの使いやすさは凄まじかったです。
参考書籍 : MPLAB Code Configurator
- 作者:後閑 哲也
- 発売日: 2018/04/14
- メディア: 大型本
補足 :
Mac版MPLAB X IDEの、MPLAB Code Configuratorは動作が遅すぎ問題で、
Winでの開発に切り替えました。
基板設計編
回路設計 (KiCad)
ブレッドボード上で組んでいる試験回路を、KiCadの回路図にしました。
この時ついでに小型化・代替できる電子部品は置き換えました。
参考資料 : KiCadことはじめ [PDF]
基板設計 (KiCad)
基板業者のデザインルールを守りながら基板設計をしていきます。
KiCadは3Dビューアーがついているので、部品同士の干渉チェックや、
コネクタが差せるか等を確認でき、便利です。
設計が完了次第、PDF出力し、ネットワークプリント経由でコンビニ印刷。
実寸大の紙にマチ針で穴を開けて、部品を差し込んで大きさ等の問題がないか最終確認します。
プリント基板 発注
発注時には面付けを行い、1枚あたり4基板で注文データを作成しました。
発注はいつもお世話になっている、Fusion PCBさんにお願いしました。
10枚発注して、約2,700円(配送料含)なのでとても安いです!
プリント基板 到着
今回は発注から6日で、基板が到着しました。
1枚あたり4個 * 10枚 = 40デバイス分の基板です。
ラジオペンチで4分割した後、ヤスリがけをして部品実装準備完了です。
ケース設計編
Fusion 360
個人で利用する場合は無料とのことで、Autodesk Fusion 360の使い方を勉強してみました。
以下の書籍を途中まで読み進めるだけで、自分のやりたい事は実現できた程、使いやすいソフトです。
参考書籍 :
Fusion360操作ガイド ベーシック編―次世代クラウドベース3DCAD
- 作者:三谷 大暁
- 発売日: 2017/10/01
- メディア: 単行本
設計した基板や、電池ボックスの寸法をスケッチで作図。
スケッチから3Dデータを設計。
発注する予定のネジの寸法と、基板厚(1.6mm) 等を考慮しながら進めます。
そのような時は断面解析がとても便利!
ついでにレンダリング機能を使ってみました。
最後にSTLファイルを出力して、ケース設計は完了!
3Dプリント編
STLファイルからGコード生成
FlashForgeの公式スライサー FlashPrintを使って、Gコード生成(*.x3g)をしました。
3Dプリント
生成したGコードをSDカードに入れて、3Dプリンタに挿し、プリント開始。
調整等は下の記事で書いています。
http://www.raihusoft.jp/entry/2018/09/01/133725www.raihusoft.jp
設計通りのものがプリントできました!
組立編
基板への電子部品はんだ付け
(写真を撮り忘れました。)
各部品取付
電池ボックスをタッピングネジで固定
基板はネジと六角ナットで固定
アンテナ、LED等と基板を配線
(ごちゃごちゃすぎる・・・)
CdSセルも予定通りの位置に!
ファームウェア書込み
通信モジュール TWE-Liteに、専用ポートから書込み。
このポートから、PICマイコンのデバッグや、TWE-Liteの設定もできるようになりました。
ファームウェア開発
MPLABを使い、以下のアルゴリズムをC言語で書いていきます。
電源投入時 初回動作
- 電源投入
- 親機へ、PING(TIMESYNC信号)を送信
- 親機から、デバイスの内部時刻を補正する信号(時刻補正信号)を受信
- 省電力動作モード(通常時)へ移行
例外処理として、時刻同期に失敗した場合はLEDを点滅
時刻同期・状態送信 動作
- 毎時9分00秒、39分00秒に、TWE-Liteを動作開始。無線受信・中継を有効化
- 毎時9分59秒、39分59秒に、光センサデータとバッテリ残量を親機へ送信
- 毎時10分10秒、40分10秒に、親機からの時刻補正信号を受け取り、
内部時刻を補正すると共に、マルチホップで他デバイスの時刻も補正する - 毎時10分59秒、40分59秒に、省電力モード(通常時)へ移行
※時刻誤差を考慮して、2分稼働に設定。水晶発振子をつけたので、1週間に1回の補正でも良いのかも?(要検証)。
目的別 状態送信 動作
今回は、「食堂が何時に開いたか知りたい」を解決するデバイスのため、
午前6時〜6時半頃に光センサデータを5〜30秒間隔(調整中)で送信する。
親機製作編
ハードウェア側
Raspberry Pi 3 Model Bと、TWE-Lite ToCoStickで作成しました。
ソフトウェア側
Python3系に、pyserialを入れてプログラムを書きました。
デバッグ用に書いた暫定的なコードなので、ダメダメです。
評価編
完成したデバイスの仕様
- 自己バッテリ推定 回路実装
- 水晶発振子によるクロック保証
- PICデバッグ&TWE-Lite設定&TWE-Liteファームウェア書換コネクタ実装
- 汎用出力コネクタ搭載
- 通常時 1[mAh]以下の消費電流 → 約80日間連続稼働
- 無線中継器としても機能 (TWE-Liteのマルチホップによる)
- 暗号化通信(AES128)対応 (TWE-Liteの暗号化機能による)
大体要求仕様を満たせたかなと思います。
最後に
今後実装したいもの
- 親機でエッジコンピューティング的なことをして、急激な光の変化を受信した時に、
LINE BOTから「食堂が開いたよ!」と通知 - 独自インタプリタ言語的なのをPICマイコンに実装して、
無線経由でファームウェア書換をやってみたい - 独自インタプリタ言語もどきのための、簡易コンパイラだったり、
エンジニアリングツール開発だったりをしてみたい
感想
ようやく念願の回路・基板設計、ファームウェア・ソフトウェア開発、ケース設計、3Dプリントの一連の流れが把握できた!
→経験技術一覧(ブログ内リンク)もまた少し増やせました!
(ただし、どれも入門者レベルの知識しかないので、要勉強。)
今後は見せる側(Web?)あたりを勉強し直して、Maker Faire Tokyo・NT〇〇...etcのイベントを目指すのも楽しそう!と思いつつも、
圧倒的アイデア&時間のなさ(やりたい・勉強したい事が多すぎて)に嘆いているところです。