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 本追加: つまみでサーボを回す・暗くなると点く常夜灯・人感センサーのランプ・駐車センサー・ボタンカウンター。はじめの 2 本はログイン不要です
- 回路のない文字列サンプル 14 本は、はしごの最後に移してたたみました — 一覧には残っています
- パーサー: ライブラリを使わず TRIG_PIN・ECHO_PIN を直接書いた超音波センサーが部品 2 つに分かれていた問題。そのため仮想デバイスがつながらず、距離がずっと 0 でした
- サンプル uno_bme280_oled: setTextColor がなく画面に何も描かれていませんでした。実機でも同じく真っ白になるコードでした
- PIR センサーに仮想デバイスとスライダーを追加
- ヒーローを基板の写真から L1 ブレッドボードへ — サイトで最も大きな画像が、いま開いていない段階を見せていました。背景のない画像なので、四角の中ではなくページの紙の上に直に置かれます
- プレイグラウンドの「次の段階」が、基板の段階が閉じていても Gerber を約束していました。いまは検証までを約束し、基板ファイルは一覧に残したうえで、まだ開いていないと書きます
- ホームのデモの最後の 2 段階に「準備中」を表示。本文だけがそう言っていて、カードは開いているように見えていました
- プロジェクトの段のサンプル 5 本をログインなしで開きました — 13 本中 11 本が鍵付きでした
- ホーム: 電気検証 8 段階の表をたたみました(リファレンス表がランディングの真ん中で 500px)
- サンプル uno_temp_relay も setTextColor がなく OLED が空でした
- リモコンのサンプルは一度も動いたことがありませんでした。IRremote 4.7.1 では旧 API が警告を出すだけの殻で、コンパイルは通り、デコードはゼロでした。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 ループの範囲とピン配列を個々のピンに展開し、名前もライブラリもないピンは使われ方(analogRead → ポット、digitalRead → ボタン、digitalWrite → LED)から部品を推定 — 基板だけだった 8 例が埋まった
- L1 ブレッドボード: LED ごとに 330 Ω 直列抵抗を自動挿入、5V・GND は 2 本のレールから取る配線に — 39 例中 25 例が交差 0
- L2/L3 展開: `pinMode(INPUT)` で読むボタンはカタログのプルアップではなくプルダウン + VCC 接点で作る(押すと HIGH のスケッチが基板で反転していた問題)。ゴールデンパターンも両方式を認める
- L1 ブレッドボード: 部品の並び順も交差最小化の探索に含める — 部品のある 39 例中 28 例が交差 0
サイトのリデザイン
サイトドキュメント
「Bench paper & copper」デザインシステムと新ページ
ダークガラス調をやめ、紙の上のインクと銅配線に変えました。検証状態はソルダーマスクの緑、自動挿入部品は銅色で一貫して表示します。
- ランディングページを全面書き直し — 図面形式の基板イラスト、4 レベルレール、三重検証ゲート、8 ステップ表、ライブサンプルカード
- 新ページ: About · 教育機関向け · 変更履歴 · プレイグラウンド · サンプル · カタログ · ガイド · 料金 · 法的表記
- 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 1 つが発注可能な 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 名。