본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
학교의 모든 지식. SMwiki
검색
검색
보이기
로그인
개인 도구
로그인
로그아웃한 편집자를 위한 문서
더 알아보기
기여
토론
아두이노:저항계 만들기
편집하기 (부분)
문서
토론
한국어
읽기
편집
원본 편집
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
편집
원본 편집
역사 보기
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
파일 올리기
문서 정보
보이기
사이드바로 이동
숨기기
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
== 코드 == 코드 작성 전 유의: 아두이노는 1023단계로 값을 보여주기 때문에 양자화오차(컴퓨터가 아날로그 신호를 받아들일 때 생기는 오차)가 발생한다. 아는 저항은 적절한 값으로 바꾸어주어야 한다.<syntaxhighlight lang="c++"> const int analogPin = A0; const float R_known = 10000.0; // 기준 저항 10kΩ void setup() { Serial.begin(9600); } void loop() { int raw = analogRead(analogPin); // 저항 측정. float R_unknown = R_known * (float)raw / (1023.0 - (float)raw); // 부록. 입력 전압 파악. const float Vin = 5.0; // 아두이노 입력 전압 5V 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, 2); // 소수점 2번째 자리까지만. Serial.println(" ohms"); // 오차 관련정보를 함수에 전달. printResistanceError(R_known, raw); delay(1000); } void printResistanceError(float R_known, int raw) { // 아두이노의 양자화로 인한 오차범위를 알려주는 함수. // 중앙값 측정치 float R_meas = R_known * (float)raw / (1023.0 - (float)raw); // 양자화로 인한 ±0.5 LSB 범위 float raw_low = raw - 0.5; float raw_high = raw + 0.5; // 저항 범위 계산 float R_low = R_known * raw_low / (1023.0 - raw_low); float R_high = R_known * raw_high / (1023.0 - raw_high); // 상대 오차(%) float err_low = (R_low - R_meas) / R_meas * 100.0; float err_high = (R_high - R_meas) / R_meas * 100.0; Serial.print(" 오차범위: ["); Serial.print(R_low, 2); Serial.print(", "); Serial.print(R_high, 2); Serial.print("] ohms"); Serial.print(" Error range: ["); Serial.print(err_low, 3); Serial.print("% , "); Serial.print(err_high, 3); Serial.println("%]"); } </syntaxhighlight> === 유의사항 === * R_unknown의 한쪽은 반드시 아두이노 GND에 연결되어야 정확한 측정 가능. * 측정할 수 있는 저항 범위는 보통 수백Ω ~ 수백kΩ 정도가 적당. * 사용하는 저항들의 저항값이 너무 작으면 발열 및 회로 손상 위험이 있음. === 오차 === {| class="wikitable" !오차 원인 !상세 내용 !해결법 및 완화책 |- |ADC 해상도 제한 |10bit(1024단계)로는 정밀한 변화 감지가 어려움 |고해상도 외부 ADC 사용 또는 평균값 처리 |- |Vin 전압 불안정 |5V 기준이 흔들리면 R_unknown 계산도 흔들림 |정밀 레퍼런스 전압 사용 |- |R_known의 공차 |저항이 표기값과 다를 수 있음(예: ±5%) |정밀 저항(±1% 이하) 사용 |- |노이즈/잡음 |아날로그 측정값에 간섭 발생 |커패시터, 풀다운 저항, 평균화 사용 |- |코드상 반올림 오차 |실수 처리 중 소수점 계산 손실 |float 대신 double, 또는 정밀 처리 |}
요약:
학교의 모든 지식. SMwiki에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
학교의 모든 지식. SMwiki:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
검색
검색
아두이노:저항계 만들기
편집하기 (부분)
새 주제