次の方法で共有


アナログデジタルコンバータから値を読み取る

アナログ・デジタル・コンバータ(ADC)は、アナログ入力電圧値を読み取ってデジタル値に変換できるデバイスです。 ADCは、特定の条件に応じて抵抗が変化するサーミスタ、ポテンショメータ、その他のデバイスなどから値を読み取るために使用されます。

このトピックでは、ポテンショメータで入力電圧を変調するときに、.NETを使用して ADC から値を読み取ります。

[前提条件]

  • ARM ベース (ARMv7 以上) シングルボード コンピューター (SBC)
  • MCP3008 アナログデジタルコンバータ
  • 3ピンポテンショメータ
  • ブレッド ボード
  • ジャンパー ワイヤ
  • Raspberry Pi GPIO ブレークアウト ボード (省略可能/推奨)
  • .NET SDK 8 以降

このチュートリアルは、ターゲット デバイスが Raspberry Pi であることを前提として記述されています。 ただし、このチュートリアルは、Orange Pi、ODROID など、.NETをサポートする Linux ベースの SBC に使用できます。

SBC を準備する

次のサービスをサポートするように SBC が構成されていることを確認します。

  • SSH
  • SPI

多くのデバイスでは、追加の構成は必要ありません。 Raspberry Pi の場合は、 コマンドを使用します。 の詳細については、Raspberry Pi のドキュメントを参照してください。

ハードウェアを準備する

次の図に示すように、ハードウェア コンポーネントを使用して回線を構築します。

MCP3008 ADC とポテンショメータを備えた回路を示すフリッツ図

MCP3008では、シリアル周辺機器インターフェイス (SPI) を使用して通信します。 MCP3008から Raspberry Pi とポテンショメータへの接続を次に示します。

  • VDD から 3.3V へ (赤で表示)
  • VREF を 3.3V に設定 (赤)
  • AGNDをグラウンドに接続 (黒)
  • CLK から SCLK(オレンジ)
  • DOUT to MISO (オレンジ)
  • DIN から MOSI (オレンジ色)
  • CS/SHDN と CE0 (緑) への接続
  • DGND から接地 (黒)
  • ポテンショメータの(黄色)の可変(中間)ピンにCH0を接続

ポテンショメータの外ピンに3.3Vと接地を供給します。 順序は重要ではありません。

必要に応じて、次のピン配置図を参照してください。

MCP3008 Raspberry Pi GPIO
MCP3008のピン配置を示す図 Raspberry Pi GPIO ヘッダーのピン配置を示す図。画像提供:Raspberry Pi Foundation。
画像提供:Raspberry Pi Foundation。

ヒント

GPIO ヘッダーへの接続を合理化するには、ブレッドボードと組み合わせた GPIO ブレークアウト ボードをお勧めします。

アプリを作成する

好みの開発環境で次の手順を実行します。

  1. .NET CLI または Visual Studio を使用して、新しい.NETコンソール アプリを作成します。 AdcTutorial という名前を付けます。

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Iot.Device.Bindings パッケージをプロジェクトに追加します。 プロジェクト ディレクトリから .NET CLI または Visual Studio を使用します。

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. 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);
    }
    

    前のコードでは、次のようになります。

    • は、 の新しいインスタンスに設定されます。 コンストラクターは、 パラメーターを 0 に、 パラメーターを 0 に設定します。
    • using 宣言では、を呼び出し、を渡すことによって、のインスタンスが作成されます。 この は SPI バスを表します。 宣言により、オブジェクトが破棄され、ハードウェア リソースが適切に解放されます。
    • 別の 宣言では、 のインスタンスが作成され、 がコンストラクターに渡されます。
    • ループは無期限に実行されます。 各イテレーション:
      1. コンソールを消去します。
      2. を呼び出して、ADC の CH0 の値を読み取ります。
      3. 生の値をコンソールに書き込みます。
      4. パーセンテージで書式設定された値をコンソールに書き込みます。
        • パーセンテージを計算するには、値を 10.23 で除算します。 MCP3008は 10 ビット ADC であり、0 ~ 1023 の範囲の 1024 個の使用可能な値を返します。 値を 10.23 で除算すると、値がパーセントで表されます。
        • パーセンテージは、最も近い 0.1 に丸められます。
      5. 500ミリ秒スリープする。
  4. アプリをビルドします。 .NET CLI を使用している場合は、dotnet build を実行します。 Visual Studioでビルドするには、Ctrl+Shift+B を押します。

  5. 自己完結型アプリとして SBC にアプリをデプロイします。 手順については、「 .NET アプリを Raspberry Pi にデプロイするを参照してください。 を使用して実行可能ファイルに実行アクセス許可を付与してください。

  6. Raspberry Pi でアプリを実行するには、デプロイ ディレクトリに切り替えて実行可能ファイルを実行します。

    ./AdcTutorial
    

    ポテンショメータダイヤルを回転させて出力を観察します。 これは、ADC の CH0 に供給される電圧がポテンショメータによって変化するためです。 ADCはCH0の入力電圧をVREF に供給される基準電圧と比較して値を生成します。

  7. CtrlC キーを押してプログラムを終了します。

おめでとうございます! SPI を使用して、アナログデジタル コンバーターから値を読み取ってきました。

ソース コードを入手する

このチュートリアルのソースは GitHub で使用できます。

次のステップ

汎用入力/出力を使用して LED を点滅させる方法について説明します