시뮬레이션 통과 ≠ 양산 안전. 브레드보드가 초보자를 배신하던 방식이 정확히 이것입니다 — 한 종류의 성공을 전체의 성공으로 오해하게 만드는 것. 그래서 ibouPCB 는 검증을 세 게이트로 나누고 절대 섞어서 표시하지 않습니다.
3중 검증 게이트
| 게이트 | 검증하는 것 | 검증 못 하는 것 | 도구 |
|---|---|---|---|
| ① 로직 검증 | 코드가 의도대로 도는가 | 전기적 안전 전부 | 시뮬레이터 (L0) |
| ② 전기 검증 | 태워먹지 않는가 | 실제 노이즈 · EMI | ERC + DRC 엔진 |
| ③ 실물 검증 | 진짜로 작동하는가 | — | 사용자가 직접 |
- ①② 가 모두 초록이어야 다운로드 버튼이 열립니다.
- ③ 은 절대 자동으로 초록이 되지 않습니다. 보드를 받아 직접 확인한 뒤 사용자가 체크합니다.
- 시뮬레이터가 못 잡는 것을 항상 명시합니다: 전원 노이즈, 접지 바운스, EMI, 센서 타이밍 편차, 부품 공차.
AI 는 제안만, 판정은 결정론적으로
회로 확장에는 두 개의 제안 소스가 있습니다. 하나는 규칙과 카탈로그의 레퍼런스 회로로 넷리스트를 만드는 결정론적 확장기, 다른 하나는 JSON 스키마를 강제한 AI 제안기(N=3 샘플)입니다. 어느 쪽이 만들었든 아래 검증기를 전부 통과해야 채택됩니다. 검증기 코드에는 AI 가 없습니다 — 전부 결정론적 코드입니다.
- AI 는 카탈로그 밖의 부품을 만들 수 없습니다. 제안은 카탈로그 ID 로만 부품을 지정하고, 없는 ID 는 즉시 거부됩니다.
- 어느 한 단계라도 error 가 나오면 채택하지 않습니다. 경고는 사용자에게 보여주고 진행합니다.
- AI 키가 없거나 합의에 실패하면 항상 결정론적 확장기로 폴백합니다.
- 모든 판정은 근거를 남깁니다. 골든 패턴마다 출처(Arduino 공식 회로도, Espressif 하드웨어 설계 가이드 등)가 기록되어 있습니다.
8단계 (P1–P8)
| 단계 | 검사 | 막는 것 |
|---|---|---|
| P1 스키마 | 부품 · 넷 · 핀 구조가 형식에 맞는가 | 깨진 제안 |
| P2 카탈로그 접지 | 모든 부품 ID 와 핀 이름이 카탈로그에 실존하는가 | AI 환각 (존재하지 않는 부품 · 핀) |
| P3 골든 패턴 | MCU · 레귤레이터 · 인터페이스별 필수 지원 회로가 있는가 | EN 풀업 누락, 디커플링 누락 같은 "조용한" 실패 |
| P4 ERC 규칙 | 전압 도메인, I²C 주소 충돌, 풀업, 전류 예산, 플라이백, 부트 스트랩 핀… | 초보자가 실제로 태워먹는 것들 |
| P5 핀 계약 | .ino 의 논리 핀이 전부 1:1 로 매핑되고 PWM · 인터럽트 · ADC 능력이 맞는가 | 코드와 다른 보드 |
| P6 합의 (AI 전용) | N 샘플의 정규화된 넷 토폴로지를 비교, 과반 일치가 없으면 폐기 | 우연히 통과한 제안 |
| P7 KiCad DRC | 보드 생성 → Freerouting 배선 → kicad-cli pcb drc | 제조 불가능한 보드 (간격 · 트랙폭 · 드릴) |
| P8 시뮬 회귀 | 변환 전 / 후 시뮬레이션 기록을 핀 계약으로 대조 | "보드는 맞는데 코드가 다르게 도는" 경우 |
P1–P6 는 KiCad 없이 실행되어 몇 초 안에 끝납니다. P7 은 KiCad 9 컨테이너에서 별도 프로세스로 돌고(GPL 도구는 링크하거나 번들하지 않습니다), P8 은 브라우저 시뮬레이터와 서버가 함께 수행합니다.
골든 패턴 — 실제 오픈소스 회로에서 읽은 사실
P3 의 데이터는 사람이 지어낸 규칙이 아니라 공개 회로도에서 읽어낸 패턴입니다.
| 대상 | 패턴 | 출처 |
|---|---|---|
| ESP32-WROOM-32 | EN 10 kΩ 풀업 + 0.1 µF, 3V3 에 10 µF + 0.1 µF 디커플링 | Espressif Hardware Design Guidelines, Adafruit HUZZAH32, Olimex ESP32 4종 |
| ATmega328P | 16 MHz 크리스탈 + 22 pF × 2, RESET 10 kΩ 풀업, VCC / AVCC 100 nF | Arduino Uno Rev3 공식 회로도 |
| AMS1117-3.3 | 입력 10 µF, 출력 10 µF (+100 nF) | 데이터시트 권장 회로 |
| 릴레이 코일 | NPN 드라이버 + 베이스 저항 + 플라이백 다이오드 | Arduino 릴레이 모듈 회로 |
| I²C 버스 | SDA / SCL 풀업 (2.2 k–10 k) 정확히 1세트 | NXP I²C 사양 |
| DS18B20 | DQ 4.7 kΩ 풀업 | Maxim 데이터시트 |
패턴은 실제 보드와 대조하며 고쳐집니다. 예를 들어 Olimex 의 ESP32 보드 4종을 임포트해 보니 EN 풀업과 3V3 벌크 캡은 손으로 쓴 패턴과 일치했지만 IO0 외부 풀업은 4보드 모두 없었습니다(버튼 + 내부 풀업). 그래서 IO0 풀업의 심각도는 error 가 아닌 warning 으로 조정되었습니다. 검증기는 이렇게 근거가 있을 때만 바뀝니다.
P4 ERC 규칙 — 실제로 태워먹는 것들
- 전압 도메인 불일치 — 3.3 V GPIO ↔ 5 V 센서 직결 → 레벨 시프터 / 분압기 자동 삽입
- GPIO 전류 초과 — 핀별 · 포트 합계 · 칩 전체 → 드라이버 트랜지스터 제안
- I²C 주소 충돌 — 같은 버스에 동일 주소 2개 (예: 0x68 MPU6050 + DS3231) → 주소 변경 가능 모듈 제안
- I²C 풀업 누락 / 중복 — 버스당 풀업 총합 → 자동 계산 · 삽입
- 전원 예산 초과 — 레귤레이터 정격 vs 부하 합계 → 상위 레귤레이터 제안
- 유도성 부하 보호 누락 — 릴레이 · 모터 · 솔레노이드 → 플라이백 다이오드 삽입
- 디커플링 누락 — IC 전원핀당 0.1 µF → 자동 삽입
- PWM / 인터럽트 불가 핀 사용, 핀 중복 할당 → 재할당 제안
- 부트 스트랩 핀 오용 — ESP32 GPIO0 / 2 / 12 / 15 → 경고 + 재할당
- 역전압 보호 · ESD 보호 없음 → 다이오드 / P-MOSFET, TVS 제안
결과는 이렇게 보입니다
✅ P1 스키마 통과
✅ P2 카탈로그 접지 통과 (부품 14개 전부 카탈로그 실존)
✅ P3 골든 패턴 통과 — ESP32-WROOM-32 EN 풀업·디커플링 (Espressif HDG §2.1)
⚠️ P4 ERC 경고 1 — HC-SR04 ECHO 5V→3.3V: 분압기 자동 삽입됨
✅ P5 핀 계약 통과 — 5/5 논리 핀 매핑, PWM 요구 2개 충족
✅ P6 합의 3/3 샘플 토폴로지 일치
✅ P7 KiCad DRC 0건 (unconnected 0)
✅ P8 시뮬 회귀 6핀 비교 일치어떤 검사가, 어떤 근거로, 무엇을 고쳤는지를 전부 보여줍니다. 교육 제품이기 때문입니다. 그리고 이 모든 초록 아래에는 언제나 "⚠️ 실물 검증 미완료" 가 남아 있습니다.