diff --git a/README.md b/README.md index ebd95dd..ab7c3d0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Wafer Position Monitor (demo) -PySide6 desktop demo: load NanoBerry edge CSVs from `MASTER_SD/`, fit a wafer circle, show **X / Y / theta** offset and **sigma** vs a calibration baseline. No live camera required. +PySide6 desktop demo: load NanoBerry edge CSVs from `MASTER_SD/`, fit a wafer circle, show **X / Y / theta** offset and **sigma** vs a calibration baseline. No live camera integrated yet. **Stack:** Python 3.11+, PySide6, NumPy. @@ -14,11 +14,11 @@ wafer-user # or: python src/wafer_edge/App.py Click **Read Wafer** to load the demo CSVs. Tests: `python -m pytest tests/` (UI smoke needs a display). -## Demo data +## Data -CSV files in `[MASTER_SD/](MASTER_SD/)`. Names: `{S|R}{1|2}{seq}P0.CSV` — local/remote board, SPI camera, 4-digit sequence (e.g. `S10540P0.CSV`). +**Real data** — `[MASTER_SD/](MASTER_SD/)`: CSV files from actual NanoBerry camera captures. Names: `{S|R}{1|2}{seq}P0.CSV` — local/remote board, SPI camera, 4-digit sequence (e.g. `S10540P0.CSV`). -Default cameras: `CsvSource.DEMO_CAMERA_PATHS`. Change that dict or use `parse_csv_filename()` for other captures. +**Fabricated data** — `[DATA/0610/](DATA/)`: Generated test data used by `CsvSource.DEMO_CAMERA_PATHS` (the default demo source). Change that dict or use `parse_csv_filename()` for other captures. ## Calibration @@ -36,4 +36,24 @@ First run creates `baseline.json` (gitignored). Key fields: `center_mm`, `radius **Pipeline:** `DEMO_CAMERA_PATHS` → `load_camera_records_from_csv()` → `snapshot_from_records()` → UI. -![APP screenshot](screenshot.png) +## Alignment states + +The monitor derives one of three states from the fitted circle on every read: + +| State | Condition | Dot | +| ------------ | ------------------------------------ | -------- | +| **Ready** | offset ≤ 0.10 mm **and** σ ≤ 0.05 mm | 🟢 green | +| **Aligning** | offset ≤ 0.50 mm **and** σ ≤ 0.20 mm | 🟡 amber | +| **Fault** | offset > 0.50 mm **or** σ > 0.20 mm | 🔴 red | + +### Ready — wafer within tolerance + +![Ready state](screenshots/state_ready.png) + +### Aligning — wafer correcting, noisy cameras + +![Aligning state](screenshots/state_aligning.png) + +### Fault — wafer out of range + +![Fault state](screenshots/state_fault.png) diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 057bf6c..0000000 Binary files a/screenshot.png and /dev/null differ diff --git a/screenshots/state_aligning.png b/screenshots/state_aligning.png new file mode 100644 index 0000000..23350fb Binary files /dev/null and b/screenshots/state_aligning.png differ diff --git a/screenshots/state_fault.png b/screenshots/state_fault.png new file mode 100644 index 0000000..a6a611a Binary files /dev/null and b/screenshots/state_fault.png differ diff --git a/screenshots/state_ready.png b/screenshots/state_ready.png new file mode 100644 index 0000000..ccd0dc4 Binary files /dev/null and b/screenshots/state_ready.png differ