IoTの応用事例として多いのが、建設関係ではないかと思います。今回は、そんな建設業界の課題の一つとして挙げられる「建設重機周りの作業員を確認する」というソリューションを、VAB-630とSmartETKで作ってみました。
今回のアプリ提供の開発元になっているのは、VIA TechnologyのIoTパートナーであるSMART-INNOVATION株式会社です。
アプリ開発の前に
今回のアプリを開発するにあたり、何をどうするか?という視点で下記の課題がありました。
- どのテクノロジーを採用するか?
- どのように検出するか?
- どのくらいで開発できるか?
それでは、細かくみていきましょう
どのテクノロジーを採用するか?
これは、開発する案件でいつも課題に上がるポイントなのではないでしょうか?最適なテクノロジーを選択することが、組み込みシステムの醍醐味です。ということで、今回は、時代の流れにのまれつつ、「Bluetooth Low Energy(BLE)」を使うことにします。また、今回はVAB-630を使用しているので、OSのプラットフォームは、Android 5.0になります。Android 5.0からはBLEを正式にサポートしています。VAB-630には、PCIeのソケットがあり、WiFiとBLEのモジュールを搭載させています。(使用可能な型番は、EMIO-2531)
どのように検出するか?
では、Androidを使用して、Bluetoothを使うにはどうすればいいのでしょうか?もちろん、検索すれば多くの記事が上がっています。今回は、AndroidでBluetoothを使う部分で、必要なところのみ取り上げておきます。コードの詳細は、アプリ全てのダウンロードができるようにしてありますので、そちらでみてください。
Bluetoothのパッケージを指定する
Bluetoothのパッケージをimportします。Bluetoothを使うには、下記のパッケージが必要になりますので、同じように記述してもらえればいいと思います。
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothManager;
Bluetoothを有効にする
Bluetoothを使うには、BluetoothManagerというものに、サービスを登録する必要があります。そのあとに、Bluetoothのアダプタを登録すると、周辺にあるBluetoothのScanができるようになります。
final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); final BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter(); mBluetoothAdapter.startLeScan(mLeScanCallback);
ここで注意して置くべき点として、startLeScanは推奨されていない実装方法になりますが、Android 5.0では問題ありません。ですが、今後VAB-630でサポートするOSのバージョンがアップすると、この実装も変更する必要はあります。その時は、AndroidのDeveloperサイトがサンプルコードも豊富なので、参考になると思います。
Bluetoothの再スキャンを個別に実装
今回の実装で、あまり使わないと思いますが、保険として実装したものがあります。それが、「ReScan」です。BletoothはScanをしている時が、もっとも電力を消費します。なので、モジュール自身でも常にリアルタムでスキャンをしているつもりでも、間欠動作になっています。間欠時間は、ランダムなので早い時があれば遅いタイミングの時もあります。もちろん、APIで指定することもできますが、今回はデフォルト設定で使用しています。
再スキャンですが、Discovery()という機能で、Scannerの停止と開始を指定することができます。もっといい実装方法があると思いますが、再スキャンする際には、一度Cancelするのが、ここでのポイントです。
mBluetoothAdapter.cancelDiscovery(); mBluetoothAdapter.startDiscovery(); mBluetoothAdapter.startLeScan(mLeScanCallback);
Bluetoothのモジュール
今回は、建設業界ということでヘルメットの内部に、Bluetoothのモジュールを組み入れてみました。特に何か通信する訳でもないので、手元にあったBluetoothのモジュールを使いました。
検出方法
Bluetoothの信号を検出するもっとも簡単な方法は、RSSI(Received Signal Strength Indicator:受信強度 dBmが単位)と呼ばれるBluetoothの信号レベルを調べることです。BluetoothのScan時に、どのモジュールがどのくらいの信号なのかを同時に知ることができます。モジュール自体は、コイン電池で、1-2ヶ月以上は動作します。
今回の実装は、このRSSI信号が、-50(dBm)を境に近いの、近くないのかを判断しています。もっとも近い信号レベルは、-30(dBm)でした。
補足
このRSSIは、本来W(ワット)表記が正しいです。たとえば、無線LANの受信強度を20mWとし、干渉波は0.00000001mW以下。ただ、これではなんとなくよく分からない。そこで、dBm表記をする。dBmとは、1mWのときの信号強度を0dBmとした相対数値。よって、小さい場合はマイナス表記になる。
【計算式:電力(dBm) = 10log電力(mW)】
- 10mWをdBmにすると、
10log10=10x(log1 + 1)=10 - 0.1mWをdBmにすると、
10log0.1=-10 - 0.00000001mWをdBmにすると、
10log0.00000001=-80(dBm) - -50dBmをmWにすると、
10^(-50/10) = 0.00001(mW)
どのくらいで開発できるか?
IoTのアプリケーションは、短期間での開発を求められることも少なくありません。Androidのアプリといえども、同じことです。そこで活躍するのが、VIAの「Smart ETK」です。前回のコンテンツでもたっぷり紹介していますので、詳しい実装方法はそちらを参考にしてみてください。今回も、Smart ETKを使ってGPIOのポートを制御しています。どのように実装しているのか、紹介します。
Bluetoothの信号が指定した範囲に入ったらLEDを点ける
このようなシチュエーションはたくさんあると思います。SmartETKを使うことで、より簡単に扱うことができます。
if (rssidCur < -56) { bicomName.setText("今は安全です。"); if(mp.isPlaying()) { mp.pause(); } SmartETK.Gpio_Write(1, 0); } else { SmartETK.Gpio_Write(1,1); }
SmartETKによるGPIO制御
ここでは、rssidCurが-56dBmより小さな値(-60dBmなど)では、GPIOをOffにしています。それ以外の大きくなった場合(-50dBmなど)になると、GPIOをOnにしています。
GPIO:On SmartETK.Gpio_Write(1,1); GPIO:Off SmartETK.Gpio_Write(1,0);
SmartETKのGpioで12VのLEDをリレーで制御
GPIOの先には、LEDをつけていますが、12V系のブリンクタイプのLEDをしようしています。VAB-630から駆動できるGPIOは、3.3Vなので大電流が流せるリレーを介在させて、GPIOのOn/Offで12Vの信号をOn/Offさせています。こういったところも、実際のアプリケーションに近いものを想定してみました。
VAB-630のGPIOは、D-SUBシュリンク15ピンコネクタを使っています。ピン配置は、データシートを確認してみてください。今回は、1番ピンを使用しています。
ついでに音声もMediaPlayerで鳴らす
おまけ機能として、近づいたらLEDだけなく、音声も流せるようにしてみました。100均で購入した安いスピーカですが、なんとなく音は出ています。深追いはしませんが、アンプを通して、ボリュームを上げると、周囲の人にも聞こえると信じています。
まとめ
実装という意味では、あまり時間をかけなくても実装できるのが、AndroidとSmartETKの組み合わせです。最後の仕上げとして、実際に重機をイメージしたラジコンに無理やり搭載してみました。これからこのようなアプリを作ってみようと考えてる方の参考になればと思います。
ラズパイも悪くはないですが、こういったリアルなシステムを想定すると、VAB-630とSmartETKの組み合わせも、候補の一つとしてあげられるのではないでしょうか?
この製品を購入する 最新情報をメーカーサイトで見る
こちらも是非
“もっと見る” 実験室
組み込みアプリを止めるな!printfやブレークポイントも使わず内部状態をチェック!
産業機器、オーディオ製品、通信デバイスをはじめとする多くの組み込みアプリケーションは、わずかなタイミングの違いで動きが変化します。そのため、開発・検証のためにprintfなどを仕掛けることが難しく、開発効率が伸び悩むケースも増えています。そこで今回の実験室では、システムを止める事なく内部状態を取得できるデータ計測ツール「EVRICA」を紹介いたします。組み込みアプリケーションの開発や検証に欠かせない、新しい開発ツールです。
IoTエッジコンピューティングをSmartMeshで実践
今回の実験は、Moteに内蔵されている非力なマイコンを使って、振動計測ソリューションのFFTデータをSmartMeshで送信したIoTエッジコンピューティングを実践してみました。
非絶縁型中間バスコンバータ750Wで、48Vと12Vを自由自在
VicorのNBMシリーズの最新デバイスであるNBM2317シリーズは、23×17×7mmという超小型パッケージで最大750W出力、48V→12Vまたは、12V→48Vの双方向において98%のピーク効率を実現した非絶縁型中間バスコンバータ。今回の実験室は、実際に動かしつつ、その性能とメリットを解説している。その様子は、是非動画で見て欲しい。