マイクロコントローラーでセンサー データをマスターする:ステップバイステップの初心者向けチュートリアル
今日の世界では、コンピューターは至る所に普及しており、一般に 2 つの主な目的を果たしています。
1 つ目は汎用コンピューティングで、さまざまなアプリケーションやプログラムの実行など、幅広いタスクを処理します。例には、ラップトップ、デスクトップ、サーバー、スーパーコンピュータなどがあります。
2 つ目は組み込みシステムです。これは、特定の機能のために設計された特殊なコンピューターです。サーモスタット、冷蔵庫、自動車、その他のスマート家電などのデバイスによく見られ、センサーを利用して環境データを収集し、タスクを効率的に実行します。
センサーの役割
センサーはどちらのタイプのコンピューティングでも重要な役割を果たします。組み込みシステムでは、センサーが環境データを収集し、自動運転車、家電製品、産業機械などのデバイスがタスクを実行できるようにします。汎用コンピュータでは、センサーは主に温度や電圧などの内部状態を監視し、安全な動作を確保し、過熱や電気的障害などの問題を防ぎます。
人工知能 (AI) とモノのインターネット (IoT) が進化するにつれて、センサーは現実世界のデータを収集してインテリジェントな意思決定をサポートするために不可欠なものになりました。組み込みシステムはセンサーを活用して環境を認識し、生データを実用的な洞察に変換して自動化を強化し、業界全体の効率を向上させます。
これは、センサーのインターフェースを理解し、堅牢なセンサー駆動のソフトウェアを設計することが、エンジニアにとっても愛好家にとっても同様に重要なスキルになったことを意味します。
初心者でも経験豊富なエンジニアでも、このガイドはセンサー インターフェース ソフトウェアについてしっかりと理解するのに役立ちます。
学習内容と記事の範囲
この記事では、センサーをマイクロコントローラー (MCU) に接続し、生データを意味のある使用可能な情報に変換するセンサー ソフトウェア パイプラインを設計する方法を学びます。また、組み込みシステムでセンサー データを正確かつ効率的に処理するための実践的なテクニックも学びます。
ここで取り上げる内容の内訳は次のとおりです。
-
センサーの概要とその仕組み – センサー、一般的なタイプ、センサー パイプラインがセンサー データの処理にどのように役立つかについて説明します。
-
主要なセンサー特性 – プロジェクトに適切なセンサーを選択するのに役立つ、感度、精度、精度、範囲、ドリフト、応答時間などの重要なパラメーター。
-
センサーとマイクロコントローラーを接続する方法 - マイクロコントローラーがセンサー データを読み取ることを可能にする SPI、I²C、GPIO などのハードウェア接続と通信プロトコル。
-
センサー データのソフトウェア アーキテクチャ – ドライバー、ADC サポート、スケーリング、キャリブレーション、後処理など、センサー データを処理するソフトウェア パイプラインの概要。
-
パイプライン コンポーネントの詳細な設計 – 生データのスケーリング、センサーの校正、ノイズの多い信号をクリーンアップするためのフィルターの適用に焦点を当て、パイプラインの各ステップを詳しく調べます。
-
電力管理の実践的なヒント – 組み込みシステムでセンサー データを扱う際に、低電力モード、FIFO バッファ、DMA を使用して電力を効率的に処理するためのベスト プラクティス。
この記事を読み終えるまでに、生のセンサー データの読み取りから、インテリジェントな接続デバイスで実際に使用できるように準備するまで、組み込みシステム用の完全なセンサー データ パイプラインを設計して実装する方法がわかるようになります。
注意 :高度なデータ処理、高解像度 ADC、センサー用のハードウェア回路設計については、この記事の範囲外です。
前提条件
この記事を最大限に活用するには、以下が必要です:
<オル>マイクロコントローラーの基礎知識:ADC (アナログ デジタル コンバーター)、SPI (シリアル ペリフェラル インターフェイス)、I2C (集積回路間)、GPIO (汎用入力/出力) などの一般的な周辺機器についての理解。これらのプロトコルを初めて使用する場合は、この記事で概要を説明します。
エレクトロニクスの基礎知識:アナログおよびデジタル インターフェイスを含む、回路と信号に関する知識。
C でのプログラミング:ドライバー開発を含む組み込みソフトウェア開発に関する知識。
(オプション) センサーの基本知識:さまざまな種類のセンサー (温度、圧力、動きなど) を理解することは役に立ちますが、必須ではありません。
また、この記事は次のことを前提としています。
-
あなたは、センサーの統合に必要な周辺機器を備えたマイクロコントローラーを操作しています。マイクロコントローラの周辺機器の詳細は、リファレンス マニュアルに記載されています。たとえば、STM32F4 シリーズ マイクロコントローラの場合は、すべての詳細が記載されています。
-
あなたは、組み込みシステムで使用されるコンパイラ、デバッガ、および IDE に精通しています。一般的なツールには次のものがあります。
-
コンパイラ:GCC、Clang、
-
デバッガ:GDB、LLDB
-
IDE:Visual Studio Code (VSCode) は、特に組み込み開発とデバッグ用の拡張機能で人気のある選択肢です。
-
-
あなたは、実世界のデータを効率的に収集して処理できる、信頼性の高いセンサー駆動の組み込みシステムを構築することを目指しています。
目次
-
センサーとセンサー パイプラインとは何ですか?
-
センサーの特性
-
マイクロコントローラーとのインターフェース方法
-
ソフトウェア アーキテクチャ
-
コンポーネントの概要
-
センサーからのデータへのアクセス
-
センサーの電源管理
-
-
コンポーネントの詳細設計
-
1. センサードライバー
-
2. ADC サポート
-
3. スケーリング
-
4. 校正
-
5. データの後処理
-
-
結論
センサーおよびセンサー パイプラインとは何ですか?
センサーは、温度、圧力、光などの物理的特性の変化を検出し、それらを測定または解釈できる電気信号に変換します。たとえば、サーミスタは、温度によって抵抗が変化する抵抗器の一種です。温度が変化すると、サーミスタの抵抗が変化し、その両端の電圧が変化します。次に、システムはこの電圧変化を解釈して温度を決定します。
センサーをより深く理解するには、人体の自然なセンサー、つまり目、耳、皮膚、鼻、舌について考えてみましょう。これらの自然のセンサーは、環境に関する信号を処理のために脳に常に送信します。脳のさまざまな領域がこれらの信号を解釈し、その情報を使用して行動や反応を推進します。脳が自然センサーからの信号を処理するのと同じように、マイクロコントローラーはセンサー パイプラインを使用して電子センサーからの信号を処理します。
センサーには多くの種類があり、それぞれ特定の物理的特性を検出するように設計されています。一部のセンサーには、熱、光、圧力などの条件に反応して特性が変化する感知素子が組み込まれています。例としては、サーミスター、赤外線受信機、フォトダイオードなどがあります。
加速度や回転などの動きの検出には、加速度計やジャイロスコープなどの MEMS (微小電気機械システム) センサーが広く使用されています。
距離を測定するには、ソナー、超音波センサー、レーダーなどのセンサーが一般的です。これらは、利用可能なさまざまな種類のセンサーのほんの一例です。
センサーは、検出する物理的特性の種類以外に、統合レベルも異なります。一部のセンサーは未処理のセンサーで、感知素子と外部回路に直接接続するための単純なリード線を備えたトランスデューサーのみで構成されています。
スマート センサーとして知られるその他のセンサーには、ADC (アナログ - デジタル コンバーター) やオンボード処理機能などの追加コンポーネントが含まれており、より多くのデータ処理を独立して処理できるようになります。
ロー センサーとスマート センサーのどちらを選択するかは、コスト、サイズ、インターフェースするマイクロコントローラーの処理負荷などの要素を含むアプリケーションの要件によって異なります。
人間の例えに戻って、視覚がセンサー パイプラインとしてどのように機能するかを考えてみましょう。光が私たちの目に入ると、網膜の光受容細胞(桿体および錐体)が感知要素として機能し、光を電気信号に変換します。これらの信号は視神経を通って脳の視覚野に伝わり、そこで処理を受けて認識可能な画像を形成します。脳はこの情報を解釈し、美しい景色を見たときに微笑むなどの反応を開始します。
同様に、組み込みシステムのセンサー パイプラインは、以下の図に示すように定義できます。

これらの各ステップには、アプリケーションに基づいて異なる要件がある場合があります。センサーの要件ドキュメントを作成すると、適切なセンサーを選択し、パイプラインを構成するときに役立ちます。
センサーの特性
センサー パイプラインのブロックに入る前に、センサーの重要な特性をいくつか確認してみましょう。
感度
感度とは、測定するように設計された物理的特性の小さな変化を検出するセンサーの能力です。
感度は、製造プロセス、コスト、感知素子の設計などの要因によって異なります。
特定の特性向けに設計されたセンサーにはさまざまな感度レベルがあることが多く、ユーザーはアプリケーションの要件に基づいて適切な感度を選択できます。
精度
精度とは、センサーの測定値が、測定している物理的特性の真の値とどの程度一致するかを表します。センサーの精度をテストするには、通常、その測定値を基準機器の測定値と比較する必要があります。
センサーにはゲイン誤差とオフセット誤差がある場合がありますが、この問題はキャリブレーションによって修正することができます。キャリブレーションは、これらの系統的誤差を調整します。多くの場合、製造公差や設計要因が原因です。
校正が完了すると、センサーの出力を基準と照合してその精度を確認できます。必要な精度レベルは、アプリケーションのニーズに基づいて決定する必要があります。
精度
精度とは、測定値が真の値にどれだけ近いかに関係なく、センサーの測定値の一貫性または再現性を指します。これは、同じ条件下で同じ出力を生成するセンサーの能力と、値をどの程度細かく分解して報告できるかを示します。
たとえば、物体の実際の温度が 12.53°C の場合:
-
正確なセンサーは、たとえそれらの値が実際の温度からわずかにずれていたとしても、12.52°C、12.53°C、または 12.54°C などの値を一貫して測定します。
-
一方、高精度のセンサーは 12.53 °C に近い値を測定しますが、その読み取り値が大きく異なる場合 (例:12.50 °C、12.53 °C、12.56 °C)、精度が低下する可能性があります。
正確な測定が必要なアプリケーションには、高精度 (真の値に近い) と高精度 (ばらつきが少ない) の両方を備えたセンサーが不可欠です。これは、12.5 °C と 12.53 °C の間など、小さな違いを区別する場合に特に重要です。
対照的に、要件がそれほど厳しくないアプリケーションでは、一般的な監視目的には十分な、±1°C などのより広い許容誤差を持つセンサーを使用する可能性があります。
範囲
センサーの範囲とは、指定された精度と精度を維持しながら測定できる物理的特性の最大値と最小値の間の範囲を指します。センサーの動作範囲は測定範囲を超える場合がありますが、測定範囲は、センサーが指定された感度、精度、応答時間を確実に遵守できる限界を定義します。
ドリフト
ドリフトとは、温度や湿度などの条件によってセンサーの出力が時間の経過とともに変化することです。感知素子を含むセンサー内のコンポーネントはこれらの条件に敏感な場合があり、その結果、測定値が徐々に変化する可能性があります。
たとえば、多くのコンポーネントは温度や湿度の変化の影響を受け、センサーの読み取り値が変化する可能性があります。また、内部発振器を備えたセンサーでは時間ベースのドリフトが発生し、精度に影響を与える可能性があります。
正確な外部基準 (正確なクロックなど) を使用した定期的な校正は、ドリフトを修正し、信頼性の高い測定を維持するのに役立ちます。特定のアプリケーションでは、許容可能なドリフト特性を持つセンサーを選択することが重要です。
応答時間
応答時間は、センサーが測定された物理的特性の変化を検出して反映するまでにかかる時間です。たとえば、温度が 5°C 上昇した場合、応答時間は、温度センサーがこの変化を出力に反映するまでにかかる時間を示します。
応答時間は、センサーの設計、製造品質、およびセンサー パイプライン内の ADC (アナログ デジタル コンバーター)、平均化回路、フィルターなどの内部コンポーネントによって異なります。
上記のすべてのパラメータはセンサーのデータシートに詳細に文書化されています。実際には、特定のアプリケーションごとにセンサー要件文書を作成し、センサー選択のベースラインとしてこれらの重要なパラメーターを詳しく説明することをお勧めします。
センサーの主な特性を調べたので、実際のアプリケーションのためにセンサーをマイクロコントローラーに接続する方法を見てみましょう。
マイクロコントローラーとのインターフェース方法
通信プロトコルの選択
センサー要件のもう 1 つの重要な側面は、センサーとシステム内の MCU またはプロセッサ間の通信インターフェイスを指定することです。センサーの出力信号タイプとマイクロコントローラーで使用可能なピンに基づいてセンサーがどのように接続されるかを理解することが重要です。
たとえば、特定のセンサーはマイクロコントローラーのアナログまたはデジタル入力ピンに直接接続する場合があります。温度センサーなどの生のセンサーは通常、アナログ入力ピンに接続され、マイクロコントローラーの内部 ADC (アナログ デジタル コンバーター) によって読み取られます。
対照的に、デジタル出力センサーはデジタル GPIO (汎用入力/出力) ピンに接続します。たとえば、速度センサーは速度を示すために可変パルス幅の方形波を生成します。これらの信号は通常、外部割り込みまたはタイマー キャプチャ入力として構成された GPIO ピンに接続され、マイクロコントローラーがパルス幅を正確に測定できるようになります。
一方、スマート センサーは、多くの場合、SPI (シリアル ペリフェラル インターフェイス) や I2C (集積回路間) などの通信プロトコルをサポートします。これらのインターフェイスにより、マイクロコントローラーはセンサーの設定、ステータスの確認、レジスタの読み取りと書き込みを通じてデータの取得を行うことができます。
センサーとのインターフェースに適切な通信プロトコルの選択は、システムで利用可能なピンとアプリケーションの特定の要件によって異なります。
ヒント :I²C や SPI などのプロトコルを使用する場合、Saleae ロジック アナライザーなどのツールを使用すると、デバッグと検証を大幅に簡素化できます。ロジック アナライザーは通信信号をキャプチャして視覚化し、Saleae などのツールはセンサー通信をリアルタイムでデコードするのに役立つ組み込みのプロトコル インタプリタを提供します。これは、構成の問題、タイミングの問題、またはセンサーのインターフェース時の通信エラーのトラブルシューティングを行う場合に特に役立ちます。
以下の図 2 は、異なるインターフェイスを持つ 4 つのセンサーに接続されたマイクロコントローラーの例を示しています。

電力要件の決定
電力要件は、センサーを接続する際のもう 1 つの重要な考慮事項です。センサーはさまざまな電圧 (たとえば、3.3 V または 5 V) で動作する場合があるため、マイクロコントローラーがこれらのレベルに対応できることを確認することが重要です。レベルコンバータは電圧の不一致を橋渡しし、センサーとマイクロコントローラーの電圧レベル間の互換性を確保します。
特に高周波データを生成するセンサーの場合は、タイミングとサンプリングの要件も評価する必要があります。 GPIO ピンで外部割り込みを構成すると、タイムリーなデータ キャプチャが保証され、DMA を使用するような手法により、CPU を介さずに高周波数でサンプリングするセンサーのデータ転送を合理化できます。
通信プロトコルとハードウェア接続について学習したので、センサー データを取得、処理、使用できるように準備するソフトウェア アーキテクチャの設計に焦点を当てましょう。効果的なソフトウェアを設計することは、センサーからクリーンで信頼性の高いデータを取得するために非常に重要です。
ソフトウェア アーキテクチャ
センサーと通信プロトコルを選択したので、センサー パイプラインのソフトウェア アーキテクチャを設計しましょう。このソフトウェアはセンサーに接続されたマイクロコントローラー上で実行され、生データを処理してクリーンで使用可能な状態にします。
アプリケーション レベルのデータ処理はこの記事の範囲を超えていますが、センサーとのインターフェースと、アプリケーションで使用できるデータの準備に焦点を当てましょう。
センサー処理パイプラインは次のコンポーネントに分割できます。
<オル>センサードライバー
アナログ - デジタル変換 (ADC) のサポート
スケーリング
校正
データの後処理
スマート センサーと RAW センサーの両方について、これらのコンポーネントの概要を見てみましょう。
コンポーネントの概要
<オル>センサー ドライバー
<オル>スマート センサー:ドライバーは、SPI、I2C などの通信プロトコルを介してセンサーの構成、電源の管理、センサー レジスタへの読み取りおよび書き込み操作を処理します。
Raw センサー:Raw センサーには通常レジスタがないため、ドライバーは電源管理のために GPIO のみを制御できます。
アナログ - デジタル変換 (ADC) のサポート
<オル>スマート センサー:センサー ドライバーを通じて設定されるオンボード ADC が含まれています。
Raw センサー:外部 ADC、ADC を設定し、変換を開始し、データを取得するためにソフトウェアに実装された ADC ドライバーが必要です。
スケーリング :スケーリングはスマートセンサーと生センサーの両方に必要です。センサーのデータシートに記載されている式を使用して、アナログからデジタル変換後のデジタルカウントを意味のある物理量に変換します。たとえば、温度センサーは数式を使用してデジタル カウントを摂氏に変換します。
キャリブレーション :測定された物理量が取得されると、キャリブレーションはオフセット、ゲイン、またはその両方を適用して誤差を修正することで値を調整します。このプロセスにより、センサー出力が測定範囲全体にわたって基準値と一致することが保証されます。キャリブレーション プロセスの詳細については、次のセクションで説明します。
データの後処理 :データ品質を向上させ、ノイズを低減するために、フィルタリングなどの後処理技術が適用されます。ローパス フィルターやハイパス フィルターなどの一般的なフィルターは、不要な周波数成分を除去できます。
センサーからのデータへのアクセス
データにアクセスする方法は、それが生のセンサーであるかスマート センサーであるかによって異なります。スマート センサーにはオンボード ADC と FIFO が搭載されます。データへのアクセス方法を詳しく説明する前に、まずサンプリング周波数を理解することが重要です。
サンプリング周波数:
センサーから測定値を取得する頻度は、ナイキスト・シャノンのサンプリング定理に従う必要があります。測定データを正確に再構成するには、サンプリング レートが測定対象の信号の最高周波数成分の 2 倍でなければならないと記載されています。
サンプリング周波数は、センサーがデータをキャプチャする頻度を定義し、データへのアクセス方法に影響します。センサーが生のセンサーであるかスマート センサーであるかに応じて、このサンプリングされたデータを処理するアプローチは異なります。
スマート センサー:
<オル>データ レジスタ:センサーは、セットアップ中に更新された設定サンプル周波数に基づいて、サンプリングされたデータをレジスタに直接書き込みます。マイクロコントローラは、データ変換完了割り込みに基づいてこのデータ レジスタを読み取ります。
FIFObBuffer:一部のセンサーには、複数のデータ ポイントを保存するための FIFO (先入れ先出し) バッファーが含まれています。有効にすると、FIFO は設定されたサンプリング周波数で更新され、いっぱいになるか事前定義されたレベルに達すると割り込みをトリガーします。
FIFO の利点は次のとおりです。
電力効率:MCU はデータをバッチで処理できるため、CPU オーバーヘッドが削減され、データ収集中に低電力モードに入ることができます。
サンプリングと処理レートのマッチング:FIFO バッファは、センサーのサンプリング レートと MCU のデータ処理レート間の差異を調整するのに役立ちます。
ダイレクト メモリ アクセス (DMA) を備えた MCU の場合、CPU の介入なしでセンサーから MCU メモリへのデータ転送が行われるため、消費電力がさらに削減されます。
生のセンサー:
RAW センサーの場合、MCU はサンプリング周波数で ADC 変換をトリガーし、多くの場合タイマー割り込みを使用します。データは ADC 変換完了割り込みで読み取られるため、MCU は変換中およびサンプル間でスリープして電力を節約できます。
センサーの電源管理
電力管理は、エネルギーに敏感なアプリケーションにとって重要です。戦略には次のようなものがあります。
<オル>低電力モード:多くのセンサーは、センサー レジスタを通じて構成可能な低電力モードをサポートしています。
GPIO 制御の電源サイクリング (デューティ サイクリング):低電力モードが組み込まれていないセンサーの場合、マイクロコントローラーは GPIO ピンを使用してセンサーの電源ラインを切り替え、消費電力をさらに削減できます。以下の図 3 は、MCU からの GPIO を使用して電力が制御される生の温度センサーの図を示しています。たとえば、スリープ モードの温度センサーは、温度の読み取りが必要な場合にのみアクティブにできます。

上記の手法により、必要なデータ サンプリング レートとセンサーの応答性を維持しながら、電力を効率的に使用できます。
高レベルのアーキテクチャを念頭に置いて、各パイプライン コンポーネントの詳細な設計を見ていきましょう。
コンポーネントの詳細設計
このセクションでは、ソフトウェア アーキテクチャ セクションで概説したセンサー パイプラインの主要コンポーネントについて詳しく説明します。
1.センサードライバー
センサー ドライバーは、スマート センサーと生センサーの両方の通信、構成、電力、データ取得の管理を担当します。
スマート センサー ドライバー:
<オル>通信ドライバー:MCU 上の汎用 I2C ドライバーまたは SPI ドライバーは、ラッパー関数を使用して、1 バイト、2 バイト、または 4 バイト転送などのセンサー固有の要件を処理するように適合させることができます。
構成:一般的なタスクには、サンプリング レートの設定、割り込みの構成、FIFO バッファの管理、および必要に応じてクロック設定が含まれます。
電源管理:API は、特定のレジスタに書き込むか、組み込みの電力モードのないセンサーの GPIO ラインを制御することにより、上位のソフトウェア レイヤが電力モード間でセンサーを移行できるようにする必要があります。
Raw センサー ドライバー:
RAW センサーの場合、ドライバーは主に、多くの場合 GPIO 制御の切り替えを通じて電力を管理します。
2. ADC サポート
ADC サポートは、生のセンサーにのみ必要です。この記事では、一般的にマイクロコントローラーに組み込まれる SAR ADC に焦点を当てます。
SAR ADC はどのように動作しますか?
SAR ADC は、ビット分解能と同じサイクル数 (たとえば、10 ビット ADC の場合は 10 サイクル) で、複数のクロック サイクルにわたってアナログ信号をデジタル値に変換します。
<オル>基準電圧 (VRef):ADC が測定できる最大電圧を表します。この制限を超えるアナログ信号はスケールダウンする必要があります。
分解能:検出可能な最小の電圧変化を決定します。たとえば、3.3V VRef を備えた 10 ビット ADC の分解能は 3.22 mV です。
$$V_{\text{Res}} =V_{\text{Ref}} /2^{10}$$
ADC の結果はデータ レジスタに保存され、その後、意味のある物理単位にスケール変更できます。
3.スケーリング
スケーリングは、ADC カウントを、センサーの種類に応じて温度 (°C) や加速度 (g) などの意味のある物理値に変換します。通常、センサーのデータシートには、必要な式または参照テーブルが記載されています。
たとえば、生の温度センサーによって測定された電圧を温度値に変換する方法を以下に示します。
$$V_{\text{Measured}} =Counts_{\text{ADC}} / 2^{10} * V_{\text{Ref}} \quad \text{(ADC カウントから V_Measured を取得)}$$
$$Temperature_{\text{測定値}} =V_{\text{測定値}} * T_{\text{C/mV}} \quad \text{(温度の物理値を取得)}$$
同様に、3 軸加速度計は、X、Y、Z 軸のカウントを g またはミリグラムの加速度値にマッピングします。
4.キャリブレーション

上の左側の図 (4a) はゲインとオフセットを使用したキャリブレーションを示し、上の右側の図 (4b) は固定オフセットを使用したキャリブレーションを示しています。
$$x_{\text{calibrated}} =ゲイン * x_{\text{raw}} + オフセット \quad \text{(図 4a - 線形キャリブレーション)}$$
$$x_{\text{calibrated}} =x_{\text{raw}} + オフセット \quad \text{(図 4b - 固定オフセット キャリブレーション)}$$
キャリブレーションにより、センサーの出力が基準測定値と確実に一致し、設計、材料、製造によって生じた誤差が補正されます。
エラーの種類:
<オル>オフセット誤差:入力の大きさに関係なく、センサーの出力の真の基準値からの一定の偏差。
ゲイン エラー:センサーの出力スケールが期待値から逸脱し、入力に対して出力が不正確に増加または減少する比例誤差。
キャリブレーション方法:
<オル>2/3 ポイント キャリブレーション:このタイプのキャリブレーションには、生の値に固定オフセットを適用するか、ゲインとオフセットの両方を適用することが含まれます。図 4a はゲイン/オフセット校正の例を示し、図 4b はオフセット校正を示します。両方の図で、y 軸は高精度の機器によって測定された基準値を表し、x 軸は ADC 後にセンサーによって測定された生の値を表します。
N ポイント キャリブレーション:複数のポイントを使用して、より複雑な非線形誤差補正を行います。
実装:
<オル>精度を高めるために、キャリブレーション ポイントはセンサーの測定範囲全体をカバーする必要があります。
ゲインやオフセットなどのパラメータは、一度推定されるとシステムの不揮発性メモリに保存され、電源を入れ直しても永続的に使用できるようになります。
5.データの後処理
このセクションで説明する後処理では、ノイズと不要な信号成分を除去し、データの信頼性を向上させることについて説明します。
フィルタリング
フィルタリングは、信号から不要な周波数成分を除去してデータ品質を向上させるプロセスです。フィルタにはいくつかの異なるタイプがあります:
-
ローパス フィルター:高周波ノイズを減衰しながら、低周波信号を通過させます。
-
ハイパスフィルター:低周波ノイズを減衰しながら、高周波信号を通過させます。 (たとえば、加速度計データの重力加速度)。
-
バンドパス フィルター:特定の周波数範囲内の信号のみを保持し、目的の帯域外の低周波数と高周波数の両方を除去します。
これらのフィルターは、FIR (有限インパルス応答) フィルターまたは IIR (無限インパルス応答) フィルターとして実装されることがよくあります。 IIR フィルターは実装が簡単で計算効率が高く、FIR フィルターは計算量が多くなりますが、周波数応答をより適切に制御できます。
ここでは、IIR フィルターの一種である指数移動平均 (EMA) として知られる単純なローパス フィルターを検討します。移動平均フィルタは、長期的な傾向を強調しながら短期的な変動を平滑化する数学的手法です。
他の移動平均フィルターとは異なり、EMA はバッファーを維持する必要がないため、メモリ効率が高くなります。また、平滑化を提供しながらデータの変更に対する応答性も向上しているため、リアルタイムのフィルタリングに適しています。 EMA は古いデータ サンプルよりも最近のデータ サンプルに大きな重みを割り当て、センサー読み取り値の変化に迅速に適応できるようにします。
EMA は次のように計算できます。
$$EMA_{\text{t}} =\alpha * x_{\text{t}} + (1 - \alpha) * EMA_{\text{t - 1}}$$
$$\alpha =2 / (N + 1) \quad \text{(平滑化係数、N - フィルター ウィンドウ サイズ)}$$
$$EMA_{\text{t}} \quad \text{(現在の反復における指数移動平均)}$$
$$x_{\text{t}} \quad \text{(現在の反復の新しいデータ サンプル)}$$
$$EMA_{\text{t - 1}} \quad \text{(最後の反復の指数移動平均)}$$
指数移動平均 (EMA) フィルタについて理解したところで、アプリケーションに合わせて調整する際に考慮すべき 2 つの重要な要素を次に示します。
-
平滑化と応答性:平滑化係数が高い (1 に近く、フィルター ウィンドウ サイズが小さい) と、最近のデータの重みが大きくなり、フィルターの変化に対する応答性が高くなりますが、ノイズ低減の効果は低くなります。平滑化係数が低いほど (0 に近く、フィルター ウィンドウ サイズが大きいほど) ノイズ低減は向上しますが、データの変更に対する反応が遅くなります。
-
アプリケーション固有のチューニング:平滑化係数は、サンプリング レート、センサー感度、アプリケーション要件に基づいて選択する必要があります。リアルタイム システムでは、多くの場合、素早い応答性と安定した出力の間のバランスが必要です。
EMA のコードサンプルは次のとおりです。
#include <stdio.h>
#include <stdint.h>
// Exponential Moving Average (EMA) filter implementation
#define FILTER_WINDOW 5
// Function to calculate EMA
float calculateEMA(float ema, float new_value, float alpha) {
return (alpha * new_value) + (1 - alpha) * ema;
}
int main() {
float sensorReadings[] = {26.0, 27.5, 28.2, 27.0, 26.8, 26.5, 27.2};
int numReadings = sizeof(sensorReadings) / sizeof(sensorReadings[0]);
float alpha = 2.0f / (FILTER_WINDOW + 1); // Standard EMA formula
float ema = sensorReadings[0]; // Initialize EMA with the first reading
printf("EMA Filtered Sensor Data:\n");
for (int i = 0; i < numReadings; i++) {
ema = calculateEMA(ema, sensorReadings[i], alpha);
printf("Reading %d: Raw = %.2f, EMA = %.2f\n", i + 1, sensorReadings[i], ema);
}
return 0;
}
結論
要約すると、センサーは現代のスマート デバイスのバックボーンであり、物理世界とデジタル システムの間のギャップを橋渡しします。家庭用電化製品から産業オートメーション、医療機器に至るまで、デバイスが環境を認識し、環境と対話できるようにします。
センサーの仕組み、データ パイプラインのコンポーネント、およびマイクロコントローラーとの統合を理解することは、エンジニアにとっても愛好家にとっても同様に重要です。効果的なパイプラインを設計することで、開発者は正確、クリーン、信頼性の高いデータを確保でき、システムがパフォーマンスと電力効率の目標を達成できるようになります。
ご質問がある場合、またはこのトピックについてさらに詳しく話したい場合は、Twitter または LinkedIn までお気軽にお問い合わせください。いつでも喜んでご連絡させていただきます。
無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう
-
Macの写真からスライドショーをエクスポートする方法
スライドショーは、写真に収められて不滅にされた思い出を楽しむのに最適な方法です。 Macのフォトアプリを使用すると、自動生成されたスライドショーや独自のスライドショープロジェクトを視聴できるだけでなく、スライドショープロジェクトをエクスポートして、友達や愛する人と簡単に共有することもできます。方法は次のとおりです。 写真からスライドショーをエクスポートする方法 Macでは、写真からスライドショープロジェクトをエクスポートできます。これの良い点は、サードパーティのアプリやWebベースのプログラムにお金をかける必要がなく、これらのオプションで一般的なダウンロードプロセスが遅いことから解放されるこ
-
ワークフローを合理化する 5 つのシンプルな macOS のヒントとコツ
もっと頑張らないでください。よりスマートに働きます。このフレーズは 1930 年代に造られましたが、今日でも当てはまります。数回のキーストロークでわずか数秒で完了できる場合、長い道のりで何時間も無駄にしたくはありません。 Mac での効率を高めるために、簡単に実装できる 5 つのヒントを選択しました。仕事が早く終わるので、遊ぶ時間を増やすことができます。 macOS のヒント #1:Spotlight 検索を構成する これまでに Spotlight を使用したことがない場合は、使用する必要があります。 Spotlight 検索では、ファイルを検索したり、Web 上の情報を検索したり、