4주차_참고 : ADC(Analog‐to‐Digital Converter) - dhryu60/SmartDevice_2025-1 GitHub Wiki
ESP32 ADC 강의 자료
1. ADC(Analog-to-Digital Converter) 개요
ADC(아날로그-디지털 변환기)는 아날로그 신호(전압)를 디지털 값으로 변환하는 장치입니다. ESP32는 최대 18개의 ADC 입력 채널을 제공하며, 센서 데이터 측정, 신호 처리, 전압 감지 등에 활용됩니다.
2. ESP32의 ADC 특징
- ADC1: 8개 채널 (GPIO32-GPIO39)
- ADC2: 10개 채널 (GPIO0, 2, 4, 12-15, 25-27)
- 분해능(Resolution): 기본 12비트 (0~4095 값 출력, 설정 가능)
- 입력 전압 범위: 기본 0~3.3V (조정 가능)
- ADC2는 Wi-Fi와 동시에 사용할 경우 제한됨
- 노이즈 영향이 크므로 평균값 필터링 필요
3. ADC 채널 및 GPIO 매핑
ADC 모듈 | GPIO 핀 |
---|---|
ADC1_CH0 | GPIO36 |
ADC1_CH1 | GPIO37 |
ADC1_CH2 | GPIO38 |
ADC1_CH3 | GPIO39 |
ADC1_CH4 | GPIO32 |
ADC1_CH5 | GPIO33 |
ADC1_CH6 | GPIO34 |
ADC1_CH7 | GPIO35 |
ADC2_CH0 | GPIO4 |
ADC2_CH1 | GPIO0 |
ADC2_CH2 | GPIO2 |
ADC2_CH3 | GPIO15 |
ADC2_CH4 | GPIO13 |
ADC2_CH5 | GPIO12 |
ADC2_CH6 | GPIO14 |
ADC2_CH7 | GPIO27 |
ADC2_CH8 | GPIO25 |
ADC2_CH9 | GPIO26 |
주의:
- ADC1 채널은 Wi-Fi 동작과 무관하게 사용 가능
- ADC2 채널은 Wi-Fi 사용 시 충돌이 발생할 수 있음
- GPIO34~39는 입력 전용(출력 불가)
4. ESP32에서 ADC 사용법
ESP32에서는 analogRead()
함수를 사용하여 ADC 값을 읽을 수 있습니다. 보다 정밀한 설정을 위해 analogReadResolution()
및 analogSetWidth()
등의 함수를 활용할 수 있습니다.
1) 기본적인 ADC 읽기 예제
#define ADC_PIN 34 // ADC 입력 핀 (ADC1 사용 권장)
void setup() {
Serial.begin(115200);
}
void loop() {
int adcValue = analogRead(ADC_PIN); // 0~4095 범위의 값 읽기
float voltage = adcValue * (3.3 / 4095.0); // 전압 변환 (기본 3.3V 기준)
Serial.print("ADC Value: "); Serial.print(adcValue);
Serial.print(" Voltage: "); Serial.print(voltage, 2);
Serial.println(" V");
delay(500);
}
2) ADC 분해능 및 감도 조정
ESP32는 기본적으로 12비트(0~4095) 분해능을 사용하지만, 필요에 따라 조정할 수 있습니다.
analogReadResolution(10); // 10비트 분해능 설정 (0~1023 범위)
analogSetWidth(12); // ADC 너비 설정 (9~12비트 가능)
3) ADC 노이즈 필터링 (이동 평균 필터 적용)
#define SAMPLES 10
int readADC(int pin) {
int sum = 0;
for (int i = 0; i < SAMPLES; i++) {
sum += analogRead(pin);
delay(5); // 안정적인 측정
}
return sum / SAMPLES;
}
5. ADC 활용 사례
- 온도 센서 (LM35 등) 측정
- 조도 센서 (LDR)로 빛 감지
- 전위차계(가변 저항) 값 읽기
- 배터리 전압 모니터링
- 아날로그 마이크 신호 분석
6. 주의사항 및 최적화 팁
- ADC2는 Wi-Fi 사용 시 충돌 가능 (ADC1 사용 권장)
- 입력 전압 범위가 3.3V를 초과하면 ESP32 손상 가능
- ADC는 노이즈 영향을 받으므로 필터링 기법 사용
- ESP32 내부 ADC는 고정밀 측정이 필요할 경우 캘리브레이션이 필요함
7. 결론
ESP32의 ADC 기능을 활용하면 다양한 센서 데이터를 수집할 수 있으며, ADC1을 사용하면 Wi-Fi 동작과 무관하게 안정적인 측정을 할 수 있습니다. ADC의 분해능을 적절히 설정하고, 노이즈 필터링을 적용하여 정확한 측정값을 얻는 것이 중요합니다.