대부분의 센서가 아날로그 값으로 출력을 제공하고 이진 값만 이해하는 마이크로 컨트롤러에 입력하기 때문에 아날로그에서 디지털로 변환하는 것은 임베디드 전자 장치에서 매우 중요한 작업입니다. 따라서 아날로그 데이터를 처리 할 수 있으려면 마이크로 컨트롤러에 Analog to Digital Converter 가 필요합니다.
일부 마이크로 컨트롤러에는 Arduino, MSP430, PIC16F877A와 같은 ADC가 내장되어 있지만 일부 마이크로 컨트롤러에는 8051, Raspberry Pi 등과 같은 ADC가 없으며 ADC0804, ADC0808과 같은 외부 아날로그-디지털 변환기 IC를 사용해야합니다. 아래에서 다양한 마이크로 컨트롤러가있는 ADC의 다양한 예를 찾을 수 있습니다.
- Arduino Uno에서 ADC를 사용하는 방법?
- Raspberry Pi ADC 튜토리얼
- ADC0808과 8051 마이크로 컨트롤러의 인터페이스
- AVR 마이크로 컨트롤러를 사용하는 0-25V 디지털 전압계
- STM32F103C8에서 ADC를 사용하는 방법
- MSP430G2에서 ADC를 사용하는 방법
- ARM7 LPC2148에서 ADC를 사용하는 방법
- MPLAB 및 XC8과 함께 PIC 마이크로 컨트롤러의 ADC 모듈 사용
이 튜토리얼에서는 PCF8591 ADC / DAC 모듈을 Arduino와 인터페이스하는 방법을 확인 합니다.
필수 구성 요소
- Arduino UNO
- PCF8591 ADC 모듈
- 100K 냄비
- 점퍼 케이블
PCF8591 ADC / DAC 모듈
PCF8591은 8 비트 아날로그-디지털 또는 8 비트 디지털-아날로그 변환기 모듈로 각 핀이 최대 256 개의 아날로그 값을 읽을 수 있습니다. 또한 보드에 LDR 및 서미스터 회로가 제공됩니다. 이 모듈에는 4 개의 아날로그 입력과 1 개의 아날로그 출력이 있습니다. I 2 C 통신에서 작동 하므로 직렬 클럭 및 직렬 데이터 주소를위한 SCL 및 SDA 핀이 있습니다. 2.5-6V 공급 전압 이 필요하며 대기 전류가 낮습니다. 모듈의 전위차계 손잡이를 조정하여 입력 전압을 조작 할 수도 있습니다. 보드에는 세 개의 점퍼도 있습니다. J4는 서미스터 액세스 회로 를 선택하기 위해 연결되고, J5는 LDR / 포토 저항기 액세스 회로 를 선택하기 위해 연결됩니다. J6은 조정 가능한 전압 액세스 회로를 선택하기 위해 연결됩니다. 이러한 회로에 액세스하려면 J6의 경우 0x50, J5의 경우 0x60, J4의 경우 0x70과 같은 점퍼의 주소를 사용해야합니다. 보드 D1 및 D2-에 두 개의 LED가 있습니다. D1은 출력 전압 강도를 표시하고 D2는 공급 전압의 강도를 표시합니다. 출력 또는 공급 전압이 높을수록 LED D1 또는 D2의 강도가 높아집니다. VCC 또는 AOUT 핀에서 전위차계를 사용하여 이러한 LED를 테스트 할 수도 있습니다.
Arduino와 PCF8591 ADC / DAC 모듈 인터페이스
완전한 프로그램 및 작업 비디오는 이 튜토리얼의 끝에 제공됩니다.
먼저 I 2 C 통신 및 LCD 디스플레이를 위한 라이브러리를 정의해야합니다.
#포함
그런 다음 일부 매크로를 정의하십시오. 첫 번째 매크로는 IC 용 데이터 버스의 주소를 정의하기위한 것이고 두 번째 매크로는 포트의 입력이 주어진 모듈의 첫 번째 입력 핀의 주소를 정의하기위한 것입니다.
#define PCF8591 (0x90 >> 1) #define AIn0 0x00
다음으로 Arduino와 LCD의 핀 연결을 정의하고 아날로그 핀에서 얻는 값을 초기화하십시오.
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); int 값 = 0;
이제 기능 을 설정해 보겠습니다. 여기서 첫 번째 줄에서는 I 2 C 통신을 초기화했습니다. 두 번째 줄에서는 아날로그 값을 인쇄하는 LCD 디스플레이를 초기화했습니다. 여기에서 Arduino와 16x2 LCD 인터페이스에 대해 자세히 알아보십시오.
void setup () { Wire.begin (); lcd.begin (16,2); }
에서는 루프 기능, 첫 번째 라인은 그것이 PCF8591 시작 즉, 송신을 시작하는 것이다. 두 번째 라인은 첫 번째 아날로그 입력 핀에서 아날로그 측정을 수행하도록 IC에 지시합니다. 세 번째 라인은 전송을 종료하고 네 번째 라인은 아날로그 핀에서 측정 된 데이터를 가져옵니다.
void loop () { Wire.beginTransmission (PCF8591); Wire.write (AIn0); Wire.endTransmission (); Wire.requestFrom (PCF8591, 1);
다음 부분에서는 아날로그 핀에서 읽은 값을 앞에서 정의한 값 변수에 넣습니다. 그리고 다음 줄에 해당 값을 LCD에 인쇄합니다.
Value = Wire.read (); lcd.print ("ADC 값 ="); lcd.print (값); 지연 (500); lcd.clear ();}
마지막으로 Arduino에 코드를 업로드하고 실행하십시오. 아날로그 값이 LCD 디스플레이에 표시되기 시작합니다. 냄비의 손잡이를 조정하면 값의 점진적인 변화를 볼 수 있습니다.