トレーニング
アナログ デジタル コンバーターから値を読み取る
アナログ デジタル コンバーター (ADC) は、アナログの入力電圧値を読み取り、デジタル値に変換できるデバイスです。 ADC は、特定の条件に基づいて抵抗が変化するサーミスター、ポテンショメーター、およびその他のデバイスから値を読み取るために使用されます。
このトピックでは、ポテンショメーターを使用して入力電圧を変化させながら、.NET を使用して ADC から値を読み取ります。
- ARM ベース (ARMv7 以降) シングルボード コンピューター (SBC)
- MCP3008 アナログ デジタル コンバーター
- 3 ピン ポテンショメーター
- ブレッドボード
- ジャンパー ワイヤ
- Raspberry Pi GPIO ブレークアウト基板 (省略可能、推奨)
- .NET SDK 7 以降
注意
このチュートリアルは、ターゲット デバイスを Raspberry Pi と想定して記述されています。 ただし、このチュートリアルは、Orange Pi や ODROID など、.NET をサポートしているあらゆる Linux ベースの 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 に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
その他のリソース
ドキュメント
-
.NET IoT ライブラリを使用して、温度、気圧、湿度を読み取る方法について説明します。
-
.NET の IoT ライブラリでバイナリ入力に GPIO を使用する方法について説明します。
-
.NET IoT ライブラリを使用して液晶ディスプレイに文字を表示する方法について説明します。