[아두이노] 저항형 센서를 읽는 법: 전압 분배(Voltage Divider)의 본질
1. 왜 “저항”을 “전압”으로 바꿔야 할까?
아두이노의 analogRead()는 전압만 측정할 수 있다.
하지만 우리가 사용하는 많은 센서는 이런 식이다:
- LDR (조도 센서) → 빛에 따라 저항 변화
- 서미스터 (온도 센서) → 온도에 따라 저항 변화
- FSR (압력 센서) → 압력에 따라 저항 변화
👉 문제는 이거다:
“저항은 직접 측정 못하는데… 그럼 어떻게 읽지?”
그래서 등장하는 게 바로
👉 전압 분배 회로 (Voltage Divider)
2. 전압 분배 회로의 구조
가장 기본 구조는 이거다:
Vcc (5V) | [R1] ← 고정 저항 | +----→ 아날로그 핀 (A0) | [R2] ← 센서 (변하는 저항) | GND
여기서 핵심은:
👉 중간 지점의 전압을 측정한다는 것
3. 전압 분배 공식 (핵심 수식)
- : 아두이노가 읽는 전압
- : 고정 저항
- : 센서 저항
4. 직관적으로 이해해보자
이 공식이 의미하는 건 간단하다:
👉 전체 전압이 저항 비율대로 나눠진다
-
센서 저항 ↑ →
-
센서 저항 ↓ →
즉,
“저항 변화 → 전압 변화 → 아두이노가 읽음”
이게 핵심 흐름이다.
5. 아두이노에서 실제로 읽히는 값
아두이노는 전압을 이렇게 변환한다:
- 0V → 0
- 5V → 1023
즉:
6. 센서 저항을 역으로 계산하기
전압을 읽었으면, 다시 저항으로 바꿀 수도 있다.
공식 변형하면:
👉 이게 중요한 이유:
- 온도 센서 → 실제 온도 계산
- LDR → 조도 계산
- 압력 센서 → 힘 계산
7. 아두이노 샘플 코드
const int sensorPin = A0;
const float Vcc = 5.0;
const float R1 = 10000.0; // 10kΩ
void setup() {
Serial.begin(9600);
}
void loop() {
int adcValue = analogRead(sensorPin);
// 전압 계산
float Vout = (adcValue / 1023.0) * Vcc;
// 센서 저항 계산
float R2 = R1 * (Vout / (Vcc - Vout));
Serial.print("ADC: ");
Serial.print(adcValue);
Serial.print(" | Vout: ");
Serial.print(Vout);
Serial.print(" V | R2: ");
Serial.print(R2);
Serial.println(" ohm");
delay(500);
}
8. 중요한 설계 포인트 (이거 진짜 중요함)
① 고정 저항 값 선택
👉 센서의 “평균 저항값”과 비슷하게 맞추는 게 핵심
왜냐면:
- 그래야 전압 변화가 가장 민감하게 나타남
② 센서 위치 바꾸면 결과도 바뀐다
위/아래 바꾸면 공식이 달라진다.
- 센서를 위에 두면 → 전압 반대로 움직임
- 센서를 아래 두면 → 직관적으로 증가
👉 보통은 아래쪽(GND 쪽)에 둔다
③ 너무 큰 저항은 노이즈에 취약
- 100kΩ 이상 → 불안정
- 보통 10kΩ ~ 47kΩ 추천
9. 핵심 요약
- 아두이노는 전압만 측정 가능
- 센서는 저항이 변함
- 그래서 → 전압 분배 회로로 변환
👉 결국 이 한 줄로 정리된다:
“저항을 전압으로 바꿔서 읽는다”
댓글
댓글 쓰기