TEA5767 모듈로 레트로 스타일 FM 라디오 만들기 - 단계별 DIY 가이드
프로젝트 개요
아두이노 나노(Arduino Nano R3)와 TEA5767 FM 라디오 수신 모듈을 핵심으로, 16x2 LCD에 아날로그 다이얼 스타일 주파수 표시, 두 개의 아날로그 미터(신호 강도, 주파수), 스테레오/모노 LED, 오토/수동 탐색 LED, 4개 프리셋 메모리 버튼을 갖춘 레트로 감성의 FM 스테레오 라디오를 제작합니다. D클래스 오디오 앰프(2×3W)와 2웨이 스피커로 고음질 사운드를 출력하며, 7805 레귤레이터로 5V 안정화 전원을 공급받습니다.
필수 부품
| 부품 | 수량 | 비고 |
| Arduino Nano R3 | 1 | 메인 컨트롤러 |
| TEA5767 FM 라디오 모듈 | 1 | I2C 인터페이스, 안테나 단자 내장 |
| 아날로그 미터 (구형 라디오 해체품) | 2 | 신호 강도계, 주파수계 용도, 트리머로 풀 스케일 조절 |
| 16x2 LCD (흰색/파란색) | 1 | 아날로그 다이얼 그래픽 표시 (커스텀 문자 활용) |
| 스테레오 포텐셔미터 10kΩ (로그 테이퍼) | 1 | 볼륨 조절 |
| D클래스 오디오 앰프 모듈 (2×3W, PAM8403 등) | 1 | 스피커 구동 |
| 스피커 3W 4Ω (미드-베이스) | 2 | 메인 스피커 |
| 스피커 0.25W 8Ω (트위터) | 2 | 고음용, 1μF 커패시터 직렬로 크로스오버 |
| 로터리 인코더 (푸시버튼 내장) | 1 | 주파수 조절, 오토/수동 모드 전환 |
| 택트 스위치 12mm | 4 | 프리셋 메모리 버튼 (코드 내 주파수 고정) |
| LED 3개 | 3 | 스테레오 표시, 오토/수동 표시, 전원 표시 등 |
| 1μF 커패시터 | 2 | 트위터 크로스오버용 |
| 리튬이온 배터리 2직렬 + 7805 레귤레이터 | 1세트 | 휴대용 5V 전원 |
| 텔레스코픽 안테나, 케이스, 노브 등 | 1식 | 외관 마감 |
회로 구성 포인트
- TEA5767 I2C: SDA → A4, SCL → A5 (나노 기준), VCC → 5V, GND → GND, 안테나 단자에 텔레스코픽 안테나 연결
- 오디오 출력: TEA5767 L/R 아날로그 출력 → 스테레오 포텐셔미터 → D클래스 앰프 입력 → 스피커 (트위터엔 1μF 직렬)
- 아날로그 미터 구동: PWM 핀(5, 6, 7)에 각각 신호 강도, 주파수, 스테레오 표시용 LED 연결 → 미터는 PWM 전압에 비례해 편향 (트리머로 풀 스케일 보정)
- 로터리 인코더: A상→D3, B상→D4, 스위치→D2 (인터럽트 0, 1 사용)
- 프리셋 버튼: A0~A3 풀업 입력, 코드에 하드코딩된 주파수(92.0, 94.8, 97.0, 101.2 MHz)로 즉시 이동
- LCD: 6핀 병렬 모드 (RS=13, E=12, D4=11, D5=10, D6=9, D7=8), RW=GND, VO=2.2kΩ to GND
소프트웨어 주요 기능
1. 아날로그 다이얼 표시 (LCD 커스텀 문자)
- 8개 커스텀 문자(5×8 도트)로 바늘 위치 5단계(0~4열) 표현 → 16글자×5=80픽셀 해상도로 88~108MHz 매핑
updateScale() 함수에서 현재 주파수에 해당하는 위치 계산, 이전 위치 지우고 새 위치 그리기
2. 인코더 인터럽트 처리
- 인코더 A상 상승 에지 인터럽트(INT1)에서 B상 상태 읽어 방향 판별 (
ST_GO_UP/ST_GO_DOWN 플래그 세팅)
- 인코더 스위치 상승 에지 인터럽트(INT0)에서 오토/수동 모드 토글 (
ST_AUTO 플래그)
- 디바운싱용
delay(50) 포함 (인터럽트 내 지연은 권장되지 않으나 단순화 위해 사용)
3. 주파수 제어 로직
- 수동 모드: 인코더 회전 시 0.1MHz 단위 증감,
Radio.set_frequency() 호출
- 오토 모드: 인코더 회전 시
Radio.search_up/down()으로 강신호 자동 탐색, 탐색 중 ST_SEARCH 플래그로 중복 방지
4. 신호 강도/스테레오 표시
- TEA5767 레지스터 읽기(
Radio.read_status())로 신호 레벨(0~15), 스테레오 플래그 획득
- 신호 레벨 → 0~100% → PWM 0~255 매핑 → 아날로그 미터(핀 5) 구동
- 주파수 → 88~108MHz → PWM 0~255 매핑 → 주파수 미터(핀 6) 구동
- 스테레오 플래그 → PWM (핀 7) → 스테레오 LED 밝기 제어
5. 프리셋 버튼 처리
- 루프 내에서 A0~A3 폴링, HIGH 감지 시 해당 주파수로 강제 이동 후
precrtajScale()로 다이얼 초기화
조립 및 테스트 순서
- 회로도(Schematics) 참조하여 브레드보드에서 선행 테스트 (TEA5767 라이브러리 설치 필요: GitHub)
- 제공된 코드 컴파일·업로드, 시리얼 모니터로 디버깅
- 퍼프보드 또는 맞춤 PCB에 솔더링, 케이스 가공(아크릴/목재/3D프린팅)
- 아날로그 미터 트리머 조정: 강한 지역국 수신 시 신호 미터 풀 스케일, 주파수 미터는 양단 주파수에서 풀 스케일 되도록
- 안테나 장착, 배터리/전원 연결, 최종 동작 확인
알려진 이슈 및 개선 예정 사항
- 주파수 미터 계단 현상: 라이브러리 업데이트 주기가 1MHz 단위라 바늘이 부드럽게 안 움직임. 보간 로직 추가 예정.
- 스테레오/모노 전환 불안정: 약전계에서 스테레오↔모노 빈번 전환. 차기 버전에 '스테레오/모노 강제 스위치', '뮤트 스위치' 추가 예정.
- 인코더 디바운싱: 인터럽트 내
delay() 제거하고 하드웨어 RC 필터 또는 소프트웨어 상태 머신으로 개선 필요.
활용 및 확장 아이디어
- RDS(Radio Data System) 디코딩 라이브러리 추가로 방송국명, 프로그램 정보 표시
- 블루투스 모듈(예: HC-05) 추가로 스마트폰 앱 연동 제어
- 시계/알람 기능 추가 (RTC 모듈 장착)
- 배터리 잔량 표시, 충전 회로(TP4056) 내장으로 완전 휴대용화
구형 라디오의 아날로그 감성을 현대적 모듈로 재현한 매력적인 프로젝트입니다. 아두이노 나노의 컴팩트함과 TEA5767의 우수한 수신 성능, D클래스 앰프의 깨끗한 소리가 어우러진 완성도 높은 레트로 라디오를 직접 만들어 보세요. 전체 코드, 회로도, 라이브러리 링크는 프로젝트 페이지의 Code, Schematics 섹션에서 확인 가능합니다.