アナログ デジタル コンバーターから値を読み取る
アナログ デジタル コンバーター (ADC) は、アナログの入力電圧値を読み取り、デジタル値に変換できるデバイスです。 ADC は、特定の条件に基づいて抵抗が変化するサーミスター、ポテンショメーター、およびその他のデバイスから値を読み取るために使用されます。
このトピックでは、ポテンショメーターを使用して入力電圧を変化させながら、.NET を使用して ADC から値を読み取ります。
前提条件
- ARM ベース (ARMv7 以降) シングルボード コンピューター (SBC)
- MCP3008 アナログ デジタル コンバーター
- 3 ピン ポテンショメーター
- ブレッドボード
- ジャンパー ワイヤ
- Raspberry Pi GPIO ブレークアウト基板 (省略可能、推奨)
- .NET SDK 7 以降
注意
このチュートリアルは、ターゲット デバイスを Raspberry Pi と想定して記述されています。 ただし、このチュートリアルは、Orange Pi や ODROID など、.NET をサポートしているあらゆる Linux ベースの SBC に利用できます。
SBC の準備
次のサービスがサポートされるように SBC を必ず構成してください。
- SSH
- SPI
大抵のデバイスでは、追加の構成を必要としません。 Raspberry Pi については、raspi-config
コマンドを使用します。
raspi-config
の詳細については、Raspberry Pi のドキュメントを参照してください。
ハードウェアを準備する
ハードウェア コンポーネントを使用して、次の図に示すような回路を構築します。
MCP3008 では、シリアル周辺機器インターフェイス (SPI) を使用して通信を行います。 MCP3008 から Raspberry Pi およびポテンショメーターへの接続は次のとおりです。
- VDD から 3.3V へ (赤で表示)
- VREF から 3.3V へ (赤)
- AGND からグラウンドへ (黒)
- CLK から SCLK へ (オレンジ)
- DOUT から MISO へ (オレンジ)
- DIN から MOSI へ (オレンジ)
- CS/SHDN から CE0 へ (緑)
- DGND からグラウンドへ (黒)
- CH0 からポテンショメーターの可変 (中央) ピンへ (黄色)
ポテンショメーターの外側のピンに、3.3V とグラウンドを供給します。 順序は重要ではありません。
必要に応じて、次のピン配列図を参照してください。
MCP3008 | Raspberry Pi GPIO |
---|---|
![]() |
![]() 画像提供: Raspberry Pi Foundation。 |
ヒント
GPIO ヘッダーへの接続を効率化するには、ブレッドボードと組み合わせた GPIO ブレークアウト ボードを使用することをお勧めします。
アプリを作成する
お好みの開発環境で、次の手順を実行します。
.NET CLI または Visual Studio を使用して、新しい .NET コンソール アプリを作成します。 「AdcTutorial」という名前を付けます。
dotnet new console -o AdcTutorial cd AdcTutorial
プロジェクトに Iot.Device.Bindings パッケージを追加します。 プロジェクト ディレクトリまたは Visual Studio から .NET CLI を使用します。
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Program.cs の内容を次のコードで置き換えます。
using System; using System.Device.Spi; using System.Threading; using Iot.Device.Adc; var hardwareSpiSettings = new SpiConnectionSettings(0, 0); using SpiDevice spi = SpiDevice.Create(hardwareSpiSettings); using var mcp = new Mcp3008(spi); while (true) { Console.Clear(); double value = mcp.Read(0); Console.WriteLine($"{value}"); Console.WriteLine($"{Math.Round(value/10.23, 1)}%"); Thread.Sleep(500); }
上のコードでは以下の操作が行われます。
-
hardwareSpiSettings
がSpiConnectionSettings
の新しいインスタンスに設定されます。 コンストラクターによって、busId
パラメーターが 0 に、chipSelectLine
パラメーターが 0 に設定されます。 -
using 宣言により、
SpiDevice.Create
を呼び出してhardwareSpiSettings
を渡すことによって、SpiDevice
のインスタンスが作成されます。 このSpiDevice
は、SPI バスを表しています。 このusing
宣言により、オブジェクトが破棄され、ハードウェア リソースが適切に解放されます。 - 別の
using
宣言では、Mcp3008
のインスタンスが作成され、コンストラクターにSpiDevice
が渡されます。 -
while
ループが無期限に実行されます。 それぞれの反復処理で、以下が実行されます。- コンソールをクリアします。
-
mcp.Read(0)
を呼び出して、ADC の CH0 の値を読み取ります。 - 生の値をコンソールに書き込みます。
- パーセンテージとして書式設定された値をコンソールに書き込みます。
- パーセンテージを計算するため、値が 10.23 で割り算されます。 MCP3008 は 10 ビット ADC です。つまり、0-1023 の範囲で 1024 通りの値を返すことができます。 その値を 10.23 で割ると、値がパーセンテージで表されます。
- パーセンテージは最も近い 0.1 に丸められます。
- 500 ミリ秒スリープします。
-
アプリをビルドします。 .NET CLI を使用している場合は、
dotnet build
を実行します。 Visual Studio でビルドするには、Ctrl+Shift+B キーを押します。アプリを自己完結型アプリとして SBC にデプロイします。 手順については、「Raspberry Pi への .NET アプリのデプロイ」を参照してください。
chmod +x
を使用して実行可能ファイルの 実行 アクセス許可を指定してください。配置ディレクトリに切り替え、実行可能ファイルを実行することで、Raspberry Pi でアプリを実行します。
./AdcTutorial
ポテンショメーターのつまみを回しながら出力を観察します。 これは、ポテンショメーターによって、ADC の CH0 に供給される電圧が変化するためです。 ADC では、CH0 の入力電圧を VREF に供給された基準電圧と比較して、値を生成します。
Ctrl+C キーを押してプログラムを終了します。
おめでとうございます! SPI を使用して、アナログ デジタル コンバーターから値を読み取ることができました。
ソース コードを入手する
このチュートリアルのソースは、GitHub から入手できます。
次の手順
.NET