개발 중정식 출시 전입니다. 기능과 데이터가 예고 없이 바뀔 수 있습니다.

CHANGELOG

변경 로그

가장 큰 리스크부터 먼저 확인했습니다. 그래서 UI 보다 파이프라인이 먼저였습니다. 공개 개발 중이며, 실측 수치는 그대로 적습니다.

Phase 0 · PoCPoC-A · PoC-B 완료
시뮬레이터
시뮬레이터사이트

화면 달린 부품들이 드디어 움직입니다

서보·NeoPixel·LCD·7세그먼트·OLED 는 그동안 정확히 그려지기만 하고 한 번도 움직이지 않았습니다. 핀 타이밍과 I²C 스트림에서 프로토콜을 읽어내, 스케치가 보낸 것을 그대로 보여 줍니다.

  • 서보는 펄스 폭에서 각도를, NeoPixel 은 WS2812 비트 타이밍에서 색을, LCD 는 PCF8574 니블에서 글자를, TM1637 은 2선 프레임에서 숫자를, OLED 는 SSD1306 프레임버퍼에서 화면을 읽어 그립니다
  • LED 는 analogWrite 의 듀티를 밝기로 — 무료로 열려 있는 'LED 밝기 서서히 바꾸기' 가 깜빡임이 아니라 실제로 밝아졌다 어두워집니다
  • 시뮬레이터는 브레드보드가 부품을 다 연결한 뒤에 출발합니다. setup() 에서 한 번만 쓰는 화면(카운터의 0000, 시계의 시각)을 더는 놓치지 않습니다
  • 예제 5개 추가: 노브로 서보 돌리기 · 어두워지면 켜지는 무드등 · 움직임 감지 램프 · 주차 보조 센서 · 버튼 카운터. 앞의 둘은 로그인 없이 쓸 수 있습니다
  • 회로가 없는 문자열 예제 14개는 사다리 끝으로 옮기고 접어 두었습니다 — 목록에는 그대로 있습니다
  • 파서: 라이브러리 없이 TRIG_PIN·ECHO_PIN 을 직접 쓰는 초음파 센서가 부품 두 개로 쪼개지던 문제. 그래서 센서에 아무것도 연결되지 않아 거리가 계속 0 이었습니다
  • 예제 uno_bme280_oled: setTextColor 가 없어 화면에 아무것도 그려지지 않았습니다. 실제 하드웨어에서도 똑같이 빈 화면이 나오는 코드였습니다
  • PIR 센서에 가상 장치와 슬라이더 추가
  • 히어로를 기판 사진에서 L1 브레드보드로 — 사이트에서 가장 큰 그림이 지금 열려 있지 않은 단계를 보여 주고 있었습니다. 배경이 없는 그림이라 사각형 안이 아니라 페이지 종이 위에 그대로 앉습니다
  • 플레이그라운드의 '다음 단계' 가 기판 단계가 닫혀 있어도 Gerber 를 약속하고 있었습니다. 이제 검증까지만 약속하고, 기판 파일은 목록에 남되 아직 열지 않았다고 적습니다
  • 홈 데모의 마지막 두 단계에 '준비 중' 표시. 문단만 그렇게 말하고 카드는 열린 것처럼 보였습니다
  • 프로젝트 단의 예제 5개를 로그인 없이 열었습니다 — 자물쇠가 13개 중 11개였습니다
  • 홈: 전기 검증 8단계 표를 접었습니다 (레퍼런스 표가 랜딩 한가운데에서 500px)
  • 예제 uno_temp_relay 도 setTextColor 가 없어 OLED 가 비어 있었습니다
  • 리모컨 예제가 한 번도 동작한 적이 없었습니다. IRremote 4.7.1 에서 구 API 는 경고문만 찍는 껍데기라, 컴파일은 되고 디코딩은 0 이었습니다. 4.x API 로 다시 쓰고, 브레드보드에 리모컨을 놓아 버튼을 누르면 진짜 NEC 프레임이 수신기 핀으로 갑니다
  • SD 로거 예제도 마찬가지였습니다. MPU-6050 드라이버가 리셋 비트가 내려가길 기다리며 setup() 에서 무한 루프를 돌아, 시뮬레이터는 멀쩡히 도는데 화면엔 아무 일도 없었습니다
  • FAT16 볼륨이 올라간 가상 microSD 카드. SD.begin() 이 성공하고 motion.csv 가 실제로 자랍니다
  • 백엔드 테스트가 이름이 _test 로 끝나지 않는 데이터베이스에서는 이유를 적고 거부합니다 — 개발 DB 에 조용히 테이블을 만들던 문제
  • 기획 문서(00_concept.md)가 9월에 잘라낸 발주·교육 기관 두 다리를 아직 서술하고 있었습니다
범위 정리
사이트문서

배우고 만드는 것만 남겼습니다

발주 · 교육 기관 · 계약에 관한 페이지와 문구를 사이트에서 뺐습니다. ibouPCB 는 스케치를 검증하고 기판 파일을 만드는 데서 끝납니다.

  • 교육 기관용 페이지 · Education 요금제 · 학급 운영 가이드 제거
  • 프로젝트의 '발주 준비' 페이지를 '산출물' 로 — 제조사 링크 없이 파일 목록과 확인 체크리스트만
  • 발주 가이드 제거. 홈 · 가격 · 소개 · 약관 · 개인정보처리방침의 발주 · 계약 문구 정리
  • 메인페이지: 라이트 모드 카드 테두리 대비, 섹션 간격 스케일, 예제 카드를 커리큘럼 단계별로
  • L1 브레드보드: LED 같은 2핀 부품은 다리가 보드를 향하도록 돌리고, 옆·아래에 핀이 있는 부품은 선이 몸통을 지나지 않고 옆으로 돌아 들어가게 — 48개 예제 전수 확인
  • 버튼 예제의 빠진 회로: 스케치의 pinMode 에 따라 풀업이면 반대 다리를 GND 로, 아니면 5V 와 10 kΩ 풀다운 저항을 자동 삽입하고 이유를 캡션에
  • 파서: for 루프 범위와 핀 배열(`int ledPins[] = {…}`)을 핀으로 펼치고, 이름·라이브러리가 없는 핀은 쓰임새(analogRead → 팟, digitalRead → 버튼, digitalWrite → LED)로 부품을 추론 — 보드만 나오던 예제 8개가 채워짐
  • L1 브레드보드: LED 마다 330 Ω 직렬 저항 자동 삽입, 5V·GND 는 레일 두 줄에서 따오는 배선으로 — 예제 39개 중 25개가 교차 0
  • L2/L3 확장기: `pinMode(INPUT)` 으로 읽는 버튼은 카탈로그의 풀업 대신 풀다운 + VCC 접점으로 만든다 (누르면 HIGH 인 스케치가 기판에서 뒤집히던 문제). 골든 패턴도 두 방식 모두 인정
  • L1 브레드보드: 부품 행 순서까지 교차 최소화 탐색에 포함 — 부품 있는 예제 39개 중 28개가 교차 0
사이트 리디자인
사이트문서

"Bench paper & copper" 디자인 시스템과 새 페이지

다크 글래스 스타일을 버리고 종이 위 잉크와 구리 배선으로 바꿨습니다. 검증 상태는 솔더마스크 초록, 자동 삽입 부품은 구리색으로 일관되게 표시합니다.

  • 랜딩 페이지 전면 재작성 — 도면 형식 보드 일러스트, 4레벨 레일, 3중 검증 게이트, 8단계 표, 라이브 예제 카드
  • 신규 페이지: 소개 · 교육 기관용 · 변경 로그 · 플레이그라운드 · 예제 · 카탈로그 · 가이드 · 가격 · 법적 고지
  • i18n 네임스페이스 분리 (ko · ja · en), hreflang · sitemap · JSON-LD
  • 라이트/다크 모드는 CSS 토큰만으로 — 하드코딩 색상 없음
P8 · 가상 센서 · ESP32
검증시뮬레이터

핀맵 회귀 검증(P8)과 가상 센서, ESP32 서버 시뮬레이션

"코드가 그대로 돈다"를 마케팅 문구가 아니라 테스트로 만들었습니다. 같은 스케치를 pins.h 적용 상태로 타겟용 재컴파일해 변환 전/후 핀 활동을 서버가 대조합니다.

  • P8: Uno → Pico 실측 22 s, 6핀 비교. 소스에서 토글한 핀은 타겟에서도 토글해야 통과, PWM 핀은 방향만 + 경고
  • 발견: analogWrite(-508) 이 AVR 은 PWM, arduino-pico 는 0 으로 클램프 — 코어 간 차이를 경고로 보고
  • 가상 센서: DS18B20(1-Wire 슬레이브 · CRC8) · DHT22 · HC-SR04 · BME280/BMP280 · MPU6050 · DS3231. Uno 실측 22/22 정확
  • ESP32: Espressif QEMU 9.2.2 를 별도 프로세스로. DIO 플래시 빌드, MMIO 쓰기 트레이스에서 GPIO 재생. blink 6 s: GPIO2/4 각 25 에지
  • Pico: rp2040js + arduino-pico 코어. UF2 를 에뮬 플래시에 적재, USB CDC 시리얼, GPIO 30핀
카탈로그 · 코퍼스
카탈로그검증

모듈 11 → 22종, 골든 패턴 코퍼스 임포터

카탈로그는 유일한 해자입니다. 모듈마다 레퍼런스 회로와 설명을 붙였고, 실제 KiCad 프로젝트에서 패턴을 뽑는 임포터를 만들었습니다.

  • 추가 모듈: WS2812B · 부저(tone) · PIR · BME/BMP280 · MPU6050 · DS3231 · microSD SPI · TM1637 · IR VS1838B · LDR · MOSFET 부하 드라이버
  • 보드: ESP32-C3-WROOM-02 · Raspberry Pi Pico (L3 타겟) · XIAO ESP32C3
  • I²C 주소 충돌 ERC (0x68 MPU6050 + DS3231). 예제 5개 추가, 4개 타겟 전부 PASS, 테스트 20 → 96
  • 코퍼스 임포터: Olimex ESP32 4종(Apache-2.0)에서 EN 10k 풀업 · EN 1 µF · 3V3 벌크 4.7–22 µF 확인. IO0 외부 풀업은 4보드 모두 없음 → 심각도 재검토. 사람이 큐레이션해서 병합, 자동 덮어쓰기 없음
PoC-B · L0/L1
시뮬레이터인프라

브라우저 시뮬레이터(로직 게이트)와 브레드보드 뷰

서버 시뮬 비용 0. arduino-cli 가 만든 .hex 를 브라우저의 avr8js 가 실행하고, 서버는 스케치에서 기대 핀 방향을 재도출해 브라우저 증거와 대조한 뒤에만 로직 게이트를 통과시킵니다.

  • 컴파일 워커: arduino-cli + AVR · arduino-pico · arduino-esp32 코어 (GPL → 별도 이미지). blink: flash 1028 B, 2.5 s 시뮬 = 0.38 s
  • 클라이언트가 게이트를 직접 세팅하지 않음 — 증거를 올리면 서버가 판정
  • L1 브레드보드: @wokwi/elements 로 코드에서 추론한 모듈을 Uno 에 배선한 그림 자동 생성. LED·부저는 핀을 따라가고 버튼은 핀을 구동
  • PCB 2D 뷰어: KiCanvas 로 실제 .kicad_pcb 렌더. Gerber zip · BOM · CPL · KiCad · pins.h 다운로드
PoC-A · P7
EDA검증

ESP32 PoC 보드 — Freerouting 배선 완주, DRC 0

사람 손 없이 .ino 하나가 발주 가능한 Gerber 가 되는가. 8회차 만에 됐습니다.

  • ESP32 온도·릴레이 예제 32부품 / 21넷: 배치 83×46 mm, 배선 2회차에 unconnected 0, DRC 0건, Gerber 11파일 · drill · CPL
  • 1회차 DRC 24건 → 부품값 ASCII 정규화, 코트야드 인식 first-fit 배치기
  • 라우팅 중 JVM SIGKILL 2회 → 원인은 VM 메모리(global_oom). Docker 메모리 16 → 30 GB
  • 안테나 키프아웃이 보드 안쪽 면적을 잡아먹음 → 모듈 안테나 끝을 보드 가장자리에(Espressif 가이드), 키프아웃을 전 구리층 룰에어리어로 미러
  • 부분 배선 보드를 재내보내 이어서 배선하는 재시도 루프(최대 3회)
PoC-A · P1–P6
검증인프라

변환 파이프라인 — 파서 · 확장기 · AI 제안기 · 검증기 P1–P6

AI 는 제안만, 결정론적 검증기가 판정한다는 정책을 코드로 옮겼습니다. 검증기에는 AI 가 없습니다.

  • .ino 파서: #define · pinMode · Wire/SPI · 라이브러리 생성자 · 식별자 힌트
  • 결정론적 확장기: 모듈 치환 · 전원 트리 · 레퍼런스 회로 · 분압/레벨시프트 · 핀 배정
  • 검증기 P1–P6: 스키마 · 카탈로그 접지 · 골든 패턴 · ERC · 핀 계약 · 합의 — KiCad 없이 단위 테스트
  • AI 제안기: JSON 스키마 강제 · 카탈로그 allow-list · N샘플. 키가 없으면 폴백
  • 산출물: netlist.json · pins.h · bom.csv · explain.json (자동 삽입 부품마다 "왜?")
  • 인프라: Docker Compose dev/prod, nginx, GHCR 빌드 → SSH 배포. SKiDL/atopile 대신 자체 JSON 넷리스트 + pcbnew 직접 생성으로 결정
다음: P8 회귀 확대, 카탈로그 확장, Phase 1 MVP — Arduino Uno/Nano · L0–L2 · 외부 사용자 10명.
플레이그라운드 열기소개 보기