아두이노 나노 자기 부상 장치: 부품 및 배선 가이드
프로젝트 개요
아두이노 나노로 제어하는 전자석과 홀 효과 센서를 이용한 자기 부상(Magnetic Levitation) 장치입니다. 영구 자석(네오디뮴)을 공중에 띄우고, 홀 센서로 자기장 강도를 측정해 전자석 전류를 PID 또는 간단한 임계값 제어로 조절하여 안정적으로 부상시킵니다. 3D 프린팅 프레임 선택 가능, 펌웨어 업로드 후 PC 없이 12V 전원만으로 독립 동작합니다.
필요한 부품
| 부품 | 수량 | 비고 |
| 아두이노 나노 R3 | 1 | 기타 아두이노도 가능하나 실드는 나노 전용 |
| 전자석 12V, 직경 25mm | 1 | 부상력 발생용 |
| 리니어 홀 효과 센서 49E | 1 | 스위치 타입 홀 센서 불가, 아날로그 출력 필수 |
| 달링턴 트랜지스터 TIP120 | 1 | 전자석 구동용 고전력 스위치 |
| 저항 1kΩ | 1 | 베이스 전류 제한 |
| 다이오드 1N4007 | 1 | 플라이백 다이오드 (전자석 역기전력 보호) |
| 12V 1A 파워 서플라이 | 1 | 전자석 전원용 |
| 브레드보드 | 1 | |
| 푸시 버튼 12mm | 2 | 부상 지점 값 조정용 (증가/감소) |
| 점퍼 와이어 | 1세트 | |
회로도 및 배선
핵심 연결
- 전자석 한 쪽 → 12V 양극
- 전자석 다른 쪽 → TIP120 컬렉터 (C)
- TIP120 이미터 (E) → GND
- TIP120 베이스 (B) → 1kΩ 저항 → 아두이노 핀 5 (PWM 출력)
- 1N4007 다이오드: 전자석 양단에 병렬 연결 (음극 → 12V 쪽, 양극 → 컬렉터 쪽)
- 홀 센서 49E: VCC → 5V, GND → GND, OUT → 아두이노 A1 (아날로그 핀 1)
- 버튼 2개: 핀 7(감소), 핀 8(증가) → INPUT_PULLUP 모드, 다른 쪽 → GND
3D 프린팅 프레임 (선택 사항)
중요한 설치 팁
- 홀 센서 위치: 전자석 끝단(팁) 바로 아래 최소 5mm 거리에 배치 (top_sensor.stl 부품 참고)
- 센서 종류: 반드시 리니어(아날로그 출력) 홀 센서 사용. 디지털 스위치 타입(예: A3144) 사용 불가
- 영구 자석: 네오디뮴 자석 필수. 일반 페라이트 자석은 자속 밀도 부족으로 부상 안 됨
- 무게: 적당히 무거운 물체가 더 안정적으로 부상함
펌웨어: 두 가지 버전 제공
버전 1: 간단 임계값 제어 (Levitator.ino)
홀 센서 값이 설정값(levVal)보다 작으면 전자석 ON, 크면 OFF. 버튼으로 설정값 실시간 조정 가능. 시리얼 모니터(57600 baud)로 현재 센서값/출력/설정값 모니터링.
// 핵심 루프
anaVal = analogRead(A1); // 홀 센서 읽기
if (digitalRead(addPin) == LOW) levVal++; // 설정값 증가
if (digitalRead(subPin) == LOW) levVal--; // 설정값 감소
digVal = (anaVal < levVal) ? LOW : HIGH; // 임계값 비교
digitalWrite(digPin, digVal); // 전자석 ON/OFF
delayMicroseconds(250);
버전 2: PID 제어 (Levitator_PID.ino)
비례-적분-미분(PID) 제어로 더 부드럽고 안정적인 부상 구현. analogWrite()로 PWM 듀티 사이클 조절 (0-255). PID 게인(Kp=1.0, Ki=0.1, Kd=0.01)은 실험적으로 조정 필요.
// PID 계산
error = setpoint - measured_value;
integral += error * dt;
derivative = (error - previous_error) / dt;
output = (-Kp * error) + (-Ki * integral) + (-Kd * derivative);
previous_error = error;
digVal += output; // PWM 듀티에 반영
digVal = constrain(digVal, 0, 255);
analogWrite(digPin, digVal);
캘리브레이션 및 튜닝 방법
- 펌웨어 업로드 후 시리얼 모니터 열기 (57600 baud)
- 영구 자석을 전자석 아래에 두고 홀 센서 값(
anaVal) 관찰
- 자석이 붙으려 할 때(값 작음) / 떨어지려 할 때(값 큼) 경계값 확인
- 버튼으로
levVal(간단 버전) 또는 setpoint(PID 버전)를 경계값 중간으로 설정
- PID 버전인 경우
Kp, Ki, Kd 값을 조정하며 진동 없이 안정되는 지점 탐색
- 최적값 찾으면 코드에 하드코딩하여 자율 동작 가능
트러블슈팅
| 증상 | 원인 | 해결 |
| 자석이 바로 붙어버림 | 전자석이 계속 켜져 있음 / 홀 센서 불량 | 배선 확인, 홀 센서 아날로그 출력 확인, 다이오드 극성 확인 |
| 자석이 떨어짐 | 전자석 힘이 약함 / 설정값 너무 높음 | 전원 전압 확인(12V), 설정값 낮추기, 코일 저항 측정 |
| 심하게 진동함 | PID 게인 부적절 / 센서 노이즈 | Kp 낮추기, 커패시터로 센서 노이즈 필터링, dlyVal 증가 |
| 한쪽으로 치우침 | 홀 센서가 전자석 중심에서 벗어남 | 센서 위치 재조정 (정중앙 하단 5mm) |
참고 자료