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 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 |
|---|---|
|
|
이미지 제공: 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 3.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의 새 인스턴스로 설정됩니다. 생성자는 매개 변수를busId0으로 설정하고 매개 변수를chipSelectLine0으로 설정합니다. -
using 선언은
SpiDevice를 호출하여SpiDevice.Create를 전달함으로써hardwareSpiSettings의 인스턴스를 생성합니다. 이것은 SPISpiDevice버스를 나타냅니다. 선언은using개체가 삭제되고 하드웨어 리소스가 제대로 해제되도록 합니다. - 또 다른
using선언은 인스턴스Mcp3008를 만들고 생성자에 전달합니다SpiDevice. - 루프는
while무기한 실행됩니다. 각 반복:- 콘솔을 지웁니다.
- 를 호출
mcp.Read(0)하여 ADC에서 CH0 값을 읽습니다. - 원시 값을 콘솔에 씁니다.
- 백분율로 서식이 지정된 콘솔에 값을 씁니다.
- 백분율을 계산하기 위해 값은 10.23로 나눕니다. MCP3008 10비트 ADC로, 0~1023에 이르는 1024개의 가능한 값을 반환합니다. 값을 10.23으로 나누면 값이 백분율로 표시됩니다.
- 백분율은 가장 가까운 0.1로 반올림됩니다.
- 500ms 동안 잠자기
-
앱을 빌드합니다. .NET CLI를 사용하는 경우 .NET CLI를 실행합니다
dotnet build. Visual Studio에서 빌드하려면 Ctrl+ ShiftB+ 누릅니다.자체 포함 앱으로 SBC에 앱을 배포합니다. 자세한 내용은 Raspberry Pi에 .NET 앱 배포를 참조하세요. 를 사용하여 실행 파일 실행 권한을 부여해야 합니다
chmod +x.배포 디렉터리로 전환하고 실행 파일을 실행하여 Raspberry Pi에서 앱을 실행합니다.
./AdcTutorial전위계 다이얼을 회전할 때 출력을 관찰합니다. 이것은 ADC에서 CH0에 공급되는 전압을 다양하게 하는 전위계 때문입니다. ADC는 CH0의 입력 전압과 VREF 에 제공된 참조 전압을 비교하여 값을 생성합니다.
Ctrl+ C를 눌러 프로그램을 종료합니다.
축하합니다! SPI를 사용하여 아날로그-디지털 변환기에서 값을 읽었습니다.
소스 코드 가져오기
이 자습서의 원본은 GitHub에서 사용할 수 있습니다.
다음 단계
.NET