본문으로 이동

아두이노:저항계 만들기

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2025년 7월 26일 (토) 04:53 판 (해 볼 만한 활동)

아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노

  1. 아두이노:개요
  2. 아두이노:하드웨어
    1. 아두이노:우노보드
    2. 아두이노:ESP32
  3. 아두이노:코드
    1. 아두이노:컴퓨터에서 보드로
    2. 아두이노:안드로이드에서 보드로
    3. 아두이노:기초 문법
    4. 아두이노:라이브러리
  4. 아두이노:핀 사용
    1. 아두이노:전원공급
  5. 아두이노:시리얼 통신
    1. 아두이노:엑셀기록
    2. 아두이노:파이썬과 통신
  6. 아두이노:편의함수
  7. 센서 사용
    1. 아두이노:모션센서
    2. 아두이노:온습도센서
    3. 아두이노:조도센서
    4. 아두이노:인체감지센서
    5. 아두이노:pH미터 만들기(Gravity 아날로그 pH센서)
  8. 아두이노:LCD 사용
  9. 아두이노:스위치 사용
  10. 아두이노:릴레이
  11. 통신 관련, 정보 교환
    1. 아두이노:WIFI
    2. 아두이노:블루투스(외장모듈)
    3. 아두이노:IR 송수신
    4. 아두이노:RFID
  12. 아두이노:해결되지 않은 다양한 의문들
  13. 수업용 간단 실습
    1. 아두이노:LED
    2. 아두이노:초음파센서
    3. 아두이노:전압계 만들기
    4. 아두이노:저항계 만들기
  14. 아두이노 모터 출력
    1. 아두이노:서보 모터
    2. 아두이노:DC 모터
    3. 아두이노:BLDC 모터
  15. 미완문서
    1. 아두이노:스테핑 모터
  16. 분류:아두이노 프로젝트

개요

저항계 만들기. 오옴미터(Ohmmeter). 옴미터 만들기.

원리

원리 설명 비고
아두이노 아날로그 핀
  • 아날로그 핀은 0~1023의 전압신호를 받을 수 있다.
  • 때문에 읽어들이는 전압을 토대로 간접적으로 저항을 측정한다.
전압 분배 법칙
  • 아두이노에서 공급되는 5V 전압을 이용하여,
  • 알려진 저항(R_known)과 측정할 저항(R_unknown)을 직렬로 연결하고,
  • 아두이노의 아날로그 핀(A0)으로 중간 전압을 읽는다.
전압값을 이용해 저항값을 유도하는 방식. 옴의 법칙과 전압 분배 공식 사용.
회로 구성

(Vin=5V) ----[ R_known ]----+----[ R_unknown ]---- GND

     (병렬연결) |

                          A0 핀에서 읽는 전압

실제로는 R_known = 10kΩ 정도를 많이 사용.
계산식 유도
  • 5V=iRknown+iRunkown이다.
  • R1:R2=Vtotal(R1R1+R2):Vtotal(R2R1+R2)에서 VA0=R2R1+R25이다.
  • 정리하면 Runknown=Rknown(VA05VA0)의 관계로부터 저항을 얻을 수 있다.
아두이노가 읽은 전압으로 R_unknown을 계산할 수 있음.
주의사항 R_unknown이 너무 작으면 전류가 많이 흐르고, 너무 크면 오차가 커짐.

⇒ R_known과 R_unknown이 같은 크기일 때 가장 정확함.

10kΩ:10kΩ 또는 10kΩ:100kΩ 정도에서 안정적으로 동작.

최종 코드

const int analogPin = A0;
const float Vin = 5.0;           // 입력 전압
const float R_known = 10000.0;   // 기준 저항 10kΩ

void setup() {
  Serial.begin(9600);
}

void loop() {
  int raw = analogRead(analogPin);
  float Vout = raw * (Vin / 1023.0);  // A0에서 읽은 전압
  float R_unknown = R_known * (Vout / (Vin - Vout));  // 공식 적용

  Serial.print("Raw: ");
  Serial.print(raw);
  Serial.print("  Vout: ");
  Serial.print(Vout, 2);
  Serial.print(" V   Measured Resistance: ");
  Serial.print(R_unknown);
  Serial.println(" ohms");

  delay(1000);
}

유의사항

  • R_unknown의 한쪽은 반드시 아두이노 GND에 연결되어야 정확한 측정 가능.
  • A0 핀에 직접 전압을 넣지 않고 반드시 전압 분배 회로를 사용해야 함.
  • 아두이노의 전원(5V)이 정확하지 않으면 결과 오차가 생김.
  • 측정할 수 있는 저항 범위는 보통 수백Ω ~ 수백kΩ 정도가 적당.
  • 저항값이 너무 작으면 발열 및 회로 손상 위험이 있음.

오차

오차 원인 상세 내용 해결법 및 완화책
ADC 해상도 제한 10bit(1024단계)로는 정밀한 변화 감지가 어려움 고해상도 외부 ADC 사용 또는 평균값 처리
Vin 전압 불안정 5V 기준이 흔들리면 R_unknown 계산도 흔들림 정밀 레퍼런스 전압 사용
R_known의 공차 저항이 표기값과 다를 수 있음(예: ±5%) 정밀 저항(±1% 이하) 사용
노이즈/잡음 아날로그 측정값에 간섭 발생 커패시터, 풀다운 저항, 평균화 사용
코드상 반올림 오차 실수 처리 중 소수점 계산 손실 float 대신 double, 또는 정밀 처리

생각해볼 만한 것

  • R_known 값을 바꿔가며 어떤 저항 범위에서 가장 정확하게 측정되는지 실험해보자.
  • 여러 개의 고정 저항을 토글 스위치로 전환해가며 범위를 바꾸는 ‘자동 스케일 저항계’를 만들어볼 수 있다.
  • 상용 멀티미터와 비교하여 오차율을 분석해보자.
  • 블루투스나 OLED, LCD에 측정값을 출력하는 것도 재미있는 확장 프로젝트다.

해 볼 만한 활동

  • 실제 전자 부품(LED, 가변저항, 센서 등)의 내부 저항을 측정해보자.
  • 여러 개의 저항을 직렬/병렬로 연결하고 계산값과 측정값을 비교해보자.
  • 물에 녹인 소금물이나 연필심의 저항을 측정해보고 전도도 실험에 활용해보자.
  • 아두이노와 컴퓨터를 연결하지 않고 입력장치를 통해 숫자를 입력하고 LCD를 통해 나타내는 프로젝트.

Idea

  • 가변저항값을 아날로그 단자로 읽을 수 있으니, 여기에서 저항값을 조절하여 저항계를 만든다면? 상황에 따라 다양한 저항을 쓰는 저항계가 될 수 있을듯?