一般家庭用のドアのロックを自動化する小物。キーを所持していれば、接近するだけで自動でロック解除され、離れると自動ロックされる。キーはスマートフォンにインストールされた専用ソフトウエアである。実際作成出来る所まで設計を進めます。
目次
キー交信
スマホ側アプリ
プロトコル/プロファイル
前提としてBLEのATTでの通信となります。サービスUUIDは、通信相手側も開発しますので、完全プライベートでも良いです。今回は、標準サービスの中の「Automation IO Profile」「Automation IO Service」を適用。これは、デジタルとアナログポートの入出力のためのものです。デジタル1ポートだけ使い、オンで解錠/オフで施錠という定義にします。
使用する開発ツール/動作環境
所持しているスマートフォンの都合でiOSのアプリケーションの開発です。iOSではCoreBluetoothというフレームワークを使う事になります。開発ツールは標準のXcodeで、言語は慣れているObjective-Cを使います。
なお、BLEをスキャンできるツールがアプリストアにあります。BLExplrはアドバタイズ情報が細かく出ますし、LightBlueはUUIDを名前で表示してくれるので解りやすいです。Microchip社からも出ていたりします。ドア側の小物が出来上がるまでは、これだけで良いかと思います。
処理概要
Automation IOサービスを探し、名前がALDで始まるのを見つけたらすぐコネクション要求します。つながったら、 ポートビットオンして解錠を要求します。あとは、画面から解錠、施錠を指示されたら、ポートビットを操作します。
ディスコネクトしたら、またサービスを探します。バックグラウンド状態でも検索は継続します。
実装確認
これは、後にSwift言語で作り直した時のスクリーンショットです。画面はスライドスイッチがボタンに変わったぐらいで、ほぼ同じです。
アプリとしては極めて単純ですが、CoreBluetoothが少し面倒です。サンプルコードやインターネットでの解説文などを参考にして、動作を確認しながら作り進めていきました。注意しなければならないのはプロジェクトのinfo、Properties設定、です。
- Privacy – Bluetooth Always Usage Description を追加登録、値はメッセージ文
- Required background modes に App communicates using CoreBluetooth を追加
最初の設定は、開発当初は不要だったのですが、CoreBluetoothのバージョンが上がった時に仕様変更となったもよう。初めてアプリを起動した時、アプリがBluetoothを使用しても良いか使用者に確認するメッセージが出ますが、その時のメッセージ内に付加される文言です。2つ目は、フォアグラウンドでなくとも、Bluetoothが動くようにするものです。多分、バッテリーの持ちを悪くするでしょう。
ドア側アプリ
使用する開発ツール/動作環境
PIC32MXの供給メーカマイクロチップの標準IDEである「MPLAB-X」で問題ありません。MPLAB-Xは、動作するPC環境を選びませんので大変助かります。開発する言語はCです。これは開発者(私)のスキルの問題です。ライブラリは標準の「Harmony」で問題ありません。Bluetoothスタックについては、自家製の物を使います。この為にBLEでのペアリング(セキュリティマネージャー)をサポートさせます。
処理概要
認証 ー 全てBluetoothスタックのペアリング機能に任せます
手動開閉 ー ボタン操作/リモート操作、サーボモータ制御
自動開閉 ー 接近解錠/定時解錠(当初未実装)
停電対応 ー 停電検出、解錠
解錠検出 ー 駆動電流監視、サーボモータフリー、警告音発生
表示・操作部
ドア側機構
サーボモータでサムターンを回す
制御はPWM信号を送るだけで、絶対回転位置にアームが動きます。50Hzでパルス幅が0.5ms〜2.4ms (2.5%〜12%) の仕様ですが、規格化されている訳ではないのでメーカによって異なります。製品によって回転方向が逆だったりします。サーボモータ個体によっても若干回転角は異なりますので調整が必要で、位置調整作業が必要になって来ます。
今回は一品ものの製作なので、現物調整で対応する事とします。(実際試した所では、メーカや個体によって大きく変わる事はないようです、回転方向以外は)
本当に回せるの?
サムターンのノブを人間の手で回した感覚と、サーボモータが回るときの応力を手で感じた状況を比べ、十分回せると思っていましたが、何か不安です。小物の開発では、初めて機械的な動きを持つ物が初めてだからです。
回転力の性能値はサーボモータの仕様表で分りますが、サムターンの回転力を調べる測定器は持っていません。そうすると、実物合わせの世界になってしまいます。以下、試した条件です。
(ノブは固くも柔らかくもないと感じられる程度のものです、数値では示せません)
- マイクロサーボ Tower Pro SG-90 1.8kgf·cm
- ミニサーボ Futaba S3502 ???(ミニサーボは3kg·cmが多い)
- 標準サーボ JR ES539 4.8kg·cm
ミニサーボでは回らない事があり、安定して回せるのが標準サーボでした。これは、試行したドア(鍵機構)によって変わると思いますが、意外と力がいる様です。人間が固いと思う位のノブは、超強力なサーボモータにしないと、ままならないという感じです。
応力検出
サーボモータの駆動電流を監視する事で応力を検出する方式です。電流センサもさまざまありますが、一番簡単でコストが低いのが「シャント抵抗式」です。直接マイクロコントローラのA/Dコンバータで電圧を計測できるように、出来るだけ大きな抵抗値を考えてみます。
検出電流×シャント抵抗=計測電圧
シャント抵抗=計測電圧/検出電流
=0.33V/500mA
=0.66Ω
計測電圧0.33VはVDDの1/10で、A/Dコンバータの出力が102カウントの数値です。これ位なら識別は可能ではないかと言う想定です。0.66を切りのよい数字にして1Ωとし、単純にローサイド側に取り付けます。
ランプ
明るい場所での設置や、明るすぎる場合の減光機能が必要だとか、特に難しい条件はないので、マイクロコントローラ直結の単純なLEDの駆動で問題有りません。しかし、マイクロコントローラが3.3V電源なので、白・青系のVF=3.4V〜では、駆動回路は少々考えなければなりません。もっともシンク駆動で設計しておけば、おおむね大丈夫(融通が利く)だと思います。
手持ちの部品が、プッシュスイッチにLED(白、緑)が内蔵されたもので、LEDの仕様がはっきりしません。実測で、3.3V+電流制限抵抗で問題ない光量を得られましたので、この条件で使用する事とします。
スイッチ
特に問題無し。プルアップ抵抗は、マイクロコントローラ内蔵の物を活用する。
アラーム
発音部品の選択。大音量と言うほどでもないので、コスト的に優れる部品の選択で良いと思われます。大きめの圧電スピーカーでいけると思います。
データ保存
ペアリングデータを不揮発性メモリに保存する必要があります。プログラム領域(FLASH)の一部を保存に使用可能。しかし、製作中にEDLCを壊してしまい、急遽手持ちの高容量品に変えたので、数時間はメモリ保存できるうようになりました。とりあえず保存機能は後回しとします。
電源部
全体
UPSの部分がEDLCを使った蓄電機能です。ACアダプタは安定化したDCですので、5Vにすればボルテージレギュレータを1つ省く事が出来ます。
蓄電部分
左側のような単純な回路では、今回の要件では適用できないと思われます。
充電ルートと放電ルートを別々に設定する事で、多少部品が増えても無理の無い回路になります。充電電流は抵抗値で自由に設定する事が出来ます。充電電流を高くすると、ACアダプタの仕様にもかかわって来ますし、別に時間がかかっても支障はないので、100mA以下で設計しました。
EDLCは、基本設計通り1F以上で、耐圧が6V以上の部品で探すと「Vina Technology VEC3R0335QG」3.3F 3V 260円×2個直列接続とします。(内部抵抗がmΩ級のもので選定)
ダイオードについては、充放電の電圧差を少なくするためにVfの小さいショットキバリアダイオード(SBD)を選択しました。IFが1Aぐらい〜 VFは0.3V以下なので、入手しやすい「1S3」が良いと思われます。ACアダプタの入り側のダイオードは、必ずしもSBDにする必要はありません。
ACアダプタ選択
出来れば、入手容易なUSB電源アダプタが良いのですが、要件を満たせません。汎用品として、近い所では6Vの物が使えます。使用するサーボモータ次第ですが、ピークを考えると500mA位は必要でしょう。6V1Aのスイッチングタイプで650円位です。
実際には、昔使っていた携帯電話のACアダプタがありましたので、これを使用します。5.8V700mAの仕様です。
停電検出
ACアダプタの出力をマイクロコントローラで監視する事とし、分圧抵抗でデジタル入力に接続できるようにします。
今回、Vf(順方向電圧)の小さいSBD(ショットキーダイオード)を使っていますが漏れ電流が比較的多いので、停電を検出できない可能性があります。SBDを止めて、普通のシリコンダイオードを使えば済む事ですが、VFが+1Vぐらい増える関係で、7V出力のACアダプタという入手困難な部品が必要になってしまいます。回避策として、分圧抵抗の全体抵抗値を低くする事で、多少漏れ電流があっても影響をなくします。
制御部
基板
一品物なのでユニバーサル基板を利用します。
外装
一品物なので、アクリル板を曲げて適当に作ります。
コメントを残す