아날로그에서 디지털로의 변환기에서 값 읽기
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~1,023 범위의 1,024개 가능한 값을 반환합니다. 값을 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