아두이노로 지구 질량 측정하기: 단계별 DIY 가이드
부품 및 소모품
| 부품 |
수량 |
| 아두이노 우노 |
1 |
| USB-A to B 케이블 |
1 |
| 560옴 저항 |
4 |
| 100옴 저항 |
2 |
| 압전 센서 |
4 |
| IR 송신기 (일반) |
1 |
| IR 수신기 (일반) |
1 |
| 회전 포텐셔미터 (일반) |
1 |
| 오피앰프 UA741C |
1 |
| 브레드보드 (일반) |
1 |
| 1.2m 길이 전선 |
3 |
| 범용 PCB |
1 |
| 테이프 |
1 |
| 골판지 시트 |
1 |
앱 및 온라인 서비스
프로젝트 소개
소개
어느 날 체중계 위에 올라섰을 때 문득 이런 생각이 들었습니다. "지구의 질량은 얼마나 될까?" 지구를 올려놓을 체중계는 없으니, 간접적인 방법으로 지구 질량을 측정해야 합니다. 여기서는 아두이노와 몇 가지 센서를 이용해 지구 질량을 측정하는 한 가지 간접 측정 방법을 구현해 보겠습니다.
1단계: 간접 측정 원리
19세기 초 과학자들은 뉴턴의 제2법칙(F = ma)과 만유인력 법칙(F = GmM/r²)을 결합해 지구 질량을 구했습니다. 여기서 m은 물체 질량, a는 가속도, G는 중력 상수, M은 지구 질량, r은 지구 반지름입니다. 가속도 a 자리에 중력 가속도 g를 대입하면:
mg = GmM/r²
이를 지구 질량 M에 대해 풀면:
M = gr²/G
G와 r 값은 알려진 상수를 사용하고, 중력 가속도 g를 실험으로 구한 뒤 공식에 대입해 지구 질량을 계산합니다.
2단계: 실험 개요
(수식이 조금 나옵니다만, 곧 아두이노가 등장합니다)
중력 가속도 g를 구하려면 '자유 낙하'를 이해해야 합니다. 자유 낙하는 중력만 작용해 물체가 지구 쪽으로 떨어지는 운동입니다. 이를 특징짓는 요소들은 다음과 같습니다.
- 초기 속도: 자유 낙하 시작 시 속도
- 최종 속도: 자유 낙하 끝 시점 속도
- 이동 거리: 낙하 동안 이동한 거리
- 비행 시간: 거리를 이동하는 데 걸린 시간
- 가속도: 속도 변화율로, 중력 가속도 g와 같습니다.
뉴턴의 운동 방정식 중 하나인 이동 거리 = (초기 속도 × 비행 시간) + (가속도 × 비행 시간²)/2를 사용합니다. 4개 변수 중 3개를 알면 나머지 1개를 구할 수 있습니다.
우리는 두 변수를 고정합니다:
- 이동 거리 = 1미터 (1m 높이에서 낙하)
- 초기 속도 = 0 m/s (정지 상태에서 시작)
이제 미지수는 가속도(g)와 비행 시간뿐입니다. 아두이노와 센서로 비행 시간을 측정하면 g를 구할 수 있습니다. 비행 시간 측정을 위해 낙하 시작과 끝, 두 시점의 타임스탬프가 필요합니다. 이에 대한 회로는 4단계와 5단계에서 설명합니다.
고정된 값을 방정식에 대입하면:
1 = g × (비행 시간)² / 2
따라서 g = 2 / (비행 시간)²
3단계: 필요한 물품
위 부품 목록과 동일합니다. 회로도 이미지를 참고하세요.
4단계: 회로도 1 - IR 회로 (낙하 시작 감지)
이 회로는 자유 낙하 시작 시점을 기록합니다. 주요 포인트:
- IR LED는 순방향 바이어스로 동작해 IR 수신 포토다이오드를 조명합니다.
- 포토다이오드는 역방향 바이어스로 사용합니다.
- 캐소드와 저항 접점의 출력을 오피앰프 입력 단자 중 하나에 연결합니다.
- 오피앰프의 다른 입력 단자는 포텐셔미터에 연결해 임계 전압을 설정합니다.
- 오피앰프 출력은 아두이노로 갑니다.
5단계: 회로도 2 - 압전 센서 회로 (낙하 끝 감지)
이 회로는 자유 낙하 종료 시점을 기록합니다. 주요 포인트:
- 4개의 압전 센서를 병렬로 연결합니다.
- 각 센서에 560옴 저항을 병렬 연결해 낙하 물체 충격 시 발생하는 전압 스파이크를 억제합니다.
- 압전 센서 음극은 회로 그라운드에 연결합니다.
- 압전 센서 양극은 아두이노 아날로그 입력 핀에 연결합니다.
6단계: 조립하기
- 골판지로 지붕 모양 구조물을 만들어 벽에 약 1.1m 높이에 고정합니다.
- IR 모듈을 골판지 지붕 아래쪽을 향하게 부착합니다.
- 오피앰프 출력을 아두이노 4번 핀에 1.2m 전선으로 연결합니다.
- 아두이노 VCC와 GND를 IR 모듈에 나머지 전선들로 연결합니다.
- 모든 부품(전선, IR 모듈, 압전 센서 모듈)이 단단히 고정되었는지 확인합니다.
7단계: 실험 절차
모든 준비가 끝났다면(아두이노 코드는 8단계), 실험을 진행합니다.
- 낙하 물체 위에 얇은 돌출부를 붙입니다(이미지 1 참조).
- 물체를 1m 지점에서 잡고, 돌출부가 IR 송수신기 사이 빛을 차단하도록 합니다(이미지 2).
- 외부 힘 없이 물체를 놓아 자유 낙하시킵니다.
- 물체가 떨어지면서 IR 빛이 다시 통하면, 이것이 낙하 시작 타임스탬프가 됩니다.
- 물체가 착지 구역(압전 센서)에 닿으면 압전 센서가 전압 스파이크를 내며 낙하 종료 타임스탬프를 알립니다.
- 종료 시간에서 시작 시간을 빼면 비행 시간을 얻고, 앞서 본 공식으로 g를 계산합니다.
8단계: 아두이노 코드
실험용 아두이노 코드입니다. 코드는 단순하며, 상세 설명은 영상(13분 35초)을 참고하세요.
const int sensorPin1 = A0;
const int sensorPin2 = A1;
const int sensorPin3 = A2;
const int sensorPin4 = A3;
const int photoPin = 4;
const int ledPin = 13;
const int threshold = 110;
char stringToPrint[100];
int startTime, endTime;
int val1, val2, val3, val4;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(sensorPin3, INPUT);
pinMode(sensorPin4, INPUT);
pinMode(photoPin, INPUT);
}
void loop() {
int start = digitalRead(photoPin);
startTime = millis();
if (start == HIGH) digitalWrite(ledPin, HIGH);
while (start == LOW) {
digitalWrite(ledPin, LOW);
val1 = analogRead(sensorPin1);
val2 = analogRead(sensorPin2);
val3 = analogRead(sensorPin3);
val4 = analogRead(sensorPin4);
if ((val1 >= threshold) || (val2 >= threshold) || (val3 >= threshold) || (val4 >= threshold)) {
endTime = millis();
sprintf(stringToPrint, "%d ms", endTime - startTime);
Serial.println(stringToPrint);
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
start = HIGH;
}
}
}
9단계: 실험 실행
실험 전 확인사항:
- 압전 센서 임계값을 코드에서 적절히 설정
- 압전 패널을 IR 모듈 바로 아래에 배치
- 1m 높이에서 외부 힘 없이 물체 낙하
10단계: 결과 및 지구 질량 계산
3회 반복 실험 결과(비행 시간):
평균 비행 시간 = 450 ms
이를 g = 2 / (0.45)² 공식에 대입하면 g ≈ 9.8755 m/s²
최종적으로 M = gr²/G에 대입하면 지구 질량 ≈ 6.0066 × 10²⁴ kg
구글 기준 실제 지구 질량은 5.972 × 10²⁴ kg로, 꽤 근접한 결과를 얻었습니다.