다음을 통해 공유


아날로그-디지털 변환기에서 값 읽기

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에서는 raspi-config 명령을 사용하십시오. 자세한 raspi-config내용은 Raspberry Pi 설명서를 참조하세요.

하드웨어 준비

다음 다이어그램에 표시된 대로 하드웨어 구성 요소를 사용하여 회로를 빌드합니다.

MCP3008 ADC 및 전위계가 있는 회로를 보여 주는 프리칭 다이어그램

MCP3008 SPI(직렬 주변 장치 인터페이스)를 사용하여 통신합니다. 다음은 MCP3008 Raspberry Pi 및 potentiometer로의 연결입니다.

  • VDD 에서 3.3V로(빨간색으로 표시)
  • VREF 에서 3.3V로(빨간색)
  • AGND를 접지(검정)로 연결
  • CLK에서 SCLK로(주황색)
  • DOUT 에서 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 패키지를 추가합니다. 프로젝트 디렉터리 또는 Visual Studio에서 .NET CLI를 사용합니다.

    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);
    }
    

    앞의 코드에서 다음을 수행합니다.

    • hardwareSpiSettingsSpiConnectionSettings의 새 인스턴스로 설정됩니다. 생성자는 매개 변수를 busId 0으로 설정하고 매개 변수를 chipSelectLine 0으로 설정합니다.
    • using 선언SpiDevice를 호출하여 SpiDevice.Create를 전달함으로써 hardwareSpiSettings의 인스턴스를 생성합니다. 이것은 SPI SpiDevice 버스를 나타냅니다. 선언은 using 개체가 삭제되고 하드웨어 리소스가 제대로 해제되도록 합니다.
    • 또 다른 using 선언은 인스턴스 Mcp3008 를 만들고 생성자에 전달합니다 SpiDevice .
    • 루프는 while 무기한 실행됩니다. 각 반복:
      1. 콘솔을 지웁니다.
      2. 를 호출 mcp.Read(0)하여 ADC에서 CH0 값을 읽습니다.
      3. 원시 값을 콘솔에 씁니다.
      4. 백분율로 서식이 지정된 콘솔에 값을 씁니다.
        • 백분율을 계산하기 위해 값은 10.23로 나눕니다. MCP3008 10비트 ADC로, 0~1023에 이르는 1024개의 가능한 값을 반환합니다. 값을 10.23으로 나누면 값이 백분율로 표시됩니다.
        • 백분율은 가장 가까운 0.1로 반올림됩니다.
      5. 500ms 동안 잠자기
  4. 앱을 빌드합니다. .NET CLI를 사용하는 경우 .NET CLI를 실행합니다 dotnet build. Visual Studio에서 빌드하려면 Ctrl+ ShiftB+ 누릅니다.

  5. 자체 포함 앱으로 SBC에 앱을 배포합니다. 자세한 내용은 Raspberry Pi에 .NET 앱 배포를 참조하세요. 를 사용하여 실행 파일 실행 권한을 부여해야 합니다 chmod +x.

  6. 배포 디렉터리로 전환하고 실행 파일을 실행하여 Raspberry Pi에서 앱을 실행합니다.

    ./AdcTutorial
    

    전위계 다이얼을 회전할 때 출력을 관찰합니다. 이것은 ADC에서 CH0에 공급되는 전압을 다양하게 하는 전위계 때문입니다. ADC는 CH0의 입력 전압과 VREF 에 제공된 참조 전압을 비교하여 값을 생성합니다.

  7. Ctrl+ C를 눌러 프로그램을 종료합니다.

축하합니다! SPI를 사용하여 아날로그-디지털 변환기에서 값을 읽었습니다.

소스 코드 가져오기

이 자습서의 원본은 GitHub에서 사용할 수 있습니다.

다음 단계