아두이노 기반 생일 알림기: 코인 셀로 50년 동작하는 초저전력 장치
부품 및 소모품
| 부품 |
수량 |
비고 |
| 아두이노 나노 R3 (ATmega168P-AU 중국산 클론) |
1 |
ATmega168P 필수 (피코파워 기능) |
| Intersil ISL1208 RTC (I2C 인터페이스) |
1 |
월-일 알람 기능, 400nA 대기전류 |
| Renata CR2450N 코인 셀 (540mAh) |
1 |
자가방전 <1%/년 |
| CP2102 USB-시리얼 모듈 |
1 |
시간 설정용 |
| USBasp 프로그래머 |
1 |
퓨즈 비트 변경 및 펌웨어 업로드용 |
| 32.768kHz 크리스탈 |
1 |
RTC용 |
| SPST 스위치 |
1 |
시간 설정 모드 진입용 |
| SMD LED |
1 |
생일 알림 표시용 |
| 투명 LED 돔 |
1 |
LED 커버용 |
| 4"x4" 스위치 박스 (또는 3D프린트 케이스) |
1 |
인클로저 |
| 퍼프보드 |
1 |
회로 구성용 |
| 버그 커넥터 (수/암) |
1 |
배터리, 스위치, LED 연결용 |
| 저항 4.75kΩ |
3 |
I2C 풀업, 인터럽트 풀업 |
| 저항 10kΩ |
2 |
풀업 저항 |
필요 도구
소프트웨어
- ProgISP (퓨즈 비트 설정 및 플래싱)
- 아두이노 IDE 1.8.5+
프로젝트 개요
단일 CR2450 코인 셀로 50년 이상 동작하는 생일 알림 장치입니다. ATmega168P의 딥 슬립 모드(SLEEP_MODE_PWR_DOWN)와 ISL1208 RTC의 초저전력 대기 모드(400nA)를 결합하여 평균 전류 소모 1.22µAh(자가방전 포함) 또는 608nA(자가방전 제외)를 달성했습니다. 생일이 되면 LED가 깜빡이며 시리얼 모니터에 축하 메시지를 출력합니다.
주요 특징
- 평균 전류 소모: 1.22µAh (자가방전 포함), 608nA (자가방전 제외)
- 예상 동작 기간: CR2023(225mAh) >29년, CR2450N(540mAh) >50년, CR2477N(950mAh) >64년
- 시리얼 모니터로 시간/알람 설정 및 업데이트 가능
- 전용 시간 설정 스위치로 언제든 시간 확인/수정 가능
- 오픈 소스: 모든 설계 파일과 코드 GitHub 공개 (MIT 라이선스)
제작 단계
1단계: 아두이노 나노 개조
나노 보드에서 다음 부품 제거:
- CH340G USB-시리얼 브리지 IC
- 쇼트키 다이오드 (USB 5V 라인)
- TX/RX 1kΩ 저항 2개
- RX, TX, PWR SMD LED
- AMS1117 5V 레귤레이터 (패드 쇼트 필요)
핀 13 LED는 디버깅/알림용으로 유지. 크리스탈은 퓨즈 변경 전까지 유지.
2단계: ATmega168P 퓨즈 비트 변경
USBasp + ProgISP 사용. 다음 설정 적용:
- 내부 8MHz 발진기 + 8분주 → 1MHz 동작
- BOD(브라운아웃 감지) 비활성화
- WDT(워치독 타이머) 비활성화
- Low Fuse: 0x62, High Fuse: 0xDF, Extended Fuse: 0xF9
※ ATmega168P/328P "P" 버전만 피코파워 지원. 일반 버전은 미지원.
3단계: 아두이노 IDE 보드 정의 추가 및 컴파일
boards.txt에 커스텀 보드 정의 추가:
pro.menu.cpu.1MHzatmega168=ATmega168 (3.3V, 1 MHz)
pro.menu.cpu.1MHzatmega168.upload.maximum_size=14336
pro.menu.cpu.1MHzatmega168.upload.maximum_data_size=1024
pro.menu.cpu.1MHzatmega168.upload.speed=19200
pro.menu.cpu.1MHzatmega168.bootloader.low_fuses=0x62
pro.menu.cpu.1MHzatmega168.bootloader.high_fuses=0xDF
pro.menu.cpu.1MHzatmega168.bootloader.extended_fuses=0xF9
pro.menu.cpu.1MHzatmega168.bootloader.file=atmega/ATmegaBOOT_168_pro_8MHz.hex
pro.menu.cpu.1MHzatmega168.build.mcu=atmega168
pro.menu.cpu.1MHzatmega168.build.f_cpu=1000000L
IDE 재시작 후 "Arduino Pro or Pro Mini (3.3V, 1 MHz) w/ ATmega168" 선택. Ctrl+Alt+S로 헥스 파일 생성 후 ProgISP로 플래싱.
4단계: ISL1208 RTC 모듈 준비
SMD 타입 ISL1208용 브레이크아웃 보드 제작. 32.768kHz 크리스탈, 코인 셀 홀더, I2C 풀업 저항(4.7kΩ) 장착. INT 핀은 250ms 액티브 로우 펄스 출력으로 MCU 웨이크업용.
5-6단계: 회로도대로 퍼프보드에 납땜
- I2C 풀업: SDA/SCL에 4.7kΩ (3.3k~5.6kΩ 범위)
- 인터럽트 풀업: RTC INT→핀2(알람), 스위치→핀3(시간설정)에 10kΩ
- CP2102: RX/TX 크로스 연결, +5V는 메인 VCC와 연결 금지
- RTC VDD 핀을 점퍼로 분리 가능하게 구성 (VBAT 단독 동작 시 400nA 달성)
동작 원리
- 시간 설정 스위치 ON (핀3→GND) → 시리얼 통신 활성화
- 시리얼 모니터에서 명령 입력:
- 't': 현재 시간 출력
- 'a': 알람 시간 출력
- 'c': 취소 후 슬립
- 시간 설정:
TYYMMDDhhmmssp# (예: T1801050835120# = 2018-01-05 08:35:12 AM)
- 알람 설정:
AMMDDhhmmssp# (예: A08240800000# = 8월 24일 08:00:00 AM)
- 스위치 OFF → 6초 후 딥 슬립 진입
- 매년 생일(알람 일치 시) RTC가 250ms 인터럽트 발생 → MCU 웨이크업
- LED 플래시 + 시리얼 메시지 출력 → 6초 후 다시 슬립
전력 소모 분석 및 최적화
| 모드 |
전류 |
| ATmega168P 파워다운 @1MHz, 3V |
~0.2µA |
| ISL1208 VBAT 모드 (LPMOD=0, VDD=0) |
400nA |
| LED 점등 (1개, 3mA, 연간 85초) |
평균 ~8nA 기여 |
| CR2450N 자가방전 (1%/년) |
616nA 상당 |
| 총 평균 (자가방전 포함) |
1.22µAh |
→ 540mAh / 1.22µA ≈ 50.4년 동작 예상
장기 동작을 위한 고려사항
- PCB 컨포멀 코팅으로 습기/부식 방지
- 실리카겔 동봉 및 밀폐 인클로저 사용
- 온도 변화 적은 안전한 위치에 설치
- 코인 셀은 10년 보관 수명 명시되나, 물리적 상태 양호 시 더 오래 사용 가능
개선 아이디어
- 노키아 5110 LCD 추가 (백라이트 없이 초저전력)
- PC용 시간 동기화 소프트웨어 개발 (Processing 등)
- 나이 표시 기능 (생일 횟수만큼 LED 점멸)
- 전용 PCB 설계 (Eagle/KiCad)
- 옵토커플러로 AC 알람, 조명, 음악 플레이어 등 연동
소스 코드 및 자료
GitHub: github.com/vishnumaiea/Birthday-Alarm/ (MIT 라이선스)
상세 문서: 개인 프로젝트 웹사이트