どうやら鍵を頭に近づけてボタンを押すと、車のロックをより遠くの距離から解除できるそうです。前から裏技としてこのテクニックは知られていたようで、シミュレーションで検証する記事もありました。
二つの記事をざっと見た感じだとだいたい300MHzあたりのようで、超短波(VHF)寄りの極超短波(UHF)になるのでしょうか?
結構簡単な検証だと思っていましたが、屋外だと風があるせいか、標準になる限界の距離がどこなのかなかなかつかめませんでした。 |
結構簡単な検証だと思っていましたが、屋外だと風があるせいか、標準になる限界の距離がどこなのかなかなかつかめませんでした。 |
おかげさまで最近よく沖縄のニュースなどで取り上げていただいている「ミマモライド」ですが、こちら通信に LoRaWAN を使用しております。エンドデバイスは自動販売機などに設置していて地面に近いところにあります。なのでゲートウェイはなるべく高いところに設置をしています。
使用しているゲートウェイは DRAGINO の DLOS8 です。
ところが、設置後に通信のテストしていると、あれ?何か届かなくね?みたいのが発生したりします。よくよく調べると、アンテナのコネクタがきちんと刺さってなかったのか、そのあたりをイジってるときちんと電波飛ぶようになるときがあります。
設置場所は気軽に入れない場所がほとんどで、後から何か電波弱いね―みたいになると非常に面倒です。なのでアンテナが付いているときと付いてないときで電波強度にどのくらいの差が出るのかを事前に測定したいと思いました。
アンテナをきちんと接続した状態と、アンテナを外した状態でそれぞれ10m、20m、30m離れたところから2回ずつ電波を出して、ゲートウェイでどのくらいのRSSIで受信できたのかを測定しました。
GAEとっても便利なんですが、どうしても排他制御したい処理が出てきてしまいました。特定のファイルの更新とかそんな感じの処理です。syncronized で同じインスタンスなら排他制御できるので大丈夫なんですが、GAEの場合オートスケールするので同じインスタンスからのアクセスとは限らずその技は通用しません。
ググるとこういうときは Memcache を使って実現するようなのが多いようです。
これの、「同時書き込みの処理」のところを使って、ロックフラグみたいのをいじるようにすると実現できそうです。
というわけで実装してみたわけですが、、、ちゃんと動作しません。なんだろう、ソースそのまま使ってるしなーと思って上記のソースを眺めていると、、、あれ?これってキーがまだ無いときに複数同時に処理されると皆んな0で作っちゃうんじゃね?ということに気づきました。
ここの処理の肝は putIfUntouched を使って、特定の1スレッドだけが処理を完了できるところにあります。が、キーが無いときはただ 0 を put してるだけなのでここが被ると排他にならないわけです。
putIfUntouched で 0→1 は特定の1スレッド限定にできるんですが、 null→0 をやりたいときは putIfUntouched は IllegalArgumentException を投げてくるので使えません。
キーがない → 0でput → putIfUntouched で1にできた人勝ち
とやりたいところなんですが、勝ちが決まった瞬間に0でputの人が出てくると上書きされてしまうのです。
こまった。どうしたらいいんだ。ということで思いついた苦肉の策が、「putした人はしばらくロックバトルに参加できなくする」という作戦です。putした人の動きをしばらく止めておけば、後から来た人はキーが存在する状態なので putIfUntouched で勝者を決めることができます。
public void LockFile(String filePath) { Random rand = new Random(); MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService(); while (true) { byte[] oneValue = BigInteger.valueOf(1).toByteArray(); byte[] zeroValue = BigInteger.valueOf(0).toByteArray(); IdentifiableValue lockValue = syncCache.getIdentifiable(filePath); if (lockValue == null) { syncCache.put(filePath, zeroValue, Expiration.byDeltaSeconds(30)); try { Thread.sleep(1000); // ロック情報を作成したスレッドは1秒間ロック取得競争に参加できないようにする } catch (InterruptedException e) { e.printStackTrace(); } } else { if (new BigInteger((byte[])lockValue.getValue()).intValue() == 0 && syncCache.putIfUntouched(filePath, lockValue, oneValue, Expiration.byDeltaSeconds(30))) { // ここに来れるのは1スレッドのみ logger.info("Lock File : " + filePath); break; } } try { Thread.sleep(rand.nextInt(100)); } catch (InterruptedException e) { e.printStackTrace(); } } } public void UnlockFile(String filePath) throws Exception { MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService(); syncCache.put(filePath, BigInteger.valueOf(0).toByteArray(), Expiration.byDeltaSeconds(30)); logger.info("Unlock File : " + filePath); }
いちおうこれで考えてたような処理が無事できました。
競合が居ない(かつキーが無い)場合は最低1秒待たされることになりますがまぁ仕方ないかな。
従来の電波吸収体といえばパネルやカーテンみたいなもので遮蔽すると向こうが見えないのが普通でした。これをシースルーで実現させたのが、先日のリテールテックでも展示してありましたAGCさんの電波吸収遮へいガラスです。
東芝テックのRFIDウォークスルーゲート、AGCの電磁波吸収/遮蔽ガラスを採用
この製品のサンプルをAGCさんのご厚意によりお借りすることができましたので実際に試してみました。
試すにあたっていろいろ設置してやってみたのですが、電波の反射や回り込みの影響があるのでなかなか効果を測定することが難しかったので最終的にこんな感じで測定をすることにしました。
床にアンテナを置いて、そのすぐ上に電波吸収ガラスを設置します。これだと反射や回り込みもあまり影響しないのでうまく測定できるかなと。上に付いてるのは簡易的なスペアナのアンテナです。
リーダはマスプロさんの1W機を使いました。アンテナが大きいのが無かったのでシートアンテナを使いました。このアンテナは利得が3dBiなのでフルパワーとはいきませんがまぁ、これしか無かったのですいません。
電波を出してみて、スペアナで見てみます。
明らかに山の形が小さくなっているのがわかります。ピークっぽいところを比較すると、ガラス無しで 20dB がガラスありで 35dB くらいになってるので電力で換算すると30分の1くらいになってます。これはスゴいですね!
実際にタグを置いて読ませると、
前回は1WリーダのSR7と人感センサーを組み合わせて作りましたが、やっぱりハンディも欲しいよねーということでこちらのリーダで実装してみました。
国産で信頼性バッチリのタカヤさんのハンディリーダーです。形はシンプルですが、手元で出力調整も出来て使いやすい仕上がりになっております。
完成したのがこちら
ハンディにトリガボタンがあるのでそれを使うことにして、前回使った人感センサーは使用しませんが、それだとつまらないので温湿度センサーと気圧センサーをつけました。リーダで読み取った環境データも同時に取得できるという無理やりくっつけた感満載の機能です。
実際に動作させてみたのがこちらです。
松竹衣装様の導入事例を公開しました!
https://www.hayato.info/home/jirei_shochiku.htm
MANICA Excel Toolをご利用いただき、膨大な衣装類の持出/返却/探索/棚卸業務の効率化を実現いただいています。
従来よりExcelベースでの在庫管理を運用されていたとのことで、Excel資産を活用してそのまま業務をRFID対応できる棚卸パッケージを、VBAカスタマイズも含めて存分にご活用いただいています。
https://www.hayato.info/home/jirei_shochiku.htm
みなさまGWはどうお過ごしでしょうか。今回はGW恒例の?MANICAモバイル用のゲート作りをやってみました。前回の記事は何と5年前!5年も経ってるんだから相当進化してないとまずいよね?というチャレンジです。
MANICAモバイル用のゲートの要件としては、ゲートで読み取って、読み取った数をモニタに表示、そのデータをMANICAモバイルのサーバに送ることでスマホを使わずに入出庫ができるというものです。
数の表示というのが毎度困ってて、AndroidタブレットとかでもいいんですがACアダプタで常時利用となるとバッテリーの問題とかもあって丁度いいのがなかなかありません。何かないかと思ったらこれが机の上にあったので利用したいと思います。
M5Stackちゃんです。中身はいつものESP32なんですが、モニタも付いてるしボタンも付いてるしセンサも拡張できるので便利です。
肝心のリーダですが、前回はSTIXを使ってて250mWしか出なかったので、今回は1Wが出せるこちらを使ってみました。
SR7はBLEで接続しますが、ESP32はBLEが使用できるのでM5Stackそのままで利用できます。筐体はスリムなのに1Wが出せるということでとても進化を感じる端末ですね。
ゲートとはいえ電波出しっぱなしだと何なので、M5Stackに人感センサーをつけてこれが反応している間だけ電波を出すようにしました。
完成品がこちら。
数字だけなので寂しいですが後でいろいろ表示するようにしたいと思います。早速タグを持ってセンサの前に立ちます。
するとほら!読み取ってますねー。ESP32はWiFiも付いているのでWiFiを繋げばこのままクラウドへデータ送信可能です。便利。