現役エンジニア大川 博の無線化体験記②「社内の頼まれごとをBluetooth化して解決してみた」
こんにちは、ムセンコネクトCMOの清水です。(プロフィール紹介はこちら)
今回お届けするのは、現役エンジニア大川博さんによる「無線化体験記」です。
ムセンコネクトの無線化講座では、無線化に関する様々な情報を発信しておりますが、わたしたちのような「無線モジュールメーカーの立場」からではなく、実際に無線化に携わっていらっしゃる「エンジニアの立場」からも役立つ情報を発信できないかと考え、LINBLEユーザーとして長年お付き合いのある現役エンジニアの大川さんに無線化講座への寄稿をご相談したところ、快くお受けいただけることになりました。
エンジニア目線で語られる体験談を、無線化のヒントとしてはもちろん、ぜひ読み物としてもお楽しみいただければと思います。
こんな頼まれごとありませんか? 〜「社内案件」でのBLEモジュール活用〜
私が席を置く企業では、主に機械製品を開発・販売しています。 開発段階では、製品の動作や性能を確認するために電子回路、それ用のファームウェアが必要になります。 評価用の電子回路・ファームウェアにも開発品同様の仕様書があって然るべきですが、「実際の製品に搭載されないもの」かつ「そこそこ急ぐ」となると、口頭でのお願いという感じが多々あります。
経験のある方も多いと思いますが、そういうものに限って後から機能追加や変更が容赦無く襲ってきます。
流量を調整するバルブの開発・・・のお手伝い的な
今回のお手伝いは「流量を調整するバルブの開発」です。
簡単に言えば水道の蛇口の様なものです。 それに流す流体が特殊なだけです。
蛇口をひねる動作をモーターにさせます。どの程度ひねっているかをロータリーエンコーダーで検出します。ひねり具合で流体の流量が変わります。
ひねり具合と流体の流量の関係を評価するというものです。ひねり具合は外部からも軸の出入りとして確認できるため、メカ屋さん(機構設計者)からは「とりあえず回ればいい」という口頭での依頼です。まぁ、簡単にできそうですね。
ただ、組込み業界に長く身を置く私は鼻が効きます。簡単には終わらない…と。
評価回路の構成 〜Before〜
構成としてはモーター、ロータリーエンコーダを制御・監視する回路とファームウェアが必要です。モーターを動かすC言語の関数群は一通り出来上がっていて、ボタンの操作でそれらの関数を呼び出せばいいように作り込んであります。ロータリーエンコーダはモーターを指定の角度で止めたり、スピードなどを制御・監視するために利用しています。
「とりあえず回ればいい」という要望を十分満たせる機能に加え、実際はそれ以上の機能を盛り込んであります。何せ、鼻が効きますので。
メカ屋さんが使いやすいように、簡単なボタンを付けてあげます。とりあえず、これで評価はできそうです。
今まではこんな感じで評価用の基板をメカ屋さんに提供していました。そして、以下のようなやり取りが続きます。
次々と襲ってくる要望 〜Bluetooth化する前だと大変〜
ロータリーエンコーダで回転角度がわかるなら、回転角度を知りたいね。
いらない…って言ってたのに。でも予想通りの展開。
液晶を追加しなきゃ…配線・コネクタが増えちゃう。
このキャラクタ液晶、ソフトが意外に面倒なんだよなぁ。
軸の出入りの長さは回転角度から計算でわかるので、それも表示して♪
測定するの面倒くさくなった。
計算結果を表示するだけなら、ファームの変更だけで済むね。
まぁ想定の範囲。
指定した回転数・速度で回るようにしてよ。
ついでに指定した角度で止まるようにして欲しいな。
とりあえず回ればいいって言ったじゃん!
回転数を指定する手作り基板も追加だな…また配線とコネクタが増えた。
設定保存用のメモリデバイスも追加か…。
回転数とかの指定をするために、押したボタンに合わせて表示を切り替える感じが使いやすいかな。
それにしても結構なファーム追加だ… 外注だったら追加料金ものだよ…。
「1° 回す」「5° 回す」ときの角度を自由に変えられるようにならない?
ファーム変更で行けるけど、かなりの機能追加。
液晶の表現力も限界に近い。
画面をメニュー構造にして、さらに設定モードを追加して…。
ボタンも二個同時押しとかの組み合わせを利用しないと、また基板やスイッチが追加になってしまう… ちょっと使いづらくなりそうだ…。
ついでに耐久試験もしたいから、いい感じの機能を入れておいて。
聞いてねーよ!
けど、なんとかファームの追加だけで済みそう。
画面をメニュー構造にしておいて良かった。
耐久試験モードを追加しよう…。
モーター類を恒温層に入れるから、ボタンと液晶の配線を伸ばしておいて。
・・・・・・
ボタンの組み合わせとか、メニューが多すぎ!
使いづらいんだけど…。
だいたいこういうやり取りがありますよね。徐々に険悪になっていきます(笑)。 ソフトエンジニアのみなさんは特に頷いているんじゃないでしょうか(笑)。
慣れてくると、ある程度の追加要求は予想がつくので、ソフト屋さん(ファームウェア設計者)は割と先回りして色々作り込んでいる人が多いです。もちろん、ハード屋さん(回路設計者)も。
Bluetooth化した後の評価回路構成 〜After〜
評価回路をBluetooth化して、ボタン・液晶で提供していた部分をiPhoneで置き換えてみます。
前述の例ではC言語の関数を押しボタンで呼び出していましたが、これをUARTで呼び出せるようにしておきます。 今回は自作のLINBLE-Z1アダプタを使い、手作り基板のUARTとLINBLEを接続します。これでBluetooth通信を使ってiPhoneでモーターを動かすことができます。
Bluetooth化すれば要望への対応も容易に
ロータリーエンコーダで回転角度がわかるなら、回転角度を知りたいね。
ロータリーエンコーダのカウント値を外部へ送る通信文の追加と、iPhoneの表示を追加するだけでOK。
角度がわかりやすいよう、回転計のイメージも追加しよう。
ついでに、角度、周などの表記も簡単に足せるからやってみよう。
軸の出入りの長さは回転角度から計算でわかるので、それも表示して♪
測定するの面倒くさくなった。
iPhoneに表示を追加するだけでいける。
指定した回転数・速度で回るようにしてよ。
ついでに指定した角度で止まるようにして欲しいな。
「プリセット」という移動先の登録機能を追加して、プリセット画面へナビゲーションで遷移するように作ろう。
新しい移動先は現在位置を登録することもできるし、iPhone画面のキーボードでも入力できるようにしよう。いっぱい登録できるようにすると、試験に便利かな。
プリセットの内容はiPhoneに保存すればいい。
「1° 回す」「5° 回す」ときの角度を自由に変えられるようにならない?
設定画面をナビゲーションで遷移するように作ればいいね。
UARTで指定した角度移動するようにできているから、設定で何度動かすかを決めるだけでいい。
設定はiPhoneに保存すればいいね。
ついでに耐久試験もしたいから、いい感じの機能を入れておいて。
指定した2つの位置を行ったり来たりでいいかな。
UARTからの指示で動かせばいいから、iPhone側で対応できるね。
耐久試験のパラメータもiPhoneに保存でOK。
こっそりマラソンランナーのアニメーションでも仕込んでおこう。
モーター類を恒温槽に入れるから…
無線で届く範囲なら問題なし。
ハードウェアを追加しなくても「アプリ」で実現できる
違いを強調するため多少(?)悪意のあるやり取りの比較でしたが(笑)、LINBLEを使った場合はハードウェアの変更・追加がありませんでした。大抵のことがiPhoneで対応できます。
ソフトウェアの変更もファームウェアよりiOSの方がやりやすい
組込み側のファーム変更は思った以上に大変です。メモリや表示の制約など、リソースに限りがありますし、追加されたハードウェアとの連携も必要です。
その点iPhoneを利用した場合は、データはiPhone内に保存できますし、操作子の追加も容易、表示の表現力も豊かです。iOSのプログラミング言語「Swift」は、C言語に比べて少しのコーディングで多くのことができるのと、表示・画面遷移機能、ボタンなどの操作子、データ処理・保存機能が充実しているので、 思い切ってiPhoneに任せるという選択もいいと思いました。
UARTでできるならiPhoneじゃなくてPCでもいい?
iPhoneを使わなくても有線ならPCでもできるんじゃない?こう思う方もいることでしょう。
それを言ったら身も蓋もありません。確かにその通りです。私も以前はMacとPCを使っていました。
しかし、無線でできるというところに魅力があり、ケーブルからの開放は昔からの悲願でした。そして何より、iPhoneやiPadで開発支援ができるというのは、長年のMacユーザー(周りからは信者と呼ばれてます)である私にとっては、何より嬉しいことです。それに、高機能な言語を使うことで余裕と遊び心も生まれ、仕事に潤いが出ます。
最後に
UARTを簡単にBluetooth化できるLINBLEを使うことで、「製品に組み込む」という目的だけでなく、この事例のように開発支援にもiPhoneやiPadを利用することができました。
多くのソフト屋さんはデバッグや不具合解析のために、ファームウェアの中にシリアルコンソール等で制御できる仕組みを作り込んでいると思います。私もいわゆる「DOS窓」風なインターフェースをファーム内に作り込み、製品の動作を制御することができる仕組みを入れてあります。そして、USB-シリアル変換器などを使ってPCに繋いでいます。
LINBLEを使えば、開発機器側は何も変えることなく簡単に無線化でき、憧れ(?)のiPhoneやiPadでデバッグや制御ができるのです。Swiftを習得するより手作りの基板を作ったほうが早いかもしれません。でも、開発って熱量やモチベーションも大事な時があります。普段使っているiPhoneやiPadが製品開発に利用できるっ て、楽しいと思いませんか?
最後に…私はApple信者ですので、Androidが登場しないのはお許しください。