아두이노:전압계 만들기: 두 판 사이의 차이
보이기
잔글 →생각해볼 만한 것 |
|||
| 125번째 줄: | 125번째 줄: | ||
== 생각해볼 만한 것 == | == 생각해볼 만한 것 == | ||
{{접기|형태=mw-collapsed|제목=|내용= | {{접기|형태=mw-collapsed|제목=최대로 측정할 수 있는 전압은 어느 정도일까?|내용=<math>V_{A0} =5= V_{total}\left ( \frac{R_2}{R_1+R_2} \right ) </math>일 때가 최대이므로, <math>V_{max}=5 \left ( \frac{R_1+R_2}{R_2} \right ) </math>인데, 10kΩ과 100kΩ 을 쓴다면 55V도 가능하지만, 20V 정도가 어느 정도 정밀도가 확보된 측정에 적절하지 않을지. | ||
}} | }} | ||
| 133번째 줄: | 133번째 줄: | ||
|내용=<math>V_{A0} =5= V_{total}\left ( \frac{R_2}{R_1+R_2} \right ) </math>일 때가 최대이므로, <math>V_{max}=5 \left ( \frac{R_1+R_2}{R_2} \right ) </math>인데, 10kΩ과 100kΩ 을 쓴다면 55V도 가능하지만, 20V 정도가 어느 정도 정밀도가 확보된 측정에 적절하지 않을지. | |내용=<math>V_{A0} =5= V_{total}\left ( \frac{R_2}{R_1+R_2} \right ) </math>일 때가 최대이므로, <math>V_{max}=5 \left ( \frac{R_1+R_2}{R_2} \right ) </math>인데, 10kΩ과 100kΩ 을 쓴다면 55V도 가능하지만, 20V 정도가 어느 정도 정밀도가 확보된 측정에 적절하지 않을지. | ||
}} | }} | ||
{| class="wikitable" | |||
|<div class="mw-collapsible mw-collapsed">제목<div class="mw-collapsible-content"> | |||
이것이 내용이다. | |||
</div></div> | |||
|} | |||
2025년 7월 24일 (목) 06:03 판
아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노
- 아두이노:개요
- 아두이노:하드웨어
- 아두이노:코드
- 아두이노:핀 사용
- 아두이노:시리얼 통신
- 아두이노:편의함수
- 센서 사용
- 아두이노:LCD 사용
- 아두이노:스위치 사용
- 아두이노:릴레이
- 통신 관련, 정보 교환
- 아두이노:해결되지 않은 다양한 의문들
- 수업용 간단 실습
- 아두이노 모터 출력
- 미완문서
- 분류:아두이노 프로젝트
개요
전압계 만들기. 볼트미터!
원리
| 아두이노 특성 | 확인 | 비고 |
|---|---|---|
| 아두이노의 아날로그 핀은 전압에 따라 0~1023의 총 1024개 값을 반환한다.(전압은 0부터 5V까지. 역전압은 인식 불가.) |
const int analogPin = A0;
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
}
void loop() {
int adcValue = analogRead(analogPin); // 0~1023 Analog-to-Digital Converter의 약자.
float voltage = adcValue * (5.0 / 1023.0); // 실제 전압으로 변환
Serial.print("ADC Value: ");
Serial.print(adcValue);
Serial.print(" → Voltage: ");
Serial.print(voltage, 2); // 소수 둘째 자리까지 출력
Serial.println(" V");
delay(1000); // 1초마다 갱신
}
|
가변저항(potentiometer)의 원리
|
|
보통 다음과 같이 연결.
(Vin) ----[ R1 ]----+----[ R2 ]---- GND | A0 (아날로그 입력)
|
최종 코드
const int analogPin = A0;
const float R1 = 20000;
const float R2 = 20000;
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(analogPin);
float va0 = raw * (5.0 / 1023.0); // 아날로그 핀 전압. .0을 넣어준 것은 정수가 아니라, 실수로 만들기 위해.
float vtotal = va0 * (R1 + R2) / R2; // 원래 입력 전압 계산
Serial.print("Raw: ");
Serial.print(raw);
Serial.print(" V_a0: ");
Serial.print(va0);
Serial.print(" Measured Voltage: ");
Serial.print(vtotal, 2); // 소수점 2자리
Serial.println(" V");
delay(1000);
}
유의사항
- A0 단자와 연결한 선을 배터리의 +극과 -극에 연결해도 정확한 전압이 측정되지 않는다. 떠 있는 상태(floating)로, 외부 교란이 섞인다. ==>> 전지의 -단자가 아두이노의 GND에 연결되게끔 구성.
- 절대로 A0 단자에 5V 이상의 입력이 들어가게 하면 안된다. 파손...
오차
| 오차 원인 | 상세 내용 | 해결법 및 완화책 |
|---|---|---|
| ADC 해상도 제한 | 10bit로 미세 변화 감지 한계 | 고해상도 ADC 모듈 사용 |
| 기준 전압 불안정 | 5V가 정확하지 않음(구동전압 자체가 5V가 아닌 경우) | 외부 정밀 기준 전압 사용 |
| 저항 오차 | 저항 공차에 따른 측정 오차 | 정밀 저항(±1% 이하) 사용 |
| 전기 잡음 및 간섭 | 주변 노이즈로 인한 신호 왜곡 | 차폐, 필터링, 풀다운 저항 사용 |
| 접촉 불량 | 배선 불량, 납땜 불량 | 배선 점검, 신뢰성 높은 연결 |
| 코드 및 연산 오차 | 반올림, 샘플링 간격 문제 | 코드 최적화 및 평균값 처리 |
| 환경 온도 영향 | 온도 변화에 따른 부품 특성 변화 | 온도 보상 회로 또는 보정 |
생각해볼 만한 것
최대로 측정할 수 있는 전압은 어느 정도일까?
일 때가 최대이므로, 인데, 10kΩ과 100kΩ 을 쓴다면 55V도 가능하지만, 20V 정도가 어느 정도 정밀도가 확보된 측정에 적절하지 않을지.
측정 한계는 어느 정도일까?
일 때가 최대이므로, 인데, 10kΩ과 100kΩ 을 쓴다면 55V도 가능하지만, 20V 정도가 어느 정도 정밀도가 확보된 측정에 적절하지 않을지.
제목
이것이 내용이다. |