코드에서 기판으로: 소형 제품 개발 자료를 한 패키지로 정리하기
LED의 밝기를 버튼으로 바꾸는 코드는 비교적 짧게 만들 수 있다. 하지만 이 기능을 제품에 넣으려면 전원, LED 구동 회로, 커넥터, 펌웨어 다운로드 방법, 기판 고정 위치까지 함께 정해야 한다.
이번 글에서는 LED 미용 거울에 사용할 컨트롤러의 KiCad 설계 패키지를 살펴본다. 회로도와 PCB 원본뿐 아니라 제조 출력 파일, 부품 목록, 펌웨어, 시험 기록표가 어떤 역할을 하는지 정리했다. 처음 PCB 프로젝트를 열어보는 개발자도 파일의 사용 순서를 이해하는 것이 목표다.
이 프로젝트는 LED 조명 제어용이다. 피부에 전기 자극을 주거나 치료 기능을 구현하는 장치는 아니다. 현재 상태는 제작 전 검토용 Prototype A이며, 실물 제작·계측과 양산 승인은 완료하지 않았다.
1. 어떤 제품을 위한 설계인가?
| 항목 | 현재 설계 조건 |
| 제어 MCU | ATmega328P-PU, DIP-28 |
| 동작 조건 | 5V 로직, 외부 16MHz 클록 |
| 기판 | 80×50mm, 구리 2층 |
| 전원 | 안정화된 외부 5V를 J1로 공급 |
| LED 부하 | 5V, 2선식, 전류 제한 포함, 전원 PWM 허용 모듈을 전제로 최대 300mA |
| 사용자 입력 | 외부 순간 버튼 |
| 기능 | OFF·LOW·MID·HIGH 전환, 밝기 페이드, 자동 종료 |
| PC 연결 | 외부 USB-UART 어댑터 |
| 최초 프로그래밍·복구 | AVR ISP |
80×50mm는 첫 설계를 위한 가정이다. 실제 거울 케이스를 측정해 확정한 크기는 아니다. 외부 LED 모듈의 판매 모델도 아직 확정하지 않았다.
LED 모듈에 필요한 전류와 제어 조건을 먼저 확인해야 한다. 전류 제한이 없는 LED를 그대로 연결하는 설계로 이해하면 안 된다. PCB에는 USB 데이터 커넥터, USB-C CC 회로, 배터리 충전 회로, 역극성·과전압 보호가 구현되어 있지 않다.
2. 처음에는 어떤 파일을 열어야 할까?
압축을 풀면 led-mirror-cad 폴더가 나온다. 먼저 README-KO.md를 읽고, KiCad에서 mirror.kicad_pro를 연다. 이후 회로도 편집기와 PCB 편집기를 차례로 확인하면 된다.
| 파일 | 역할 | 언제 사용하는가? |
| README-KO.md | 설계 조건, 배선, 업데이트, 미검증 항목 안내 | 프로젝트를 처음 볼 때 |
| mirror.kicad_pro | KiCad 프로젝트 설정 | 프로젝트를 열고 검사 조건 등을 확인할 때 |
| mirror.kicad_sch | 수정 가능한 회로도 원본 | 부품의 전기적 연결과 회로 기능을 검토할 때 |
| mirror.kicad_pcb | 수정 가능한 PCB 원본 | 부품 배치, 배선, 외곽, 고정홀을 확인할 때 |
| schematic.pdf | 회로도 열람용 PDF | KiCad 없이 회로를 읽거나 공유할 때 |
| pcb-top.svg | PCB 앞면 검토 이미지 | 앞면 배치·배선을 설명할 때 |
| pcb-bottom.svg | PCB 뒷면 검토 이미지 | 뒷면 배선을 설명할 때 |
| fp-lib-table | 프로젝트 풋프린트 라이브러리 연결 정보 | 포함된 풋프린트를 프로젝트에서 찾을 때 |
| libs/ | 프로젝트에 포함한 풋프린트 파일 | 다른 PC에서 프로젝트를 열거나 부품 형상을 검토할 때 |
이 패키지는 KiCad 7 형식으로 생성했다. 다른 버전에서 수정했다면 그 버전에서 회로도와 PCB를 다시 검사하고 제조 파일도 새로 출력해야 한다.
프로젝트 폴더를 공유할 때는 mirror.kicad_pcb만 보내기보다 libs/와 fp-lib-table까지 함께 유지하는 편이 좋다. .kicad_mod는 부품의 패드·외곽선 등 PCB 풋프린트를 정의하며, .pretty는 이 풋프린트들을 담는 라이브러리 폴더다. 포함된 풋프린트는 일부 외곽선을 Fab 레이어로 옮겼으므로 기본 라이브러리의 모습과 다를 수 있다.
3. 회로도에서는 무엇을 봐야 할까?
mirror.kicad_sch는 전기적인 연결을 설명하는 원본이다. 부품이 기판의 어느 위치에 있는지를 나타내는 PCB와 구분해서 읽는다.
이번 회로는 전원 입력, MCU·클록·리셋, 버튼 입력, LED 구동, 통신·프로그래밍 연결로 나누어 볼 수 있다.
| 회로 영역 | 주요 역할 |
| 전원 입력과 F1 | 외부 5V를 내부 전원으로 공급하고 PTC 퓨즈를 배치 |
| ATmega328P와 주변 부품 | 버튼 입력, PWM 출력, UART 명령 처리 |
| 크리스털과 커패시터 | MCU의 외부 클록 구성 |
| 리셋 회로 | 재시작과 프로그래밍에 필요한 RESET 연결 |
| 버튼 입력 | 내부 풀업을 사용해 누름 상태 읽기 |
| AO3400A MOSFET | LED의 음극 쪽 전류 경로를 PWM으로 스위칭 |
| ISP·UART 커넥터 | 펌웨어 기록, PC 통신, 업데이트 경로 제공 |
PTC 퓨즈가 있다고 해서 모든 잘못된 전원 연결이 보호되는 것은 아니다. 역극성이나 과전압 보호는 별도의 설계 항목이다.
이미지 2 삽입: schematic.pdf의 전체 회로도.
캡션: 전원·MCU·LED 구동·통신 회로를 한눈에 보는 전체 회로도. 상세 설명에서는 해당 부분을 확대해 보여준다.
이미지 3 삽입: 회로도의 Q1과 게이트 저항 부분 확대.
캡션: MCU D3 출력이 저항을 통해 MOSFET 게이트를 제어한다. 풀다운 저항은 게이트가 떠 있는 상태를 방지하며, LED_NEG는 스위칭되는 노드이므로 상시 GND로 취급하지 않는다.
4. PCB 원본과 제조 파일은 역할이 다르다
mirror.kicad_pcb에는 실제 부품 위치, 구리 배선, 비아, 기판 외곽과 고정홀이 들어 있다. 기능이나 기구 조건이 바뀌면 이 원본을 수정한다.
반면 fabrication-PROTOTYPE 폴더에는 기판 제작에 사용할 출력물이 들어 있다. Gerber는 각 층의 형상을 전달하고, 드릴 파일은 구멍 위치와 크기를 전달한다. 설계를 수정한 뒤 예전 Gerber를 보내면 변경 사항이 제작에 반영되지 않으므로 출력물도 함께 갱신해야 한다.
| 실제 파일 | 의미 |
| mirror-F_Cu.gtl | 앞면 구리 패턴 |
| mirror-B_Cu.gbl | 뒷면 구리 패턴 |
| mirror-F_Mask.gts / mirror-B_Mask.gbs | 앞·뒷면 솔더마스크 개구 형상 |
| mirror-F_Silkscreen.gto / mirror-B_Silkscreen.gbo | 앞·뒷면 인쇄 표기 |
| mirror-F_Paste.gtp / mirror-B_Paste.gbp | 솔더페이스트 개구 형상, 스텐실·조립 검토에 사용 |
| mirror-Edge_Cuts.gm1 | 기판 외곽 |
| mirror-PTH.drl | 도금 구멍용 드릴 정보 |
| mirror-NPTH.drl | 비도금 구멍용 드릴 정보 |
| mirror-PTH-drl_map.pdf / mirror-NPTH-drl_map.pdf | 구멍 위치와 종류를 읽기 쉽게 표시한 도면 |
| mirror-job.gbrjob | Gerber 층과 작업 정보를 설명하는 파일 |
실제 제출 파일과 압축 방식은 제작 업체의 안내에 맞춘다. 페이스트 파일은 맨 기판 제작과 조립·스텐실 작업에서 쓰임이 다르다. 파일을 업로드하기 전 Gerber Viewer로 외곽, 구리, 마스크, 드릴의 겹침을 확인한다.
제조 검토 시작 조건은 FR-4, 1.6mm 두께, 1oz 구리이며, 최종 두께·마감·제조 규칙은 업체 및 제품 요구사항과 대조해야 한다. 현재 출력물은 발주 승인을 받은 양산 자료가 아니다.
이미지 4 삽입: Gerber Viewer에서 구리층·외곽·드릴을 함께 표시한 화면.
캡션: PCB 원본과 별도로 제조 출력물을 확인한다. 층의 방향, 기판 외곽, 드릴 위치가 맞는지 제작 전에 대조한다.
5. BOM과 부품 배치표 읽기
| 파일 | 설명 | 현재 확인할 부분 |
| bom.csv | 부품 참조번호, 값, 후보 제조사 부품번호, 풋프린트 등의 부품 목록 | 구매 승인용 확정 BOM이 아님 |
| placement.csv | 부품의 위치·회전 등의 배치 정보 | 조립 업체 원점·회전·SMD/THT 처리 기준과 대조 필요 |
예를 들어 회로도에서 Q1이라고 표시한 부품을 BOM에서 찾아 후보 부품번호를 확인하고, PCB에서 Q1의 패드와 실물 단자 배열을 대조한다. 부품 값이 같아도 패키지 크기나 핀 배열이 다를 수 있기 때문이다.
이번 BOM에는 외부 LED 모듈, 전원 공급기, 외부 버튼, 케이블, 케이스, 나사와 스페이서가 포함되지 않는다. 전체 제품을 만들려면 이 부품들도 별도로 선정해야 한다. 특히 크리스털의 부하 조건, 전해커패시터의 실물 크기, 헤더와 커넥터 형상은 주문 전에 확인할 항목이다.
6. 펌웨어 파일이 구현한 기능
firmware/mirror/mirror.ino는 Arduino 형식의 소스다. ATmega328P, 5V, 16MHz의 UNO 호환 구성을 전제로 한다. 현재 코드는 호스트 모의 시험을 거쳤지만 AVR 타깃 컴파일과 실제 기판 실행은 수행하지 않았다.
| 기능 | 구현 내용 |
| 버튼 | Arduino D2, 내부 풀업, 약 30ms 디바운싱 |
| 밝기 출력 | Arduino D3 PWM, MOSFET 제어 |
| 밝기 단계 | OFF → LOW → MID → HIGH → OFF |
| PWM 값 | 0, 64, 128, 255 |
| 밝기 변화 | 주기적으로 출력값을 변화시켜 페이드 처리 |
| 부팅·리셋 | 기본 OFF |
| 자동 종료 | 기본 600초, 비영 밝기 설정 시점을 기준으로 시간 계산 |
| 시리얼 통신 | 115200bps, 8N1 |
| 설정 유지 | RAM에 저장, 리셋하면 기본값 복귀 |
PWM 숫자는 듀티를 정하는 값이며 실제 조도나 사람이 느끼는 밝기를 보증하지 않는다. 조도와 촬영 플리커는 최종 LED를 연결한 뒤 측정해야 한다.
PC에서는 개행으로 끝나는 다음 명령을 전송할 수 있다.
VERSION
STATUS
LEVEL 1
LEVEL 3
TIMEOUT 600
LEVEL 0
VERSION은 버전, STATUS는 상태를 요청한다. LEVEL은 0~3, TIMEOUT은 30~3600초 범위다. 이 명령으로 밝기와 시간을 변경하는 것은 실행 중 제어이며, 새로운 프로그램을 기록하는 펌웨어 업데이트와는 구분한다.
7. PC 연결과 펌웨어 업데이트
보드에 USB 데이터 포트가 없으므로 J4에 외부 USB-UART를 연결한다. 이 보드는 5V 로직이므로 어댑터의 실제 신호 전압과 입력 허용 전압을 확인해야 한다. 전원 선택 스위치가 신호 레벨까지 바꾸는지는 어댑터 사양으로 확인한다.
| 보드 J4 | 외부 USB-UART |
| 1: GND | GND |
| 2: RXD | TX |
| 3: TXD | RX |
어댑터 VCC는 연결하지 않고 J1에서 별도로 전원을 공급한다. TX와 RX는 서로 교차 연결하며 GND는 공통으로 연결한다.
새 칩을 처음 준비하거나 부트로더를 복구할 때는 J3의 AVR ISP 경로를 사용한다. J3 핀은 1=MISO, 2=+5V, 3=SCK, 4=MOSI, 5=RESET, 6=GND다. 프로그래머와 J1에서 전원을 중복 공급하지 않는다.
UART 업로드에는 적절한 부트로더가 필요하다. 현재 보드는 DTR/RTS 자동 리셋 회로가 없으므로 J5를 이용해 수동 리셋 타이밍을 맞춰야 한다. 실패할 때는 ISP 경로로 기록·복구한다. 부트로더 및 fuse 설정은 정확한 칩과 클록 조건에 맞춰야 한다.
8. 검사 기록은 무엇을 증명하는가?
| 파일 | 기록 내용 |
| drc-report.txt | PCB 설계 규칙 검사 결과 |
| validation.json | CAD 로드·출력, 연결 대조, 검사·실물 시험 상태 |
| physical-test-sheet.csv | 실물 시험 항목과 측정 결과를 기록할 양식 |
| manufacturing-and-test-guide.docx | 제작·연결·업데이트·검증 안내를 담은 문서 |
KiCad 7.0.11에서 기록한 결과는 DRC 위반 0건, 미연결 패드 0개, 풋프린트 오류 0건이다. 회로도 연결 목록, 설계 핀 표, PCB 패드 연결도 대조했다.
이는 설정된 PCB 규칙과 연결 조건에 대한 검사 결과다. 회로가 실제로 정상 동작하거나 발열·내구성 요구사항을 충족한다는 의미는 아니다. 네이티브 ERC 엔진 검사는 수행하지 않았고, 실물 시험도 미실시 상태다.
physical-test-sheet.csv의 측정값·시험자·시험일·판정은 비어 있다. 여기에 실제 기판의 전원, 소비전류, 버튼, PWM, LED 부하, 발열, 통신, 업데이트와 복구 결과를 기록한다. 양식의 목표 기준이 법규나 인증 합격을 의미하지는 않는다.
9. 나머지 보조 파일의 역할
| 파일 | 설명 |
| design.json | 연결 대조에 사용한 설계·핀 정보 |
| netlist.xml | 회로도에서 출력한 전기적 연결 목록 |
| routing-result.json | 배선 생성 과정의 결과 기록 |
| SHA256.json | 파일 변경 여부 대조에 사용하는 해시 목록 |
이 파일들은 검토와 추적을 돕는다. 일반적인 기판 제작 요청에서 제조 형상을 전달하는 주된 자료는 Gerber와 드릴 파일이며, 조립에는 확정 BOM과 업체 기준에 맞춘 배치 자료 등이 추가로 필요하다. 해시가 일치한다고 회로의 성능이나 안전성이 검증되는 것은 아니다.
10. 실제 제작으로 넘어가는 순서
- 실제 케이스와 LED·전원·버튼·하네스를 선정한다.
- BOM 후보의 핀 배열·패키지 치수·전기적 조건을 확인한다.
- KiCad에서 ERC·DRC를 실행하고 문제를 수정한다.
- Gerber와 드릴을 다시 출력해 Viewer로 확인한다.
- 제조 업체의 규칙과 파일 요구사항에 맞춰 소량 시제품을 제작한다.
- 조립 후 전원 연결 전 단락·극성·납땜 상태를 점검한다.
- 전류 제한이 가능한 전원으로 확인하고 MCU를 프로그래밍한다.
- 작은 LED 부하부터 동작을 확인한 뒤 최대 부하·발열·통신·업데이트·복구를 시험한다.
- 케이스 조립과 반복 사용을 확인하고 결과에 따라 설계를 수정한다.
KiCad 원본, 제조 출력물, 펌웨어는 서로 같은 설계 버전을 가리켜야 한다. 변경이 생기면 관련 파일과 시험 기록도 함께 갱신한다. 현재 패키지의 릴리스 상태는 PROTOTYPE_NOT_PRODUCTION_RELEASED다.

설계 패키지는 여기서 받을 수 있습니다.
'산업 IoT & 스마트 팩토리 디지털트윈 > 임베디드&하드웨어 개발' 카테고리의 다른 글
| delay()를 지우면 보이는 것들: 멈추지 않는 펌웨어 설계 (0) | 2026.10.09 |
|---|---|
| LED는 켜지는데 제품은 왜 멈출까? 전원·GPIO·회로의 기본 (0) | 2026.10.08 |
| ATmega와 STM32, 무엇이 다를까? 제품 개발자가 MCU를 고르는 기준 (0) | 2026.10.07 |