自分でつくるスマートロック/Lockitron Mechanical Assembly - ばかおもちゃ製作所
それで、あれこれ触ってみて、だいたい動かせるようになったのでまとめる。
大半はSparkFunの資料を読めば事足りる。
Lockitron Hardware Hookup Guide - learn.sparkfun.com
上記の資料はArduinoだが、私はRaspberry Pi2から制御した。
制作動画
構成と制御の手順
Lockitron mechanical assemblyの構成は前回紹介したとおり以下のような感じ。
- 単3形4本の電池ボックス
- 3V~9Vくらいで駆動するモーター
- 鍵を保持するゴムパッド
- ゴムパッドを保持する回転部(内側・外側)
- 回転部の状態を取得するためのリミットスイッチ4つ
回転部は手でも鍵を開閉できるように二重になっている。概念的には以下の様な感じで動作するものだと思われる(実装は違うのでイメージである)。
図が下手でよくわからないかもしれないが、外側のリングには空間があるので、内側のリングは手で回すことができる。内側のリングはそのまま鍵の取っ手を挟んでいるので、内側が回れば鍵が動く。外側のリングはモーターで動き、内側のリングを押して回る。というかんじ。
これが手でも回せるし、モーターでも回せる、という機構になっている。
で、あれ、でもモーターで鍵閉めたら、手で鍵開けられないよね?(外側が動いて空間が90度回転しているので)って思ったら正解です。そうなると手で開けられない。だから、一度鍵を開けたり、閉めたりすると、そのあとモーターを逆回転させて、上図みたいに手で鍵の開閉ができる位置まで外側のリングを戻す必要がある。
そのためにリミットスイッチが4つ(手前に2つ、奥に2つ)ついていて、手前のスイッチは内側のリングの位置を判定するもので、これがそのまま鍵の開閉状態の検知する役割になっている。奥側のスイッチは外側のリングの位置を判定するもので、奥の2つが同時に押されている位置がちょうど上向きに90度自由になっている位置になる。
なので、たとえば鍵をモーターで開く場合の制御の順序としては、
1.鍵を開くことが指示される
2.内側のスイッチの状態を見て、すでに開いていれば4へ
3.違う場合、内側のスイッチが開状態になるまでモーターを回転させる
4.開閉状態が一致したので、モーターを逆転させる
5.奥側のスイッチが両方押された状態になったらモーターを止める
という感じになる。
モーターの回転方向や、どの向きが鍵の開いている位置なのかはどうも鍵によって違うようなので、自分で向きなどをちゃんと決める必要がある。また上の制御でよいのは、「鍵が90度の回転で開閉する」もののみである(ヨーロッパなどでは何度か回すようなものなどもあるらしい)。
ソフトウェア
上記さえおさえればあとは好きに書けば良い。動画内で動かしているソフトウェアは以下に置いてある。
sashimizakana/diy-smart-locker
Node.jsでGPIOからLockitronのリミットスイッチやモーターの方向の制御をしている。モーターは東芝のTA7267BPというモータードライバーを利用している。
モータードライバー TA7267BP (2個入): 半導体 秋月電子通商 電子部品 ネット通販
単純な制御なので特筆するほどのことはないが、RaspberryPiのGPIOをプルアップにする方法がよくわからなかった。どうもArduinoとかみたいにさくっと切り替えられるのではなくて、そもそもチップの初期設定でプルダウンかプルアップか決まっていて、それを変えるにはデバイスツリーというハードウェアのプロパティについて記述するものを書き換えたりしないとダメっぽい(あんまりよく分かっていない)。
デバイスツリーについては以下のページが参考になった。
とあるエンジニアの備忘log: Device Tree 入門
で、正直バンバン書き換えるようなものなのか、そもそもそれが正しい手段なのかよくわからなかったので、そもそもプルアップのピンのみ使って作った。RaspberryPi2のプルアップのピンについては、ARMのCPUのマニュアルに書いてあった。
http://www.farnell.com/datasheets/1521578.pdf
102PからGPIOの設定について記してある。
それらを適当に結線したら、あとはExpressでサーバーを立ててsocket.ioで通信するようにして、フロントエンドをAngularJSで書いたがその辺はググればなんぼでもサンプルがあるだろうから省略する。そのあたりはまるごと全部使う人の用途に合わせて書くべき部分である。
なので、読むべき部分というのは実際に制御している以下のファイルだけである。
diy-smart-locker/lock.js at master sashimizakana/diy-smart-locker
前述のとおり、ロックのまわる方向や、どっちのスイッチが押された時に錠が開閉しているかの判定などは自分の環境に合わせて書き換える必要がある。錠やモーターを壊さないように、試すときには鍵を引っ掛けるゴムの部分は外しておいて、ごく軽くリングの部分をおさえて動作させてみると良い(軽くおさえないと、ニュートラル位置に戻るときに内側のリングも一緒に回ってしまう)。それで、ちゃんと鍵を回したい方にリングが回っているなら、良いし、そうでなければリングの現在位置や判定につかうスイッチを変えれば良い。
このサンプルだとサーバーにアクセスできればだれでも開閉出来るし、LAN内だけで運用するなら家の外から鍵を開ける前に無線LANに接続しなければならなくて面倒くさいし、実用性はない。実際に使うなら、BLEだとかICカードなんかでドアの内側と通信するようにするか、出先から鍵の状態を確認したり開けたりしたいならMBaaSなんかを使ってそれ経由で制御すると良いかもしれない。
参考
Lockitron Mechanical Assembly - COM-13648 - SparkFun ElectronicsLockitron Mechanical Assemblyの通販。
※単体で買うならSwitch Science経由で輸入するのが安い
Lockitron Hardware Hookup Guide - learn.sparkfun.com
SparkFunによる解説記事。中腹くらいのリミットスイッチのピン解説間違ってる気がする。書いてあるピンは右側の2つのピン配置で、左側はそれを上下反転された向きになるのでピンの位置が反転してるような形になっていた。
この記事内では両サイドのピンを使っているので、気付かなかったんだと思う。
(ピン側とプラス側が逆になっても動作変わらないはずだし)
*
Qrio (2015-09-07)
売り上げランキング: 1,140
売り上げランキング: 1,140