はじめに

組み込みアプリケーションには迅速な開発が求められます。また最近では、柔軟性を確保しつつ、複数のプラットフォームにわたる拡張性を実現することが重要になってきました。この目標は、高性能のマイクロコントローラとオープンで拡張性の高いソフトウェア・エコシステムを組み合わせることで達成できます。

本稿で具体的な例として取り上げるのは、石油タンクの遠隔監視システムです。このシステムでは、Armベースのマイクロコントローラを中核的な要素として使用します。それにより、一般的なセンサーとのインタフェースを確立します。また、実際の環境において測定結果に対する処理を適用します。加えて、ワイヤレス通信により、シンプルなレシーバやディスプレイに対して結果を送信します。このシステムを開発するに当たっては、ハードウェアやソフトウェアをゼロから構築するのではなく、既存のビルディング・ブロックを活用します。それにより、機能的で構成が可能(コンフィギュラブル)なシステムをいかに迅速に構築できるのかを明らかにします。

また、このプロジェクトでは、ソフトウェア開発環境として「CodeFusion Studio」を使用します。同環境と「Zephyr RTOS」(以下、Zephyr)を組み合わせることにより、低レベルの詳細な実装ではなく、データ・アクイジション、処理(プロセッシング)、通信といったアプリケーション・レベルの動作に注力することができます。既存のドライバ、ミドルウェア、コネクティビティ・スタックを利用すれば、開発工数を大幅に削減することが可能になります。また、別のセンサーやワイヤレス・インタフェースを採用したり、別の最終用途向けにシステムを変更したりすることも容易になります。

本稿で監視の対象とする石油タンクは家庭用のものです。ただ、その基本的なアプローチは様々な分野に広く展開できます。つまり、高性能のマイクロコントローラとオープンで拡張性の高いソフトウェア・エコシステムを組み合わせれば、実用性が高く広範な分野に展開可能な組み込みソリューションを実現できるということです。しかも、不要な複雑さを排除し、迅速にプロトタイピングを実施したり、より自由に実験を行ったりすることが可能になります。

システムの概要

このプロジェクトで開発したシステムでは、主な構成要素としてタンクに取り付けるトランスミッタと屋内に配備するレシーバを使用します(図1)。トランスミッタは、まず油面までの距離とタンクの付近の温度を定期的に測定します(温度については後述)。次に、設定されたタンクの形状に基づいて、油面までの距離の測定値を充填レベル(油量と充填率)に変換します。得られた結果は、ワイヤレス・リンクを介し、コンパクトなペイロードとして送信されます。レシーバは、そのペイロードをデコードして画面の表示を更新します。それにより、石油の残量を一目で確認できるようになります。計量棒を用いて手作業で測定を実施する必要はありません。

  • 図1. システムのブロック図

    図1. システムのブロック図

トランスミッタ

トランスミッタの電子回路は、タンクの蓋に組み込みます。その回路は、超音波センサー、マイクロコントローラ「MAX32690」、温度センサー「MAX31723」、Wi-Fiモジュールで構成されています。

マイクロコントローラは、まず超音波センサーによる測定を始動させる役割を担います。次に、ToF(Time of Flight)に基づいてタンク内の石油までの距離を算出します。続いて、距離のデータを液面の高さと容積のデータに変換します。さらに、得られたデータを送信用のフォーマットに整形します。タンクに関するパラメータ(容量や形状のプリセットなど)を選択するためには、ハードウェアの設定を実施しなければなりません。そのためのシンプルなインタフェースとしてはDIPスイッチを使用します。このような形でトランスミッタを構成することにより、サイズの異なるタンクを対象とする場合でも同じファームウェアを再利用できるようにしました。

レシーバ

レシーバは、マイクロコントローラ(MAX32690)、温度センサー(MAX31723)、Wi-Fiモジュール、液晶ディスプレイ(LCD)によって構成しました。これにより、トランスミッタから送信されたペイロードを受信します。そのなかから算出された充填レベルの情報を抽出し、液晶ディスプレイに表示される充填率(単位は%)、容積、室内の温度の値を更新します。このシステムの特徴は、ユーザ・インタフェースをセンサーのノードから分離している点にあります。それにより、タンクへの取り付けが容易になると共に、屋内で結果を読み出せるという利便性が得られます。

なぜ超音波を使うのか?

このシステムでは、液面の測定にToFを利用します。そこで、ToFに対応する超音波センサーを採用しました。図2に示すように、このセンサーは液面に向けて超音波のバーストを放射します。その信号(波)は油面で反射し、受信部に戻ってきます。受信部は、戻ってきた音響エネルギーを電気信号に変換します。結果として得られるのは、送信から受信までに経過した時間の値です。それを使用して液面までの距離を算出します。

  • 超音波センサーの役割

    図2. 超音波センサーの役割

ToFを距離に変換するには、空気中における音の伝播速度を使用します。測定されるのは往復時間(センサー → 液面 → センサー)なので、片道の距離は次式で表されます。

  • [距離] =([空気中の音速]×[時間])/2

これにより、センサー面から油面までの距離を求められます。タンクの形状がわかっていれば、測定された距離を液面の高さや容積に変換することも可能です。以下の例では、長さが1.7m、幅が0.7m、高さが1.4m(内寸)の直方体のタンクを想定します。例えば、測定された距離が0.4mであった場合、液体の高さは次式で表されます。

  • [液体の高さ] = [タンクの高さ] − [距離の測定値] = 1.4 − 0.4 = 1.0m

したがって、液体の容積は次の式で求まります。

  • [容積] = [長さ]×[幅]×[液面の高さ] = 1.7 × 0.7 × 1.0 = 1.19m3

タンクが満杯の場合の総容積は1.66m3です。測定された液体の容積を用いれば、満杯時に対する充填率を%単位の値で表すことができます(以下参照)。

  • [充填率〔%〕] = (Vliquid/Vtotal) × 100 = (1.19 / 1.66) × 100 = 71.4%

一連の計算は、MAX32690のファームウェアによって実行します。つまり、未処理のToFの測定値ではなく、充填率(および関連する値)の算出結果をレシーバに送信します。

温度の測定結果を精度の向上に活かす

このシステムには、温度センサーが組み込まれています。その目的は、超音波による測定の精度を高めることです。空気中の音速は温度によって変化します。そのため、音速として固定値を使ってToFの測定値を距離に変換すると、周囲の温度が変化することに伴ってディスプレイに表示される値が変化することになります。

そこで、タンクの付近で温度を測定し、ToFから距離への変換に使用する音速の値を更新することにしました。そうすれば、温度に依存する誤差を低減し、より安定した充填レベルの推定値を出力できるようになります。

では、なぜレシーバにも温度センサーを設けるのでしょうか。その目的は、ユーザが室内の温度と石油の消費量の関係を把握できるようにすることです。タンク内の石油の量と併せて、温度などのデータを時系列で記録すれば、暖房システムの効率(例えば、1度日当たりの燃料の消費量や室内の温度帯ごとの燃料の消費量など)を把握するための知見が得られます。また、バーナーの性能の低下、断熱材の問題、あるいは制御上の問題を示唆している可能性がある消費速度の持続的な変動を検出することも可能です。このことは、予知保全に役立つ可能性があります。

実際に温度センサー(MAX31723)を追加した際には、CodeFusion Studioを使用しました。それにより、ソフトウェア開発の負担をほとんど増やすことなく測定チャンネルを追加することができました。

CodeFusion Studioとは何か?

CodeFusion Studioは、アナログ・デバイセズ(Analog Devices:ADI)が提供する組み込みソフトウェア開発プラットフォームです。アナログ・デバイセズがサポートするプロセッサ、マイクロコントローラ、デジタル・シグナル・プロセッサ(DSP)、ヘテロジニアスなコンピューティング・システムに対応しています。その中核的な要素としては、Microsoftのコード・エディタ「Visual Studio Code」を使用しています。CodeFusion Studioを用いれば、様々な要素が統合された環境において多様なワークフローに対応できます。例えば、プロジェクトの作成、SDKのリソースへのアクセス、システムの構成、パッケージへのアクセス、ビルド、フラッシュ・メモリへの書き込み、デバッグ、分析などを実施することが可能です。

CodeFusion Studioを採用すれば、組み込みソフトウェアの開発チームは大きなメリットを享受できます。それは、IC製品ファミリ、ツールチェーン、SDK、デバッグ・フローをまたいで作業する場合の障壁が低くなるというものです。具体的には、ベアメタルでの開発やZephyrをベースとした開発、マルチコアを対象とするデバッグ、GDB(GNU Project Debugger)ベースのデバッグ、メモリの検査、コア・ダンプの解析、システムの構成といったワークフローに対応できます。また、AIに対応するデバイスを対象とした組み込みシステムの開発も可能です。

CodeFusion StudioのIDEは、ヘテロジニアスなシステム全体にわたるアプリケーション開発、デバッグ、最適化もサポートしています。そのため、基本的な機能の開発はもちろん、実用レベルのシステムの構築も迅速に進められます。このプラットフォームに含まれるSDKでは、事前に統合済みのドライバ、OS、ミドルウェア、ドメイン固有のリファレンス・アプリケーションを利用できます。そのため、低レベルのソフトウェアをカスタムで開発する必要性が大幅に低減されます。

このシステムの開発においては、CodeFusion Studioが備える仕組みが特に有用でした。その仕組みとは、ハードウェアとソフトウェアを体系的に構成できるというものです。ハードウェア・リソースの構成や接続関係については、device treeを用いて記述します。つまり、システムの構成要素とそれらの接続を階層形式で表現することになります。この方法では、アプリケーション・コードから独立した形でペリフェラルやセンサーを定義できます。それにより、ハードウェアの変更が容易になると共に、コードの移植性が向上します。

一方、ソフトウェアの機能やシステムの動作は、Kconfigを用いて構成します。例えば、Kconfigにより、有効にするドライバ、通信スタック、OSの機能といったビルド時のオプションを指定するということです。device treeとKconfigを組み合わせることで、システムのリソースをきめ細かく制御しつつ、アプリケーションのコードをクリーンかつメンテナンスしやすい状態に保つことが可能になります(図3)。

  • device treeとKconfigの構成

    図3. device tree(左)とKconfig(右)の構成

ドライバ開発におけるZephyrとベアメタルの比較

このシステムを開発する際、初期の段階ではハードウェアの構成要素ごとに低レベルのドライバをカスタムで用意していました。

このベアメタルによるアプローチには、完全な制御を実現できるという長所があります。しかし、新たな機能やペリフェラルを追加するごとに、多大な時間と労力が必要になります。例えば、反復作業の速度が低下し、統合が複雑化するからです。また、拡大するソフトウェア・スタックのメンテナンスには、継続的に多大な労力をかけなければなりません。

このような問題について、2つの単純な例によって説明してみましょう。まず、超音波センサーによる測定機能を実装するには、ベアメタルのドライバとして89行のコードを記述する必要がありました。それに対し、CodeFusion StudioとZephyrのライブラリを使用すると、コードの量は35行で済みました。同様に、液晶ディスプレイに「Hello World」と表示する場合、ベアメタルでは136行のコードが必要でしたが、Zephyrを使用すれば37行で済みました。

このプロジェクトでは、CodeFusion Studioのリリース後にZephyrを導入したことが転換点になりました。Zephyrによって、拡張性とメンテナンス性が高い開発環境を実現できたからです。結果として、リアルタイム機能のより円滑な統合が可能になり、システム全体の進化が加速しました。重要なのは、ハードウェアを管理するための低レベルのソフトウェアではなく、データ・フローやアプリケーションの動作に直結する高レベルのシステム・アーキテクチャに注力すればよくなったことです。

また、このプロジェクトでは、Zephyrのハードウェア抽象化レイヤ(HAL:Hardware Abstraction Layer)を活用しました。それにより、ソフトウェアの修正作業を最小限に抑えつつ、複数のハードウェア・プラットフォームの評価を実施することが可能になりました。具体的には、同じアプリケーション・フレームワークを使用して、「MAX32690EVKIT」、「AD-APARD32690-SL」の両評価用ボードのテストを実施できました。特筆すべきは、Bluetooth Low EnergyとWi-Fiによるコネクティビティのオプションを直接比較できたことです。それにより、最適な通信方法を選択することが可能になりました。

プロジェクトが成熟するにつれ、Zephyrのモジュール式アーキテクチャがさらに役に立つようになりました。MAX32690については、よりフォーム・ファクタの小さいボードに実装するよう再構成することにしました。その移行も円滑に進められました。また、アプリケーションのコードの大部分は再利用することができました。変更が必要だったのは、ハードウェアに関する記述とビルド時の設定だけです。このような高い柔軟性が得られることから、RTOSベースのアプローチではプラットフォーム間の移行が容易になります。また、組み込みシステムの設計において、長期的なスケーラビリティを確保できることもわかります。

アナログ・デバイセズのビルディング・ブロック

このプロジェクトでは、手厚いサポートが得られるアナログ・デバイセズのビルディング・ブロックをいくつか使用しました。プロジェクトの目標は、拡張やカスタマイズの余地を残したまま、いかに開発期間を短縮し、リスクを軽減できるかを実証することでした。本稿で取り上げたアナログ・デバイセズのコンポーネントは、組み込み設計の中核となる処理、センシング、ソフトウェアを開発するための最新のフローを実現するものとして選定しました。

MAX32690のボードには、CPUコアとしてArm Cortex-M4Fを採用した先進的なSoC(System on Chip)が実装されています。また、十分な処理能力とIoT(Internet of Things)アプリケーションに必要なコネクティビティを兼ね備えています。MAX31723はフォーム・ファクタの小さい製品です。電源電圧は1.7V~3.3Vで、温度の測定精度は±0.5℃です。また、SPI(Serial Peripheral Interface)を介した通信に対応します。MAX32690もMAX31723も、産業分野の過酷な環境における動作が可能です。

このプロジェクトにより、ハードウェアそのものだけでなく、ソフトウェア・エコシステムも生産性の向上に大きく貢献することが実証されました。CodeFusion Studioを利用したことで、実績のあるコンポーネントの再利用を重視し、ハードウェア固有の変更を、アプリケーションの書き換えではなく設定に限定することが可能になりました。その結果、反復作業(ボードの交換や機能の追加を含む)をより迅速に行えるようになりました。CodeFusion Studioは、組み込みアプリケーションのビルドやデバッグに必要なIDE、SDK、構成ツールなどが統合された環境を提供します。また、要件の変化に応じた移植や段階的な拡張を可能にする、構成を優先した開発フローを実現できます。

将来の展望

このプロジェクトでは、油面の測定とデータの表示に焦点を絞りました。ただ、このシステムのアーキテクチャは、石油タンクを管理するための多様な機能に容易に対応できます。ポイントは、継続的な測定とワイヤレス接続の機能がすでに組み込まれていることにあります。このことから、タンクの使用傾向の追跡、残量が低下した場合の警告の発出、予測的な補充の通知といった機能を実現するための拡張を図れます。これらの機能を導入すれば、特に住宅や産業環境において、手作業による監視を不要にしつつ、より効率的に石油の量を管理することが可能になります。

このシステムの自然な拡張の例として、エネルギー・ハーベスティングを利用できるようにするというものが挙げられます。あるいは、何らかの手段により、超低消費電力の動作を実現するということも考えられるでしょう。そうすれば、長期にわたってメンテナンス・フリーな運用を継続することができます。多くの石油タンクは遠隔地や近づくのが困難な場所に設置されます。そのため、バッテリの交換が必要になることは望ましくありません。この課題に対しては、モジュール式のソフトウェア・アーキテクチャとマイクロコントローラ・ベースのプラットフォームの省電力機能が効果的に働きます。それらを活用すれば、システムの電源としてエネルギー・ハーベスティングを利用できるようにしたり、バッテリの寿命を延長したりすることが可能になります。言い換えれば、システムの自律性がさらに向上するということです。こうした拡張機能を追加すれば、本稿で紹介した単純な測定システムを、より包括的で拡張性の高いエネルギー監視システムに発展させられます。

まとめ

CodeFusion Studioは、事前に統合済みのドライバ、構造化された構成ツール、モジュール式のソフトウェア・アーキテクチャを備えたソフトウェア開発プラットフォームです。本稿で説明したとおり、同プラットフォームを活用すれば開発工数を削減できます。また、複数のプラットフォームやコネクティビティに関するオプションを効率的に評価することが可能になります。さらに、最小限の修正を加えるだけでシステムを進化させられます。

オープンでモジュール式のソフトウェア・エコシステムを活用すれば、基本的な測定機能を備える組み込みシステムを、拡張性が高くメンテナンスしやすい監視ソリューションへと進化させることができます。ソフトウェア・エコシステムにより、その再開発を最小限の工数で完遂することが可能になります。

本記事はAnalog DevicesのTECHNICAL ARTICLE「Simplifying Embedded System Design with a Modern Software Ecosystem」を翻訳・改編したものとなります