본문 바로가기

ESP32

ESP32 ADC 읽기 Arduino IDE

반응형

 

 

ESP32 ADC – Arduino IDE로 아날로그 값 읽기

 

이 문서에서는 Arduino IDE를 사용하여 ESP32로 아날로그 입력을 읽는 방법을 보여줍니다. 아날로그 판독은 전위차계 또는 아날로그 센서와 같은 가변 저항에서 값을 읽는 데 유용합니다.

 

 

ESP32 ADC Arduino IDE로 아날로그 값 읽기

 

ESP32로 아날로그 입력을 읽는 것은 인수로 읽고자 하는 GPIO를 허용하는 analogRead(GPIO) 함수를 사용하는 것만큼 쉽습니다.

 

ESP 보드에서 아날로그 핀을 사용하는 방법에 대한 다른 튜토리얼도 있습니다.

 

비디오 보기

 

비디오 튜토리얼을 보거나 이 페이지를 계속 읽어 서면 지침을 확인할 수 있습니다.

 

아날로그 입력(ADC)

 

ESP32로 아날로그 값을 읽는다는 것은 0V와 3.3V 사이의 다양한 전압 레벨을 측정할 수 있다는 것을 의미합니다.

 

그런 다음 측정된 전압은 0~4095 사이의 값에 할당되며, 여기서 0V는 0에 해당하고 3.3V는 4095에 해당합니다. 0V와 3.3V 사이의 모든 전압은 그 사이의 해당 값이 주어집니다.

 

ESP32 ADC 아날로그 읽기 입력 범위 값

 

ADC는 비선형입니다.

 

이상적으로는 ESP32 ADC 핀을 사용할 때 선형 동작을 기대해야 합니다. 그러나 그런 일은 일어나지 않습니다. 다음 차트에 표시된 것과 같은 동작을 얻게 됩니다.

 

ESP32 ESP32 ADC 아날로그 읽기 입력 범위 값 동작

 

소스 보기

 

이 동작은 ESP32가 3.3V와 3.2V를 구별할 수 없다는 것을 의미합니다. 두 전압에 대해 동일한 값인 4095를 얻게 됩니다.

 

매우 낮은 전압 값에도 동일한 일이 발생합니다. 0V와 0.1V에 대해 동일한 값인 0을 얻게 됩니다. ESP32 ADC 핀을 사용할 때 이 점을 염두에 두어야 합니다.

 

이 주제에 대한 GitHub 토론이 있습니다.

 

analogRead() 함수

 

Arduino IDE를 사용하여 ESP32로 아날로그 입력을 읽는 것은 analogRead() 함수를 사용하는 것만큼 간단합니다. 이 함수는 읽고자 하는 GPIO를 인수로 허용합니다.

 

analogRead(GPIO);

 

ESP32는 18개의 다른 채널에서 측정을 지원합니다. DEVKIT V1 DOIT 보드(GPIO 30개 버전)에서는 15개만 사용할 수 있습니다.

 

ESP32 보드 핀아웃을 잡고 ADC 핀을 찾으세요. 아래 그림에서 빨간색 테두리로 강조 표시되어 있습니다.

 

 

ESP32 ADC GPIO 핀

 

ESP32 GPIO에 대해 자세히 알아보세요: ESP32 핀아웃 참조.

 

이러한 아날로그 입력 핀은 12비트 분해능을 갖습니다. 즉, 아날로그 입력을 읽을 때 범위가 0~4095로 달라질 수 있습니다.

 

참고: Wi-Fi를 사용하는 경우 ADC2 핀을 사용할 수 없습니다. 따라서 Wi-Fi를 사용하고 ADC2 GPIO에서 값을 가져오는 데 문제가 있는 경우 대신 ADC1 GPIO를 사용하는 것을 고려할 수 있습니다. 그러면 문제가 해결될 것입니다.

 

기타 유용한 기능

 

다른 프로젝트에서 유용할 수 있는 ADC 핀과 함께 사용할 수 있는 다른 고급 기능이 있습니다.

  • analogReadResolution(해상도): 샘플 비트와 해상도를 설정합니다. 9(0~511)에서 12비트(0~4095) 사이의 값이 될 수 있습니다. 기본값은 12비트 해상도입니다.
  • analogSetWidth(width): 샘플 비트와 해상도를 설정합니다. 9(0~511)에서 12비트(0~4095) 사이의 값이 될 수 있습니다. 기본값은 12비트 해상도입니다.
  • analogSetCycles(cycles): 샘플당 사이클 수를 설정합니다. 기본값은 8입니다. 범위: 1~255.
  • analogSetSamples(samples): 범위 내 샘플 수를 설정합니다. 기본값은 1샘플입니다. 감도를 높이는 효과가 있습니다.
  • analogSetClockDiv(attenuation): ADC 클록의 분배기를 설정합니다. 기본값은 1입니다. 범위: 1~255.
  • analogSetAttenuation(attenuation): 모든 ADC 핀의 입력 감쇠를 설정합니다. 기본값은 ADC_11db입니다.

허용 값:

- ADC_0db: 감쇠를 설정하지 않습니다. ADC는 최대 약 800mV까지 측정할 수 있습니다(1V 입력 = ADC 판독값 1088).

- ADC_2_5db: ADC의 입력 전압이 감쇠되어 측정 범위가 최대 약 1100mV까지 확장됩니다(1V 입력 = ADC 판독값 3722).

- ADC_6db: ADC의 입력 전압이 감쇠되어 측정 범위가 최대 약 1350mV까지 확장됩니다(1V 입력 = ADC 판독값 3033).

- ADC_11db: ADC의 입력 전압이 감쇠되어 측정 범위가 최대 약 2600mV까지 확장됩니다(1V 입력 = ADC 판독값 1575).

 

  • analogSetPinAttenuation(핀, 감쇠): 지정된 핀에 대한 입력 감쇠를 설정합니다. 기본값은 ADC_11db입니다. 감쇠 값은 이전 함수와 동일합니다.
  • adcAttachPin(핀): ADC에 핀을 연결합니다(켜져 있을 수 있는 다른 아날로그 모드도 지웁니다). TRUE 또는 FALSE 결과를 반환합니다.
  • adcStart(핀), adcBusy(핀) 및 resultadcEnd(핀): 연결된 핀의 버스에서 ADC 변환을 시작합니다. 핀의 ADC 버스에서 변환이 현재 실행 중인지 확인합니다(TRUE 또는 FALSE를 반환합니다). 변환 결과를 가져옵니다. 16비트 정수를 반환합니다.

 

이러한 기능을 설명하는 아주 좋은 동영상이 있는데, 여기에서 볼 수 있습니다.

 

ESP32로 전위계에서 아날로그 값 읽기

 

모든 것이 어떻게 연결되는지 알아보기 위해 전위계에서 아날로그 값을 읽는 간단한 예를 만들어 보겠습니다.

 

이 예에서는 다음 부품이 필요합니다.

  • ESP32 DOIT DEVKIT V1 보드(최고의 ESP32 개발 보드 읽기)
  • 전위계
  • 브레드보드
  • 점퍼 와이어

 

이전 링크를 사용하거나 MakerAdvisor.com/tools로 바로 이동하여 프로젝트에 필요한 모든 부품을 최고의 가격으로 찾을 수 있습니다!

 

회로도

 

전위계 ESP32 Arduino IDE에서 값 읽기

 

전위계를 ESP32에 연결합니다. 전위계 중간 핀은 GPIO 34에 연결해야 합니다. 다음 회로도를 참고로 사용할 수 있습니다.

 

코드

 

Arduino IDE를 사용하여 ESP32를 프로그래밍하므로 진행하기 전에 ESP32 애드온이 설치되어 있는지 확인하세요.

 

 

Arduino IDE를 열고 다음 코드를 복사합니다.

 

// // 전위계가 GPIO 34(아날로그 ADC1_CH6)에 연결됨
const int potPin = 34;

// 전위계 값을 저장하기 위한 변수
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // Reading potentiometer value
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}

 

 

이 코드는 단순히 전위계에서 값을 읽고 직렬 모니터에 해당 값을 인쇄합니다.

 

코드에서 전위계가 연결된 GPIO를 정의하는 것으로 시작합니다. 이 예에서는 GPIO 34입니다.

 

const int potPin = 34;

 

setup()에서 115200의 통신 속도로 직렬 통신을 초기화합니다.

 

Serial.begin(115200);

 

loop()에서 analogRead() 함수를 사용하여 potPin에서 아날로그 입력을 읽습니다.

 

potValue = analogRead(potPin);

 

마지막으로 전위계에서 읽은 값을 직렬 모니터에 인쇄합니다.

 

Serial.println(potValue);

 

제공된 코드를 ESP32에 업로드합니다. 도구 메뉴에서 올바른 보드와 COM 포트를 선택했는지 확인합니다.

 

예제 테스트

 

코드를 업로드하고 ESP32 재설정 버튼을 누른 후, 115200의 전송 속도로 직렬 모니터를 엽니다. 전위차계를 돌려 값이 바뀌는 것을 확인합니다.

 

전위차계 ESP32 아날로그 읽기

 

최대값은 4095이고 최소값은 0입니다.

 

 

전위차계 ESP32 아날로그 읽기 직렬 모니터 Arduino IDE 데모

 

마무리

 

이 문서에서는 Arduino IDE와 함께 ESP32를 사용하여 아날로그 입력을 읽는 방법을 알아보았습니다.

요약:

 

  • ESP32 DEVKIT V1 DOIT 보드(핀 30개 버전)에는 아날로그 입력을 읽는 데 사용할 수 있는 ADC 핀이 15개 있습니다.
  • 이 핀은 12비트 분해능을 가지고 있어 0~4095의 값을 얻을 수 있습니다.
  • Arduino IDE에서 값을 읽으려면 analogRead() 함수를 사용하면 됩니다.
  • ESP32 ADC 핀은 선형 동작이 없습니다. 0과 0.1V, 3.2와 3.3V를 구별하지 못할 수도 있습니다. ADC 핀을 사용할 때 이 점을 염두에 두어야 합니다.

 

읽어주셔서 감사합니다. 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^