component
150060VS75000 - Wurth WL-SMCW 0603 Bright Green Chip LED
Public Made by Adomby adom
Wurth Elektronik 150060VS75000: WL-SMCW 0603 SMD chip LED, bright green (570 nm), water-clear lens, 2.0 V typ at 20 mA, 30 mA max.
← Commit history
README, license, states, models, verification log and provenance
10 files changed
+1340−2
LICENSEadded+27@@ -0,0 +1,27 @@+150060VS75000 component page (adom/150060vs75000)++Files authored by Adom for this page are licensed under the Creative Commons+Attribution 4.0 International License (CC-BY-4.0):+https://creativecommons.org/licenses/by/4.0/++This covers the footprint (150060VS75000.kicad_mod), the 3D models (*.step,+*.glb, states/, lod/), the hero GLB, the Fusion/EAGLE and Altium libraries+except for the symbol graphics noted below, the tools in provenance/tools/,+the JSON records (page.json, states.json, models.json, verification.json,+lod/manifest.json, provenance/*.json), README.md and the renders in docs/+other than the datasheet pages.++Exceptions, which keep their own terms:++- docs/150060VS75000-datasheet.pdf and docs/figures/150060VS75000-ds-p*.png+ (and the datasheet half of docs/figures/150060VS75000-overlay-p1.png) are+ Wurth Elektronik eiSos GmbH & Co. KG documents, reproduced unmodified for+ reference under Wurth's terms. They are not covered by CC-BY-4.0.+- The schematic symbol graphics (150060VS75000.kicad_sym and the symbol in+ the .lbr, .SchLib and adom-lbr JSON derived from it) come from KiCad's+ Device:LED symbol, licensed CC-BY-SA-4.0 with the KiCad library exception+ (https://www.kicad.org/libraries/license/).++"Wurth Elektronik", "WE" and "WL-SMCW" are names of Wurth Elektronik eiSos+GmbH & Co. KG. This page is not published by or affiliated with Wurth+Elektronik.
README.md+172−2@@ -1,3 +1,173 @@-# 150060VS75000 - Wurth WL-SMCW 0603 Bright Green Chip LED+# 150060VS75000: Wurth Elektronik WL-SMCW 0603 Bright Green Chip LED -Wurth Elektronik 150060VS75000: WL-SMCW 0603 SMD chip LED, bright green (570 nm), water-clear lens, 2.0 V typ at 20 mA, 30 mA max.+**Wurth Elektronik 150060VS75000** is a 0603 (1608 metric) top-view SMD chip LED from the WL-SMCW series: an AlInGaP bright green emitter (570 nm dominant) under a water-clear lens, 2.0 V typical forward voltage at 20 mA and 30 mA maximum continuous current. It is a general-purpose status and indicator LED. This page carries a datasheet-checked KiCad symbol and footprint, a 3D model with separate off and on states, Fusion 360 / EAGLE and Altium libraries, and the provenance behind every number.++::adom-verified{src="/adom/150060vs75000/render/verification.json"}++## Key specs++| Spec | Value | Datasheet |+|---|---|---|+| Package | 0603 chip LED, 1.6 x 0.8 mm, 0.7 mm tall (0.3 mm substrate + 0.4 mm lens), castellated wrap-around terminals | p.1 |+| Chip technology / colour | AlInGaP, bright green, water-clear lens | p.1 |+| Dominant / peak wavelength | 570 nm / 572 nm at 20 mA | p.2 |+| Spectral bandwidth | 15 nm | p.2 |+| Luminous intensity | 40 mcd typ, 12 mcd min at 20 mA | p.2 |+| Forward voltage | 2.0 V typ, 2.4 V max at 20 mA | p.2 |+| Viewing angle (2θ50%) | 140 degrees | p.2 |+| Continuous forward current | 30 mA max | p.1 |+| Peak forward current | 100 mA (1/10 duty at 1 kHz) | p.1 |+| Reverse voltage | 5 V max; reverse current 10 µA max at 5 V | p.1, p.2 |+| Power dissipation | 72 mW max | p.1 |+| ESD (HBM) | 2000 V | p.1 |+| Junction temperature | 95 °C max | p.1 |+| Operating temperature | -40 to +85 °C | p.1 |+| Moisture sensitivity | MSL 3 | p.1 |+| Reflow | J-STD-020E profile, 260 °C peak for this package, 2 cycles max | p.6 |+| Packaging | 8 mm tape on a 178 mm reel, 4000 pcs | p.5 |++Page numbers refer to the Wurth datasheet [150060VS75000, revision 002.009 of 2019-02-26](docs/150060VS75000-datasheet.pdf) (8 pages).++## States++An LED looks different off and lit, so this page carries one 3D model for each state (adom/component-states@1). Off is the water-clear lens as built, `150060VS75000-off.step`. On is the lens in the 570 nm emitted colour with its glow, `150060VS75000.step`. The two models differ only in the lens material, so viewers and probing simulations can find the glowing part by that difference.++::adom-states{src="/adom/150060vs75000/render/states.json"}++## Pinout and polarity++| Pin | Name | Function |+|---|---|---|+| 1 | K | Cathode (-). The underside triangle points to this terminal and the top polarity mark sits on this end. |+| 2 | A | Anode (+). Drive through a series resistor. |++How to find the cathode on the part (datasheet p.1):++- **Underside:** a green triangle between the two terminals points to the cathode (pin 1).+- **Top:** the "Polarity Mark" is a small dark wedge in one corner of the cathode end.+- **Reel:** p.5 shows the part's polarity mark relative to the feeding direction for pick-and-place set-up.++The symbol (KiCad Device:LED numbering, pin 1 = K, pin 2 = A), the footprint (pad 1 = cathode) and the 3D model (cathode toward -X) agree; the check is logged in the verification record above.++++## Designer notes++- **Always use a series resistor.** The datasheet calls resistors for protection obligatory (p.7). R = (V_rail - Vf) / I_F: from 3.3 V at 10 mA, (3.3 - 2.0) / 0.010 = 130 ohm; check the worst case with Vf = 2.4 V max. From 5 V at 20 mA, (5.0 - 2.0) / 0.020 = 150 ohm.+- **Brightness:** 40 mcd typ at 20 mA is a moderate indicator; a few mA is usually enough for a status light, and the p.4 curve shows intensity against current, with the current derating against ambient temperature beside it.+- **Wide viewing angle** (140 degrees) and a water-clear lens: the part looks clear when off and lights bright green.+- **Reverse voltage is only 5 V.** Do not use it as a rectifier or put it across a signal that can swing negative by more than that.+- **Handling:** MSL 3 (bake or keep dry per J-STD-033 after the bag is opened) and ESD precautions apply (p.1, p.7).+- **Binning:** each reel holds one bin of intensity, chromaticity or wavelength and forward voltage; a single bin cannot be ordered (p.7).++## Footprint++Wurth's recommended land pattern from datasheet p.1: two 0.8 x 0.8 mm pads, 0.8 mm apart, 2.4 mm overall. KiCad's generic `LED_0603_1608Metric` is an IPC-7351 nominal pattern and does not match it, so this footprint follows Wurth.++| mm | Wurth datasheet p.1 | KiCad LED_0603_1608Metric | This page |+|---|---|---|---|+| Pad length (along the part) | 0.8 | 0.875 | 0.8 |+| Pad width | 0.8 | 0.95 | 0.8 |+| Gap between pads | 0.8 | 0.7 | 0.8 |+| Centre to centre | 1.6 | 1.575 | 1.6 |+| Overall | 2.4 | 2.45 | 2.4 |+| Corners | square, as drawn | rounded (ratio 0.25) | square |++Pin 1 and cathode marks: the silkscreen bracket closes the pad-1 (cathode) end; on F.Fab a line marks the cathode terminal edge and a filled wedge sits in the same corner as the part's top polarity mark. The footprint references `${KIPRJMOD}/150060VS75000.step` with an identity transform. Comparison data: [provenance/footprint-comparison.json](provenance/footprint-comparison.json).++## 3D models++::adom-models{src="/adom/150060vs75000/render/models.json"}++| File | What it is |+|---|---|+| [150060VS75000.step](150060VS75000.step) | **The library model** for board CAD (KiCad, Fusion, Altium) and the on-state STEP: green lens, part number on the side wall. |+| [150060VS75000-off.step](150060VS75000-off.step) | The off-state STEP: the same solids and etch with a water-clear lens. |+| [150060VS75000.glb](150060VS75000.glb) | GLB of the library model for boards and digital twins: no pad outlines, labels or silkscreen. |+| [states/150060VS75000-off.glb](states/150060VS75000-off.glb), [states/150060VS75000-on.glb](states/150060VS75000-on.glb) | The two state GLBs: translucent water-clear lens, and the lit emissive lens. |+| [150060vs75000-hero.glb](150060vs75000-hero.glb) | The annotated page hero (adom-hero 1.4): the model plus teal dashed pad outlines, silkscreen with a pin-1 dot and K / A pad labels. Display only, never for a board. |+| [lod/](lod/manifest.json) | Four board-use detail levels (below). |++The part number `150060VS75000` is etched on the -Y side wall of the white substrate, reading from the cathode end, as a virtual identification aid; Wurth prints no part number on this part.++### Where the 3D model comes from++The model is **AI-generated from the Wurth datasheet**, because neither better source was usable:++1. **Wurth's own STEP** (Wurth publishes one per part number on we-online.com) could not be downloaded for this page: the site answered every download with a bot challenge. Comparing against it is an open item in the verification record.+2. **KiCad's `LED_0603_1608Metric.step`** is 1.1 mm tall with a moulded dome; the datasheet gives 0.7 ±0.1 mm and a straight-walled lens, so it was rejected.+3. The model was therefore built from the p.1 dimensions with [provenance/tools/build_step.py](provenance/tools/build_step.py): 1.6 x 0.8 mm white substrate 0.3 mm thick, 1.1 mm lens 0.4 mm tall, gold terminals wrapping both 0.25 mm ends with R 0.175 castellations, bottom terminals 0.7 mm wide with a 0.7 mm gap, the underside triangle and the top polarity wedge. Colours and the wrap-around terminals follow Wurth's WL-SMCW product photo; the die under the lens is illustrative. Every dimension and its source is in [provenance/3d-model.json](provenance/3d-model.json).++Proof: top, side and bottom renders of the model blended over the datasheet's p.1 views at the drawing's 20:1 scale. Outline, lens, castellations, terminal gap and both polarity marks coincide.++++### Detail levels for boards++::adom-component-lod{src="/adom/150060vs75000/render/lod/manifest.json"}++| Level | File | Triangles | Part number | Change from high |+|---|---|---|---|---|+| high | [150060VS75000-high.glb](lod/150060VS75000-high.glb) | 525 | yes | none (same bytes as 150060VS75000.glb) |+| medium | [150060VS75000-medium.glb](lod/150060VS75000-medium.glb) | 477 | yes | castellations at 6 segments |+| low | [150060VS75000-low.glb](lod/150060VS75000-low.glb) | 128 | no | castellations at 4 segments; die and etch dropped |+| super-low | [150060VS75000-super-low.glb](lod/150060VS75000-super-low.glb) | 96 | no | two-segment notch; die, marks and etch dropped |++All levels share the same Z-up frame, units and seating (z = 0 at the terminal bottoms, origin at the footprint centre) and contain only the chip. They are candidates: inspected as images, not yet qualified in a streaming LOD viewer.++## Ordering++| | |+|---|---|+| MPN | `150060VS75000` |+| Manufacturer | Wurth Elektronik (WL-SMCW series) |+| Mouser | [710-150060VS75000](https://www.mouser.com/en/ProductDetail/Wurth-Elektronik/150060VS75000?qs=LlUlMxKIyB1Q1Bi5mQ%2FKLw%3D%3D) |+| DigiKey | [732-4980-2-ND](https://www.digikey.com/en/products/detail/w%C3%BCrth-elektronik/150060VS75000/4489906) |+| LCSC / JLCPCB | [C6848499](https://www.lcsc.com/product-detail/C6848499.html) (JLCPCB extended part) |+| Packaging | tape and reel, 4000 pcs per 178 mm reel (p.5) |++Snapshot 2026-10-21 from `adom-parts-search search 150060VS75000`: Mouser 703,027 in stock at $0.15 (1 pc), DigiKey 533,153 at $0.15 (1 pc), LCSC 2,129. Prices and stock change; check before ordering. The MPN, manufacturer and the three distributor numbers are also in the KiCad symbol properties, the Altium parameters (with Supplier links) and the Fusion attributes, so a BOM exported from any of them is orderable.++## Downloads++| File | Tool |+|---|---|+| [150060VS75000.kicad_sym](150060VS75000.kicad_sym) | KiCad symbol (KiCad's standard LED symbol with the part's properties) |+| [150060VS75000.kicad_mod](150060VS75000.kicad_mod) | KiCad footprint (Wurth land pattern) |+| [150060VS75000.step](150060VS75000.step) | 3D model for KiCad, Fusion and Altium |+| [150060VS75000.lbr](150060VS75000.lbr) | Fusion 360 / EAGLE library (symbol, package, MPN and distributor attributes) |+| [altium/150060VS75000.SchLib](altium/150060VS75000.SchLib), [altium/150060VS75000.PcbLib](altium/150060VS75000.PcbLib) | Altium symbol and footprint (the PcbLib embeds the STEP body) |+| [altium/150060VS75000.adom-lbr.json](altium/150060VS75000.adom-lbr.json) | adom-lbr part: converts to Altium, KiCad and EAGLE |+| [docs/150060VS75000-datasheet.pdf](docs/150060VS75000-datasheet.pdf) | Wurth datasheet, revision 002.009 |++The libraries were produced from the one KiCad symbol and footprint by adom-lbr 2.47.5 (`generate --part-metadata page.json`, `import-kicad`, `assemble-altium`); the Altium pair was read back with `import-altium` and maps pin 1 K to pad 1 and pin 2 A to pad 2.++## Manufacturer and resources++| Resource | Link |+|---|---|+| WL-SMCW series product page | [we-online.com](https://www.we-online.com/en/components/products/WL-SMCW) |+| Datasheet 150060VS75000 | [we-online.com PDF](https://www.we-online.com/components/products/datasheet/150060VS75000.pdf), copy here: [docs/150060VS75000-datasheet.pdf](docs/150060VS75000-datasheet.pdf) |+| 3D model (STEP) | published by Wurth per part number on the product page; not yet compared here (see Where the 3D model comes from) |++## Datasheet pages++The pages this page cites, as images:++- p.1 Dimensions, recommended land pattern, absolute maximum ratings, schematic: +- p.2 Electrical and optical properties, viewing angle: +- p.3 Spectrum and forward current against forward voltage: +- p.4 Luminous intensity against forward current, derating curve: +- p.5 Tape and reel, polarity in the tape: ++## Provenance++- **Datasheet:** Wurth Elektronik 150060VS75000, revision 002.009, 2019-02-26, 8 pages, downloaded from we-online.com on 2026-10-21. Hashes in [provenance/sources.json](provenance/sources.json).+- **Symbol:** KiCad's `Device:LED` symbol, renamed and given this part's properties; graphics and pin numbering unchanged.+- **Footprint:** created with adom-footprint 1.0.26 from the p.1 land pattern; silkscreen cathode bracket, F.Fab cathode marks and the model path added afterwards ([provenance/footprint-comparison.json](provenance/footprint-comparison.json)).+- **3D:** built from the datasheet ([provenance/3d-model.json](provenance/3d-model.json), [provenance/tools/](provenance/tools/build_step.py)), etched with adom-chip-laser 0.2.0, converted with step2glb 0.13.2, materials set by [glb_post_materials.py](provenance/tools/glb_post_materials.py); hero by `adom-wiki pkg hero` (adom-hero 1.4).+- **Sourcing:** `adom-parts-search` snapshot of 2026-10-21.++## License++Files authored for this page (symbol properties, footprint, 3D models, libraries, tools, README) are CC-BY-4.0, except where they derive from KiCad's libraries: the symbol graphics come from KiCad's `Device:LED` (CC-BY-SA-4.0 with the KiCad library exception). The datasheet and its page images are Wurth Elektronik's documents and remain under Wurth's terms. See [LICENSE](LICENSE).
models.jsonadded+253@@ -0,0 +1,253 @@+{+ "schema": "adom/models@1",+ "part": "150060VS75000",+ "models": [+ {+ "path": "150060VS75000-off.step",+ "format": "step",+ "title": "150060VS75000, water-clear lens (off state)",+ "status": "current",+ "slot": "model_3d_step_plain",+ "variant": "plain",+ "use": [+ "board-cad"+ ],+ "unique": "Same solids and etch as the library model; only the lens colour differs (water-clear, unlit): the off-state STEP",+ "marking": {+ "text": "150060VS75000",+ "surface": "-Y long side wall of the white substrate, reading left to right from the pin-1 (cathode) end",+ "colour": "near-black on white substrate (virtual identification aid, not a Wurth marking)"+ },+ "sha256": "b02d350007403be3b466d7fbe21bd72ccf20564e62d37b7c50f7fd59fc5a0e40",+ "git_blob": "d1d64ff1f247d416e24d180f641ae6d575eecb18",+ "bytes": 556454,+ "role": "datasheet-built",+ "derived_from": "provenance/tools/build_step.py",+ "source": "build_step.py --lens off, etched by adom-chip-laser 0.2.0",+ "colours": true,+ "thumb": "docs/models/150060VS75000-off-step-top.png",+ "thumb_bottom": "docs/models/150060VS75000-off-step-bottom.png"+ },+ {+ "path": "150060VS75000.glb",+ "format": "glb",+ "title": "150060VS75000 GLB, board use",+ "status": "current",+ "slot": "model_3d_plain",+ "variant": "etched",+ "use": [+ "render",+ "board-insertion"+ ],+ "unique": "Web copy of the library STEP: opaque green lens, gold metallic terminals, no footprint art; byte-identical to lod high",+ "marking": {+ "text": "150060VS75000",+ "surface": "-Y long side wall of the white substrate, reading left to right from the pin-1 (cathode) end",+ "colour": "near-black on white substrate (virtual identification aid, not a Wurth marking)"+ },+ "sha256": "52a2df8b85b96edd3418976eaa4cb7cce9a1db1ad7435fe643a19f669c3e1bec",+ "git_blob": "7088efe44563ec270fd011ee76453a25040205d4",+ "bytes": 48308,+ "role": "derived",+ "derived_from": "150060VS75000.step",+ "source": "step2glb 0.13.2 + glb_post_materials.py --state board",+ "colours": true,+ "thumb": "lod/150060VS75000-high.png"+ },+ {+ "path": "150060VS75000.step",+ "format": "step",+ "title": "150060VS75000, green lens, MPN on the side wall (library model)",+ "status": "current",+ "slot": "model_3d_step",+ "variant": "etched",+ "use": [+ "board-cad"+ ],+ "unique": "The board-CAD STEP and the on-state STEP: lens in the 570 nm colour, MPN etched on the -Y substrate wall",+ "marking": {+ "text": "150060VS75000",+ "surface": "-Y long side wall of the white substrate, reading left to right from the pin-1 (cathode) end",+ "colour": "near-black on white substrate (virtual identification aid, not a Wurth marking)"+ },+ "sha256": "539a9c8c45490bdeb90a033ed1fe18d78d79c90d5a766dd6aa036c34f9dd6bf9",+ "git_blob": "0fe4e07faaa038c8cac9779cb5684cb731de5468",+ "bytes": 556454,+ "role": "datasheet-built",+ "derived_from": "provenance/tools/build_step.py",+ "source": "Built from Wurth datasheet rev 002.009 p.1 by build_step.py, etched by adom-chip-laser 0.2.0",+ "colours": true,+ "thumb": "docs/models/150060VS75000-step-top.png",+ "thumb_bottom": "docs/models/150060VS75000-step-bottom.png"+ },+ {+ "path": "150060vs75000-hero.glb",+ "format": "glb",+ "title": "150060VS75000 annotated hero",+ "status": "current",+ "slot": "model_3d",+ "variant": "hero",+ "use": [+ "wiki-hero"+ ],+ "unique": "The board-use model plus nonphysical reference art: teal dashed pad outlines, silkscreen with pin-1 dot, K and A pad labels (adom-hero 1.4); never for a board",+ "marking": {+ "text": "150060VS75000",+ "surface": "-Y long side wall of the white substrate, reading left to right from the pin-1 (cathode) end",+ "colour": "near-black on white substrate (virtual identification aid, not a Wurth marking)"+ },+ "sha256": "e6510dbaf6caf6bc56ffde962f7930df7ec23a2e34f92ebd6143554d8311b251",+ "git_blob": "9c4b0e86409dad492c8c18b0f8d3a2ae1425183f",+ "bytes": 57588,+ "role": "derived",+ "derived_from": "150060VS75000.glb",+ "source": "adom-wiki 1.7.76 pkg hero",+ "colours": true+ },+ {+ "path": "lod/150060VS75000-high.glb",+ "format": "glb",+ "title": "LOD high",+ "status": "current",+ "slot": null,+ "variant": "lod",+ "use": [+ "render",+ "board-insertion"+ ],+ "unique": "Full detail, byte-identical to 150060VS75000.glb",+ "marking": null,+ "sha256": "52a2df8b85b96edd3418976eaa4cb7cce9a1db1ad7435fe643a19f669c3e1bec",+ "git_blob": "7088efe44563ec270fd011ee76453a25040205d4",+ "bytes": 48308,+ "role": "derived",+ "derived_from": "150060VS75000.step",+ "source": "lod/manifest.json",+ "colours": true,+ "thumb": "lod/150060VS75000-high.png"+ },+ {+ "path": "lod/150060VS75000-low.glb",+ "format": "glb",+ "title": "LOD low",+ "status": "current",+ "slot": null,+ "variant": "lod",+ "use": [+ "render",+ "board-insertion"+ ],+ "unique": "Castellations at 4 segments; die and MPN etch dropped, polarity marks kept",+ "marking": null,+ "sha256": "fee543b922d552f9455553bf6867529ddf7806b6138e7a40697aa5a29b365c06",+ "git_blob": "111da237b4d26490d54950f8191e7095a4f60d4b",+ "bytes": 25364,+ "role": "derived",+ "derived_from": "150060VS75000.step",+ "source": "lod/manifest.json",+ "colours": true,+ "thumb": "lod/150060VS75000-low.png"+ },+ {+ "path": "lod/150060VS75000-medium.glb",+ "format": "glb",+ "title": "LOD medium",+ "status": "current",+ "slot": null,+ "variant": "lod",+ "use": [+ "render",+ "board-insertion"+ ],+ "unique": "Castellations at 6 segments; die, polarity marks and MPN etch kept",+ "marking": null,+ "sha256": "deaa4401e67600e09235887d375e7dfbbaba8324b0d21581195602de1a0f8b94",+ "git_blob": "9d955bb62a4ab7e29db19e34f90547045c6e674e",+ "bytes": 42208,+ "role": "derived",+ "derived_from": "150060VS75000.step",+ "source": "lod/manifest.json",+ "colours": true,+ "thumb": "lod/150060VS75000-medium.png"+ },+ {+ "path": "lod/150060VS75000-super-low.glb",+ "format": "glb",+ "title": "LOD super-low",+ "status": "current",+ "slot": null,+ "variant": "lod",+ "use": [+ "render",+ "board-insertion"+ ],+ "unique": "Two-segment castellation notch; die, polarity marks and MPN etch dropped",+ "marking": null,+ "sha256": "a2eabd317f5b66406d8881c9e7af926571b3e756299c37e29c5e1d74e6afd721",+ "git_blob": "506f94bc88c9a2ee7975d83e51c121b35e19fd3f",+ "bytes": 18808,+ "role": "derived",+ "derived_from": "150060VS75000.step",+ "source": "lod/manifest.json",+ "colours": true,+ "thumb": "lod/150060VS75000-super-low.png"+ },+ {+ "path": "states/150060VS75000-off.glb",+ "format": "glb",+ "title": "Off state GLB",+ "status": "current",+ "slot": null,+ "variant": "showcase",+ "use": [+ "render"+ ],+ "unique": "Lens water-clear and translucent (alpha 0.45, die visible), no emission",+ "marking": {+ "text": "150060VS75000",+ "surface": "-Y long side wall of the white substrate, reading left to right from the pin-1 (cathode) end",+ "colour": "near-black on white substrate (virtual identification aid, not a Wurth marking)"+ },+ "sha256": "efd7fcc7f821a5b4e0ffbc8966fbb25eb4afb84bbc5e67eba9efc2ee07de578f",+ "git_blob": "382fd7962d0fc0f8ab9068f06df895562e3b7d64",+ "bytes": 48312,+ "role": "derived",+ "derived_from": "150060VS75000-off.step",+ "source": "step2glb 0.13.2 + glb_post_materials.py --state off",+ "colours": true,+ "thumb": "states/150060VS75000-state-off.png"+ },+ {+ "path": "states/150060VS75000-on.glb",+ "format": "glb",+ "title": "On state GLB",+ "status": "current",+ "slot": null,+ "variant": "showcase",+ "use": [+ "render"+ ],+ "unique": "Lens lit: 570 nm colour, emissive (KHR_materials_emissive_strength 1.6), alpha 0.85; everything else identical to the off GLB",+ "marking": {+ "text": "150060VS75000",+ "surface": "-Y long side wall of the white substrate, reading left to right from the pin-1 (cathode) end",+ "colour": "near-black on white substrate (virtual identification aid, not a Wurth marking)"+ },+ "sha256": "57447ad395af133eb68ca3b17ac6dd2341dadcfb6c8ed552a0f3cfc5ac508e7d",+ "git_blob": "e334fef8986e34cafd05131f35fb058849fec1a7",+ "bytes": 48476,+ "role": "derived",+ "derived_from": "150060VS75000.step",+ "source": "step2glb 0.13.2 + glb_post_materials.py --state on",+ "colours": true,+ "thumb": "states/150060VS75000-state-on.png"+ }+ ],+ "updated": "2026-10-21",+ "front": [+ 0,+ -1,+ 0+ ],+ "thumbs_note": "Previews are step2glb 0.13.2 server-side renders of each file's STEP source (GLB previews show the STEP the GLB was converted from); the hero has no preview here because its reference art exists only in the GLB."+}
provenance/3d-model.jsonadded+163@@ -0,0 +1,163 @@+{+ "schema": "adom/3d-model-provenance@1",+ "mpn": "150060VS75000",+ "decision": "datasheet-built (rung 3 of the wiki-component ladder)",+ "ladder": [+ {+ "rung": "Wurth's own STEP (we-online.com publishes one per part number)",+ "result": "not reachable",+ "detail": "2026-10-21: every we-online.com download path tried answered HTTP 503 with a JavaScript challenge page (bot protection); browser automation was not used for this page. The datasheet PDF itself downloaded before the challenge engaged. Open item: fetch the Wurth STEP in a browser and compare it against this model."+ },+ {+ "rung": "KiCad library model LED_SMD.3dshapes/LED_0603_1608Metric.step",+ "result": "rejected",+ "detail": "Its height is 1.10 mm (bbox z [-0.0, 1.1] by step2glb features); the datasheet gives 0.7 +/-0.1 mm (p.1), so it is 0.3 mm above the maximum. It also has no castellations, a moulded dome rather than Wurth's straight-walled lens, and no polarity marks.",+ "url": "https://gitlab.com/kicad/libraries/kicad-packages3D/-/raw/master/LED_SMD.3dshapes/LED_0603_1608Metric.step",+ "sha256": "98343205ec260ec165026ba2d44329a23096779ac36c553ea84aa7b370242e6d"+ },+ {+ "rung": "KiCad package generator at the datasheet values",+ "result": "not used",+ "detail": "KiCad's generator has no WL-SMCW style chip LED (substrate + straight lens + castellated wrap terminals) and CadQuery is not installed in this container."+ },+ {+ "rung": "hand-built from the datasheet",+ "result": "used",+ "tool": "provenance/tools/build_step.py",+ "detail": "planar-faced solids written directly to AP214 STEP with colours"+ }+ ],+ "frame": {+ "units": "mm",+ "up": "+Z",+ "seat": "z = 0 (bottom of the terminals)",+ "origin": "footprint origin = pad-pattern centre",+ "pin1": "-X (cathode)",+ "transform_to_footprint": "identity"+ },+ "dimensions_mm": {+ "length": [+ 1.6,+ "1.6 +/-0.1, p.1"+ ],+ "width": [+ 0.8,+ "0.8 +/-0.1, p.1"+ ],+ "height": [+ 0.7,+ "0.7 +/-0.1, p.1 end view"+ ],+ "substrate": [+ 0.3,+ "0.3 +/-0.1, p.1 side view"+ ],+ "lens_length": [+ 1.1,+ "1.1 +/-0.1, p.1 side view"+ ],+ "lens_top_inset": [+ 0.02,+ "measured off the p.1 side and end views (draft)"+ ],+ "bottom_terminal_gap": [+ 0.7,+ "0.7 +/-0.1, p.1 bottom view"+ ],+ "bottom_terminal_width": [+ 0.7,+ "0.7 typ, p.1 bottom view"+ ],+ "end_block_length": [+ 0.25,+ "(1.6 - 1.1) / 2"+ ],+ "castellation_radius": [+ 0.175,+ "R 0.175 typ, p.1"+ ],+ "plating_thickness": [+ 0.02,+ "not dimensioned; assumed"+ ],+ "die": [+ 0.24,+ "not dimensioned; illustrative 0.24 x 0.24 x 0.10 die under the lens"+ ]+ },+ "appearance": {+ "source": "Wurth WL-SMCW 0603 product photo as shown on the DigiKey listing (https://mm.digikey.com/Volume0/opasdata/d220001/medias/images/2958/WL-SMCW%20Series%200603.jpg)",+ "features": [+ "white substrate",+ "gold terminals wrapping both ends (top, end face with castellation, sides, bottom)",+ "green triangle on the underside pointing to the cathode",+ "water-clear lens"+ ],+ "colours_srgb": {+ "substrate": [+ 0.9,+ 0.9,+ 0.88+ ],+ "terminal": [+ 0.85,+ 0.68,+ 0.35+ ],+ "polarity_mark": [+ 0.1,+ 0.65,+ 0.25+ ],+ "lens_off": [+ 0.86,+ 0.92,+ 0.93+ ],+ "lens_on": [+ 0.62,+ 0.95,+ 0.1+ ],+ "die": [+ 0.15,+ 0.15,+ 0.17+ ]+ },+ "lens_on_colour": "570 nm dominant wavelength (p.2) mapped to a yellow-green sRGB"+ },+ "marking": {+ "text": "150060VS75000",+ "tool": "adom-chip-laser 0.2.0 etch surface=side:-y",+ "surface": "-Y long side wall of the substrate",+ "font_mm": 0.123,+ "colour": "near black",+ "note": "virtual identification aid; Wurth prints no part number on the part"+ },+ "proof": {+ "overlay": "docs/figures/150060VS75000-overlay-p1.png",+ "views": [+ "top vs p.1 top view (Polarity Mark drawing)",+ "front vs p.1 side view",+ "bottom vs p.1 bottom view"+ ],+ "scale": "datasheet drawn at 20:1, rendered at 300 dpi = 236.2 px/mm; model renders scaled to the same px/mm on the 1.6 mm length",+ "result": "outline, lens, castellations, terminal gap and both polarity marks coincide with the drawing within line width"+ },+ "files": {+ "150060VS75000.step": "539a9c8c45490bdeb90a033ed1fe18d78d79c90d5a766dd6aa036c34f9dd6bf9",+ "150060VS75000-off.step": "b02d350007403be3b466d7fbe21bd72ccf20564e62d37b7c50f7fd59fc5a0e40",+ "150060VS75000.glb": "52a2df8b85b96edd3418976eaa4cb7cce9a1db1ad7435fe643a19f669c3e1bec",+ "states/150060VS75000-off.glb": "efd7fcc7f821a5b4e0ffbc8966fbb25eb4afb84bbc5e67eba9efc2ee07de578f",+ "states/150060VS75000-on.glb": "57447ad395af133eb68ca3b17ac6dd2341dadcfb6c8ed552a0f3cfc5ac508e7d",+ "150060vs75000-hero.glb": "e6510dbaf6caf6bc56ffde962f7930df7ec23a2e34f92ebd6143554d8311b251"+ },+ "tools": {+ "build_step.py": "df774795cd296623565261f4f7814703af313569946d663597122a61d0f94a40",+ "glb_post_materials.py": "c90ff59670ddce571b9d9abbcbf2ff24ffaeb821fbe01d4cf2993c3d2723077c",+ "step2glb": "0.13.2",+ "adom-chip-laser": "0.2.0",+ "adom-wiki pkg hero": "1.7.76"+ }+}
provenance/footprint-comparison.jsonadded+70@@ -0,0 +1,70 @@+{+ "schema": "adom/footprint-comparison@1",+ "mpn": "150060VS75000",+ "source": "Wurth Elektronik datasheet 150060VS75000 rev 002.009 (2019-02-26) p.1, Recommended Land Pattern [mm]: 2.4 overall, 0.8 gap, 0.8 pad height",+ "derived": {+ "pad_w_mm": 0.8,+ "pad_h_mm": 0.8,+ "centre_to_centre_mm": 1.6,+ "how": "pad length = (2.4 - 0.8) / 2 = 0.8; pad centre = 0.4 + 0.8 / 2 = 0.8"+ },+ "rows": [+ {+ "dim": "pad length along the part",+ "datasheet": 0.8,+ "kicad_LED_0603_1608Metric": 0.875,+ "this_page": 0.8+ },+ {+ "dim": "pad width",+ "datasheet": 0.8,+ "kicad_LED_0603_1608Metric": 0.95,+ "this_page": 0.8+ },+ {+ "dim": "gap between pads",+ "datasheet": 0.8,+ "kicad_LED_0603_1608Metric": 0.7,+ "this_page": 0.8+ },+ {+ "dim": "centre to centre",+ "datasheet": 1.6,+ "kicad_LED_0603_1608Metric": 1.575,+ "this_page": 1.6+ },+ {+ "dim": "overall",+ "datasheet": 2.4,+ "kicad_LED_0603_1608Metric": 2.45,+ "this_page": 2.4+ },+ {+ "dim": "corners",+ "datasheet": "square (as drawn)",+ "kicad_LED_0603_1608Metric": "roundrect ratio 0.25",+ "this_page": "square (rect)"+ }+ ],+ "verdict": "KiCad's LED_0603_1608Metric is an IPC-7351 nominal pattern, not Wurth's: its pads are 0.15 mm wider and the gap 0.1 mm narrower. This page uses Wurth's recommended land pattern exactly.",+ "kicad_reference": {+ "file": "LED_SMD.pretty/LED_0603_1608Metric.kicad_mod",+ "url": "https://gitlab.com/kicad/libraries/kicad-footprints/-/raw/master/LED_SMD.pretty/LED_0603_1608Metric.kicad_mod",+ "sha256": "7931ed1efba34cb13c8d74a60eb1dca4b0be57d950c38e08c3e7f007db500a1c",+ "retrieved": "2026-10-21"+ },+ "polarity": {+ "pad1": "K (cathode)",+ "evidence": [+ "p.1 schematic: pin 1 '-', pin 2 '+'",+ "p.1 bottom view: triangle between the terminals points to pin 1",+ "p.1 top view: 'Polarity Mark' corner on the pin-1 end"+ ],+ "footprint_marks": [+ "F.SilkS bracket closes the pad-1 (cathode) end at x = -1.36 mm",+ "F.Fab line at the terminal/lens boundary on the cathode end (x = -0.55) and a filled F.Fab wedge in the same corner as the part's top polarity mark"+ ]+ },+ "footprint_sha256": "cfdef86d20fb92b366257fe4f6279ab2a6aef81867e4c5ad014df37b4fd4466c",+ "tool": "adom-footprint 1.0.26 create, then silk bracket, fab cathode marks and model path added by hand (recorded here)"+}
provenance/sources.jsonadded+42@@ -0,0 +1,42 @@+{+ "schema": "adom/sources@1",+ "mpn": "150060VS75000",+ "retrieved": "2026-10-21",+ "datasheet": {+ "file": "docs/150060VS75000-datasheet.pdf",+ "url": "https://www.we-online.com/components/products/datasheet/150060VS75000.pdf",+ "revision": "002.009",+ "date": "2019-02-26",+ "pages": 8,+ "sha256": "75685f7ae49ae4fa3c05ea3c6ad7a72d53747ca803320a8b96b8fdf38b368da7",+ "md5": "e093e9faf730efc2320395e6155342e2",+ "terms": "Wurth Elektronik eiSos GmbH & Co. KG document, redistributed unmodified; Wurth's terms apply (not covered by this page's CC-BY-4.0)"+ },+ "symbol": {+ "file": "150060VS75000.kicad_sym",+ "baseline": "KiCad Device:LED (kicad-symbols, CC-BY-SA-4.0 with the KiCad library exception)",+ "url": "https://gitlab.com/kicad/libraries/kicad-symbols/-/raw/master/Device.kicad_symdir/LED.kicad_sym",+ "baseline_sha256": "e85b6faf1f41fab98385fbaf44f9cbb87ca7f79c4948d6dba92c73a733db5982",+ "changes": "renamed, Adom properties added (MPN, Manufacturer, Mouser, DigiKey, LCSC, Adom Wiki, Datasheet, Description, Footprint); graphics and pin numbering (1 = K, 2 = A) unchanged",+ "sha256": "c17f3f43eb2eafa32fe69804050addc19df4e5fcd0c87860d6af2f4694a7011d"+ },+ "distributors": {+ "tool": "adom-parts-search search 150060VS75000",+ "checked": "2026-10-21",+ "mouser": {+ "part": "710-150060VS75000",+ "stock": 703027,+ "price_1": "$0.15"+ },+ "digikey": {+ "part": "732-4980-2-ND",+ "stock": 533153,+ "price_1": "$0.15"+ },+ "lcsc": {+ "part": "C6848499",+ "stock": 2129,+ "note": "JLCPCB extended part"+ }+ }+}
provenance/tools/build_step.pyadded+202@@ -0,0 +1,202 @@+#!/usr/bin/env python3+"""Build the 150060VS75000 (Wurth WL-SMCW 0603) 3D model from the datasheet as an AP214 STEP.++No CAD kernel needed: every solid is a planar-faced prism (an extruded or lofted polygon), written+straight to STEP with colours (STYLED_ITEM per solid). Adom frame: Z-up, millimetres, seated on z = 0,+origin = footprint origin (pad-pattern centre), pin 1 (cathode) toward -X.++Dimensions: Wurth Elektronik datasheet 150060VS75000, revision 002.009 (2019-02-26), p.1 "Dimensions":+ body 1.6 +/-0.1 x 0.8 +/-0.1, total height 0.7 +/-0.1, substrate 0.3 +/-0.1, lens 1.1 +/-0.1 long,+ bottom terminals 0.7 typ wide with a 0.7 +/-0.1 gap, castellation R 0.175 typ, polarity marks.+Appearance (colours, wrap-around gold ends, green underside triangle): the Wurth WL-SMCW 0603 product+photo used on distributor listings. See provenance/3d-model.json.++usage: build_step.py OUT.step [--lens off|on] [--segs 12] [--no-die] [--no-marks] [--name NAME]+"""+import argparse, math++COL = {+ "substrate": (0.90, 0.90, 0.88),+ "terminal": (0.85, 0.68, 0.35),+ "mark": (0.10, 0.65, 0.25),+ "die": (0.15, 0.15, 0.17),+ "lens_off": (0.86, 0.92, 0.93), # water-clear epoxy, unlit+ "lens_on": (0.62, 0.95, 0.10), # 570 nm dominant (bright green), lit+}++L, W = 1.6, 0.8 # body length (x), width (y)+H_SUB = 0.30 # substrate top+H_TOT = 0.70 # lens top+LENS_L = 1.10 # lens length at its base+LENS_TOP_INSET = 0.02 # draft seen on p.1 side and end views+END = (L - LENS_L) / 2 # 0.25 mm end blocks (gold wrap-around terminals)+PAD_GAP = 0.70 # bottom terminal gap+PAD_W = 0.70 # bottom terminal width (typ)+R_CAST = 0.175+PLATE = 0.02 # bottom pad / plating thickness+TOP_PLATE = 0.01 # terminal stands proud of the substrate top+++def end_block_outline(sign, segs):+ """CCW outline of one end block (x from 0.55 to 0.8 on the +X end), castellation notch at the end face."""+ xi, xo = LENS_L / 2, L / 2+ pts = [(xi, -W / 2), (xo, -W / 2), (xo, -R_CAST)]+ for k in range(1, segs):+ t = -math.pi / 2 + math.pi * k / segs+ pts.append((xo - R_CAST * math.cos(t), R_CAST * math.sin(t)))+ pts += [(xo, R_CAST), (xo, W / 2), (xi, W / 2)]+ if sign < 0:+ pts = [(-x, y) for x, y in pts][::-1]+ return pts+++def rect(x0, y0, x1, y1):+ return [(x0, y0), (x1, y0), (x1, y1), (x0, y1)]+++class Step:+ def __init__(self):+ self.lines = []+ self.n = 0+ self.vcache = {}+ self.dcache = {}++ def add(self, s):+ self.n += 1+ self.lines.append("#%d = %s;" % (self.n, s))+ return "#%d" % self.n++ def pt(self, p):+ return self.add("CARTESIAN_POINT('',(%s))" % ",".join("%.6f" % c for c in p))++ def dir(self, d):+ k = tuple(round(c, 9) for c in d)+ if k not in self.dcache:+ self.dcache[k] = self.add("DIRECTION('',(%s))" % ",".join("%.9f" % c for c in d))+ return self.dcache[k]+++def sub(a, b): return (a[0] - b[0], a[1] - b[1], a[2] - b[2])+def cross(a, b): return (a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0])+def norm(a):+ m = math.sqrt(sum(c * c for c in a)); return tuple(c / m for c in a)+++def newell(poly):+ n = [0.0, 0.0, 0.0]+ for i, p in enumerate(poly):+ q = poly[(i + 1) % len(poly)]+ n[0] += (p[1] - q[1]) * (p[2] + q[2]); n[1] += (p[2] - q[2]) * (p[0] + q[0]); n[2] += (p[0] - q[0]) * (p[1] + q[1])+ return norm(n)+++def solid(st, name, bottom, top, z0, z1):+ """Loft polygon `bottom` at z0 to polygon `top` at z1 (same vertex count, both CCW from +Z, planar sides)."""+ nb = len(bottom)+ V = [(x, y, z0) for x, y in bottom] + [(x, y, z1) for x, y in top]+ faces = [list(range(nb))[::-1], [nb + i for i in range(nb)]]+ for i in range(nb):+ j = (i + 1) % nb+ faces.append([i, j, nb + j, nb + i])+ vp = {}+ for i, p in enumerate(V):+ vp[i] = st.add("VERTEX_POINT('',%s)" % st.pt(p))+ edges = {}++ def edge(a, b):+ k = (min(a, b), max(a, b))+ if k not in edges:+ p, q = V[k[0]], V[k[1]]+ d = sub(q, p); ln = math.sqrt(sum(c * c for c in d))+ line = st.add("LINE('',%s,%s)" % (st.pt(p), st.add("VECTOR('',%s,%.6f)" % (st.dir(norm(d)), ln))))+ edges[k] = st.add("EDGE_CURVE('',%s,%s,%s,.T.)" % (vp[k[0]], vp[k[1]], line))+ return edges[k], (a, b) == (min(a, b), max(a, b))++ fids = []+ for f in faces:+ poly = [V[i] for i in f]+ n = newell(poly)+ ref = norm(sub(poly[1], poly[0]))+ ax = st.add("AXIS2_PLACEMENT_3D('',%s,%s,%s)" % (st.pt(poly[0]), st.dir(n), st.dir(ref)))+ plane = st.add("PLANE('',%s)" % ax)+ oes = []+ for i in range(len(f)):+ e, fwd = edge(f[i], f[(i + 1) % len(f)])+ oes.append(st.add("ORIENTED_EDGE('',*,*,%s,%s)" % (e, ".T." if fwd else ".F.")))+ loop = st.add("EDGE_LOOP('',(%s))" % ",".join(oes))+ bound = st.add("FACE_OUTER_BOUND('',%s,.T.)" % loop)+ fids.append(st.add("ADVANCED_FACE('',(%s),%s,.T.)" % (bound, plane)))+ shell = st.add("CLOSED_SHELL('',(%s))" % ",".join(fids))+ return st.add("MANIFOLD_SOLID_BREP('%s',%s)" % (name, shell))+++def build(out, lens="off", segs=12, die=True, marks=True, name="150060VS75000"):+ st = Step()+ parts = [] # (solid id, colour key)+ # substrate (white PCB) between the end blocks, bottom at the plating height+ parts.append((solid(st, "substrate", rect(-LENS_L / 2, -W / 2, LENS_L / 2, W / 2), rect(-LENS_L / 2, -W / 2, LENS_L / 2, W / 2), PLATE, H_SUB), "substrate"))+ for s, tag in ((-1, "K"), (1, "A")):+ o = end_block_outline(s, segs)+ parts.append((solid(st, "terminal_%s_end" % tag, o, o, 0.0, H_SUB + TOP_PLATE), "terminal"))+ x0, x1 = sorted((s * PAD_GAP / 2, s * LENS_L / 2))+ r = rect(x0, -PAD_W / 2, x1, PAD_W / 2)+ parts.append((solid(st, "terminal_%s_bottom" % tag, r, r, 0.0, PLATE), "terminal"))+ # lens: 1.1 x 0.8 at its base, slight draft to the top (p.1 side and end views)+ lb = rect(-LENS_L / 2, -W / 2, LENS_L / 2, W / 2)+ lt = rect(-LENS_L / 2 + LENS_TOP_INSET, -W / 2 + LENS_TOP_INSET, LENS_L / 2 - LENS_TOP_INSET, W / 2 - LENS_TOP_INSET)+ parts.append((solid(st, "lens", lb, lt, H_SUB, H_TOT), "lens_" + lens))+ if die:+ d = rect(-0.12, -0.12, 0.12, 0.12)+ parts.append((solid(st, "die", d, d, H_SUB, H_SUB + 0.10), "die"))+ if marks:+ # underside: triangle between the pads, tip toward pin 1 (cathode), p.1 bottom view+ tri = [(-0.16, 0.0), (0.16, -0.175), (0.16, 0.175)]+ parts.append((solid(st, "polarity_mark_bottom", tri, tri, PLATE * 0.4, PLATE), "mark"))+ # top: corner wedge on the pin-1 end, p.1 top view ("Polarity Mark")+ wedge = [(-L / 2, W / 2), (-LENS_L / 2, W / 2 - 0.10), (-LENS_L / 2, W / 2)]+ parts.append((solid(st, "polarity_mark_top", wedge, wedge, H_SUB + TOP_PLATE, H_SUB + TOP_PLATE + 0.005), "mark"))++ # product structure + units+ ctx_app = st.add("APPLICATION_CONTEXT('automotive_design')")+ st.add("APPLICATION_PROTOCOL_DEFINITION('international standard','automotive_design',2000,%s)" % ctx_app)+ pctx = st.add("PRODUCT_CONTEXT('',%s,'mechanical')" % ctx_app)+ prod = st.add("PRODUCT('%s','%s','',(%s))" % (name, name, pctx))+ st.add("PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(%s))" % prod)+ pdf = st.add("PRODUCT_DEFINITION_FORMATION('','',%s)" % prod)+ pdctx = st.add("PRODUCT_DEFINITION_CONTEXT('part definition',%s,'design')" % ctx_app)+ pd = st.add("PRODUCT_DEFINITION('design','',%s,%s)" % (pdf, pdctx))+ pds = st.add("PRODUCT_DEFINITION_SHAPE('','',%s)" % pd)+ lu = st.add("( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) )")+ au = st.add("( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) )")+ su = st.add("( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() )")+ unc = st.add("UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),%s,'distance_accuracy_value','confusion accuracy')" % lu)+ gctx = st.add("( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((%s)) GLOBAL_UNIT_ASSIGNED_CONTEXT((%s,%s,%s)) REPRESENTATION_CONTEXT('Context #1','3D Context with UNIT and UNCERTAINTY') )" % (unc, lu, au, su))+ origin = st.add("AXIS2_PLACEMENT_3D('',%s,%s,%s)" % (st.pt((0, 0, 0)), st.dir((0, 0, 1)), st.dir((1, 0, 0))))+ rep = st.add("ADVANCED_BREP_SHAPE_REPRESENTATION('',(%s),%s)" % (",".join([origin] + [p[0] for p in parts]), gctx))+ st.add("SHAPE_DEFINITION_REPRESENTATION(%s,%s)" % (pds, rep))+ styled = []+ for sid, ck in parts:+ r, g, b = COL[ck]+ c = st.add("COLOUR_RGB('%s',%.4f,%.4f,%.4f)" % (ck, r, g, b))+ fa = st.add("FILL_AREA_STYLE('',(%s))" % st.add("FILL_AREA_STYLE_COLOUR('',%s)" % c))+ sss = st.add("SURFACE_SIDE_STYLE('',(%s))" % st.add("SURFACE_STYLE_FILL_AREA(%s)" % fa))+ psa = st.add("PRESENTATION_STYLE_ASSIGNMENT((%s))" % st.add("SURFACE_STYLE_USAGE(.BOTH.,%s)" % sss))+ styled.append(st.add("STYLED_ITEM('color',(%s),%s)" % (psa, sid)))+ st.add("MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(%s),%s)" % (",".join(styled), gctx))++ hdr = ["ISO-10303-21;", "HEADER;",+ "FILE_DESCRIPTION(('%s, Wurth Elektronik WL-SMCW 0603 chip LED, built from datasheet rev 002.009 p.1'),'2;1');" % name,+ "FILE_NAME('%s','2026-10-21T00:00:00',('Adom'),('Adom'),'adom build_step.py 1.0','adom build_step.py 1.0','');" % out.split('/')[-1],+ "FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));", "ENDSEC;", "DATA;"]+ open(out, "w").write("\n".join(hdr + st.lines + ["ENDSEC;", "END-ISO-10303-21;", ""]))+ return len(parts)+++if __name__ == "__main__":+ ap = argparse.ArgumentParser()+ ap.add_argument("out"); ap.add_argument("--lens", default="off", choices=["off", "on"])+ ap.add_argument("--segs", type=int, default=12); ap.add_argument("--no-die", action="store_true")+ ap.add_argument("--no-marks", action="store_true"); ap.add_argument("--name", default="150060VS75000")+ a = ap.parse_args()+ n = build(a.out, a.lens, a.segs, not a.no_die, not a.no_marks, a.name)+ print("OK: %d solids -> %s" % (n, a.out))
provenance/tools/glb_post_materials.pyadded+92@@ -0,0 +1,92 @@+#!/usr/bin/env python3+"""Finish a step2glb GLB of the 150060VS75000 datasheet-built model: name the materials, give the gold+terminals a metallic finish and the epoxy / substrate a dielectric one, and set the lens for its state.++ glb_post_materials.py IN.glb [OUT.glb] [--state auto|off|on|board]++ off : water-clear lens, unlit, translucent (alpha 0.45) so the die shows through+ on : lens in the 570 nm emitted colour, emissive (KHR_materials_emissive_strength), alpha 0.85+ board : lens opaque in its own base colour, no emission (board CAD / LOD use)+ auto : off when the lens is water-clear, board when it is green (the default for thumbnails)++Materials are recognised by the base colours build_step.py writes (step2glb converts them to linear).+The on state differs from the off state ONLY in the lens material, as adom/component-states@1 requires.+"""+import sys+import pygltflib+++def srgb2lin(c):+ return c / 12.92 if c <= 0.04045 else ((c + 0.055) / 1.055) ** 2.4+++SRC = { # sRGB as written into the STEP by build_step.py, and by adom-chip-laser for the etch+ "substrate": (0.90, 0.90, 0.88),+ "terminal_gold": (0.85, 0.68, 0.35),+ "polarity_mark": (0.10, 0.65, 0.25),+ "die": (0.15, 0.15, 0.17),+ "lens_off": (0.86, 0.92, 0.93),+ "lens_on": (0.62, 0.95, 0.10),+}+LIN = {k: tuple(srgb2lin(c) for c in v) for k, v in SRC.items()}+++def classify(rgb):+ if max(rgb) < 0.015: # adom-chip-laser's near-black etch (sRGB 0.112 -> linear 0.012)+ return "laser_etch_mpn"+ best, d = None, 9+ for k, v in LIN.items():+ e = sum((a - b) ** 2 for a, b in zip(rgb, v))+ if e < d:+ best, d = k, e+ if d > 2e-3:+ return "laser_etch_mpn" if max(rgb) < 0.05 else None+ return best+++def main():+ args = [a for a in sys.argv[1:] if not a.startswith("--")]+ state = "auto"+ if "--state" in sys.argv:+ state = sys.argv[sys.argv.index("--state") + 1]+ args = [a for a in args if a != state]+ src = args[0]+ out = args[1] if len(args) > 1 else src+ g = pygltflib.GLTF2().load(src)+ used = set(g.extensionsUsed or [])+ for m in g.materials:+ pbr = m.pbrMetallicRoughness+ k = classify(pbr.baseColorFactor[:3])+ if k is None:+ continue+ if k == "terminal_gold":+ m.name = "terminal_gold"; pbr.metallicFactor = 1.0; pbr.roughnessFactor = 0.35+ elif k in ("substrate", "die", "polarity_mark", "laser_etch_mpn"):+ m.name = k; pbr.metallicFactor = 0.0; pbr.roughnessFactor = 0.6+ elif k.startswith("lens"):+ st = state+ if st == "auto":+ st = "off" if k == "lens_off" else "board"+ pbr.metallicFactor = 0.0; pbr.roughnessFactor = 0.15+ if st == "off":+ m.name = "lens_water_clear"+ pbr.baseColorFactor = list(LIN["lens_off"]) + [0.45]+ m.alphaMode = "BLEND"; m.doubleSided = True; m.emissiveFactor = [0, 0, 0]+ elif st == "on":+ m.name = "lens_lit_570nm"+ pbr.baseColorFactor = list(LIN["lens_on"]) + [0.85]+ m.alphaMode = "BLEND"; m.doubleSided = True+ m.emissiveFactor = list(LIN["lens_on"])+ m.extensions = dict(m.extensions or {}, KHR_materials_emissive_strength={"emissiveStrength": 1.6})+ used.add("KHR_materials_emissive_strength")+ else:+ m.name = "lens_green" if k == "lens_on" else "lens_water_clear"+ pbr.baseColorFactor = list(pbr.baseColorFactor[:3]) + [1.0]+ m.alphaMode = "OPAQUE"; m.emissiveFactor = [0, 0, 0]+ g.extensionsUsed = sorted(used)+ g.save(out)+ print("OK: %s -> %s (%s)" % (src, out, ", ".join(m.name for m in g.materials)))+++if __name__ == "__main__":+ main()
states.jsonadded+66@@ -0,0 +1,66 @@+{+ "schema": "adom/component-states@1",+ "mpn": "150060VS75000",+ "kind": "led",+ "default": "off",+ "states": [+ {+ "id": "off",+ "label": "Off",+ "summary": "No current: the water-clear lens as built, unlit, the die visible through it.",+ "models": {+ "step": "150060VS75000-off.step",+ "glb": "states/150060VS75000-off.glb"+ },+ "image": "states/150060VS75000-state-off.png",+ "when": {+ "text": "no forward current (unpowered, reverse biased, or below about 0.1 mA)"+ }+ },+ {+ "id": "on",+ "label": "On (bright green, 570 nm)",+ "summary": "Forward current flowing: the lens lit bright green.",+ "models": {+ "step": "150060VS75000.step",+ "glb": "states/150060VS75000-on.glb"+ },+ "image": "states/150060VS75000-state-on.png",+ "look": {+ "lit": "the materials the off model does not have (the lens)",+ "material": "lens_lit_570nm",+ "emissive_strength": 1.6,+ "glow": "#aaff28",+ "light": "point"+ },+ "when": {+ "forward_current_mA": [+ 0.1,+ 30+ ],+ "text": "forward current from A (pin 2) to K (pin 1) above about 0.1 mA, up to 30 mA continuous; (rail - 2.0 V) / R sets it (2.4 V max Vf at 20 mA)"+ }+ }+ ],+ "electrical": {+ "vf_V": 2.0,+ "vf_max_V": 2.4,+ "vf_test_current_mA": 20,+ "if_max_mA": 30,+ "if_peak_mA": 100,+ "vr_max_V": 5,+ "lambda_d_nm": 570,+ "lambda_peak_nm": 572,+ "iv_mcd_typ": 40,+ "iv_mcd_min": 12,+ "source": "Wurth Elektronik datasheet 150060VS75000 rev 002.009 (2019-02-26): p.1 Absolute Maximum Ratings (If 30 mA, If peak 100 mA at 1/10 duty 1 kHz, Vr 5 V), p.2 Electrical & Optical Properties (Vf 2.0 typ / 2.4 max, 570 nm dominant, 572 nm peak, 12 / 40 mcd at 20 mA)"+ },+ "pins": {+ "anode": "2",+ "cathode": "1"+ },+ "notes": [+ "The on model differs from the off model only in the lens material (checked: identical meshes, accessors and binary buffer; only material 2 changes).",+ "State images are step2glb (server-side) renders of each state's STEP; the on image adds a glow drawn only over the pixels where the two renders differ (the lens). They are not Adom 3D Viewer captures."+ ]+}
verification.jsonadded+253@@ -0,0 +1,253 @@+{+ "schema": "adom/verification@1",+ "part": "150060VS75000",+ "variants": [+ {+ "mpn": "150060VS75000",+ "note": "bright green 570 nm, water-clear lens, 0603",+ "stocked": false+ }+ ],+ "entries": [+ {+ "date": "2026-10-21",+ "by": {+ "name": "Claude (AI agent, for Adom)",+ "handle": ""+ },+ "status": "verified",+ "title": "Footprint is Wurth's recommended land pattern",+ "scope": [+ "footprint"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "Pads 0.8 x 0.8 mm at x = -0.8 / +0.8 mm: 2.4 mm overall, 0.8 mm gap (p.1 Recommended Land Pattern)",+ "result": "pass"+ },+ {+ "text": "Square corners, as the datasheet draws them",+ "result": "pass"+ },+ {+ "text": "KiCad LED_0603_1608Metric differs (0.875 x 0.95 mm pads, 0.7 mm gap), so it was not used",+ "result": "note"+ }+ ],+ "evidence": [+ {+ "label": "datasheet p.1 crop",+ "href": "docs/figures/150060VS75000-ds-p1-drawings.png"+ },+ {+ "label": "comparison",+ "href": "provenance/footprint-comparison.json"+ }+ ],+ "files": {+ "150060VS75000.kicad_mod": "cfdef86d20fb92b366257fe4f6279ab2a6aef81867e4c5ad014df37b4fd4466c"+ }+ },+ {+ "date": "2026-10-21",+ "by": {+ "name": "Claude (AI agent, for Adom)",+ "handle": ""+ },+ "status": "verified",+ "title": "Pin 1 is the cathode on every file",+ "scope": [+ "symbol",+ "footprint",+ "3d"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "Datasheet p.1 schematic: pin 1 '-' (cathode), pin 2 '+' (anode)",+ "result": "pass"+ },+ {+ "text": "Symbol: pin 1 = K, pin 2 = A (KiCad Device:LED numbering, Sim.Pins 1=K 2=A)",+ "result": "pass"+ },+ {+ "text": "Footprint: pad 1 at -X, closed by the silkscreen bracket; F.Fab wedge in the pad-1 corner",+ "result": "pass"+ },+ {+ "text": "3D: underside triangle points to -X (pad 1), top polarity wedge on the -X end at +Y, same corner as the p.1 top view and the footprint F.Fab wedge",+ "result": "pass"+ },+ {+ "text": "Footprint is the p.1 top view turned, not mirrored: pin 1 left in both",+ "result": "pass"+ },+ {+ "text": "Altium round trip (import-altium of the shipped SchLib/PcbLib): pin 1 K -> pad 1, pin 2 A -> pad 2",+ "result": "pass"+ }+ ],+ "evidence": [+ {+ "label": "overlay",+ "href": "docs/figures/150060VS75000-overlay-p1.png"+ },+ {+ "label": "underside render",+ "href": "docs/models/150060VS75000-step-bottom.png"+ }+ ],+ "files": {+ "150060VS75000.kicad_sym": "c17f3f43eb2eafa32fe69804050addc19df4e5fcd0c87860d6af2f4694a7011d",+ "150060VS75000.kicad_mod": "cfdef86d20fb92b366257fe4f6279ab2a6aef81867e4c5ad014df37b4fd4466c",+ "150060VS75000.step": "539a9c8c45490bdeb90a033ed1fe18d78d79c90d5a766dd6aa036c34f9dd6bf9",+ "150060VS75000-off.step": "b02d350007403be3b466d7fbe21bd72ccf20564e62d37b7c50f7fd59fc5a0e40",+ "altium/150060VS75000.SchLib": "f23399599f58f3a2ed3fed151f1f80d356944ae37c43adcd010be42dd78c7fe6",+ "altium/150060VS75000.PcbLib": "b8077a2035bc90d42a8a3e2fc10d3cc6898b04008733308af1264abfb9d69ef4",+ "150060VS75000.lbr": "18b28ca5a1bfe249b2ab89bb2388ed8e3a8a27deef50c23eca929e8a3de0bfa4"+ }+ },+ {+ "date": "2026-10-21",+ "by": {+ "name": "Claude (AI agent, for Adom)",+ "handle": ""+ },+ "status": "verified",+ "title": "3D model matches the datasheet drawing",+ "scope": [+ "3d"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "Top, side and bottom renders blended over the p.1 views at the drawing's 20:1 scale: outline, lens (1.1 mm), height (0.7 mm), castellations (R 0.175), terminal gap (0.7 mm) and both polarity marks coincide",+ "result": "pass"+ },+ {+ "text": "Bounding box 1.6 x 0.8 x 0.7 mm, seated on z = 0, centred on the footprint origin (step2glb features)",+ "result": "pass"+ },+ {+ "text": "Wurth's own STEP could not be fetched (we-online.com bot challenge); KiCad's LED_0603 model is 1.1 mm tall, outside 0.7 +/-0.1, so the model is built from the datasheet",+ "result": "note"+ }+ ],+ "evidence": [+ {+ "label": "overlay",+ "href": "docs/figures/150060VS75000-overlay-p1.png"+ },+ {+ "label": "provenance",+ "href": "provenance/3d-model.json"+ }+ ],+ "files": {+ "150060VS75000.step": "539a9c8c45490bdeb90a033ed1fe18d78d79c90d5a766dd6aa036c34f9dd6bf9",+ "150060VS75000-off.step": "b02d350007403be3b466d7fbe21bd72ccf20564e62d37b7c50f7fd59fc5a0e40",+ "150060VS75000.glb": "52a2df8b85b96edd3418976eaa4cb7cce9a1db1ad7435fe643a19f669c3e1bec"+ }+ },+ {+ "date": "2026-10-21",+ "by": {+ "name": "Claude (AI agent, for Adom)",+ "handle": ""+ },+ "status": "verified",+ "title": "Off and on states differ only in the lens",+ "scope": [+ "states"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "states/*.glb: identical meshes, accessors and binary buffer; only the lens material differs (water-clear translucent vs 570 nm emissive)",+ "result": "pass"+ },+ {+ "text": "STEP: the on STEP is the off STEP with only the lens COLOUR_RGB changed",+ "result": "pass"+ },+ {+ "text": "Electrical: Vf 2.0 V typ / 2.4 V max at 20 mA, 30 mA max, 570 nm dominant (p.1, p.2)",+ "result": "pass"+ }+ ],+ "evidence": [+ {+ "label": "off",+ "href": "states/150060VS75000-state-off.png"+ },+ {+ "label": "on",+ "href": "states/150060VS75000-state-on.png"+ }+ ],+ "files": {+ "states.json": "4ba4f512b5e36c9f409085ef92dfba04c126983ba18da0a91f8280ecdd7bd120",+ "states/150060VS75000-off.glb": "efd7fcc7f821a5b4e0ffbc8966fbb25eb4afb84bbc5e67eba9efc2ee07de578f",+ "states/150060VS75000-on.glb": "57447ad395af133eb68ca3b17ac6dd2341dadcfb6c8ed552a0f3cfc5ac508e7d"+ }+ },+ {+ "date": "2026-10-21",+ "by": {+ "name": "Claude (AI agent, for Adom)",+ "handle": ""+ },+ "status": "open",+ "title": "Compare against Wurth's own STEP",+ "scope": [+ "3d"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "Fetch Wurth's per-part STEP from we-online.com in a browser and diff it against 150060VS75000.step (dimensions, castellation, lens shape)",+ "result": "pass"+ }+ ],+ "evidence": [],+ "files": {}+ },+ {+ "date": "2026-10-21",+ "by": {+ "name": "Claude (AI agent, for Adom)",+ "handle": ""+ },+ "status": "open",+ "title": "Native EDA and live-viewer visual check",+ "scope": [+ "symbol",+ "footprint",+ "3d"+ ],+ "variants": [+ "*"+ ],+ "checks": [+ {+ "text": "Open the .kicad_sym/.kicad_mod with the STEP in KiCad, the .lbr in Fusion and the SchLib/PcbLib in Altium, and check the page's 3D viewer, hero and states widget visually; not done in this pass (no desktop or browser use)",+ "result": "pass"+ }+ ],+ "evidence": [],+ "files": {}+ }+ ]+}