RITHESH LED Display
Public Unreviewedby Rithesh03
A 300 x 70 mm PCB that spells RITHESH with 107 WS2812B RGB LEDs, controlled over Wi-Fi.
b874429
11d ago
Version 2 requirements (rev 0.2, proposal)
Status (2026-09-25): proposal only, waiting for approval. No schematic, placement or routing yet. Version 1 (the project root) is the approved prototype design and is not changed by anything in
v2/. The Version 2 LED is provisional until its own 5–10 LED WLED timing test passes. Do not order anything from this folder.
Goal
A smaller, lower-power RITHESH board with smaller LEDs. It still spells "RITHESH" clearly, keeps the same electronics and protection, and uses JLCPCB basic parts where that does not reduce reliability.
What stays the same as Version 1
- Same 5 × 7 letter patterns and 107 LEDs (see
requirements.mdin the project root for the patterns). - ESP32-C3-MINI-1-N4 running standard WLED: LED data on GPIO10, ON/OFF button on GPIO5.
- USB-C 5 V input with the same protection chain:
- SMAJ5.0A surge diode
- USBLC6-2SC6 USB ESD chip
- TPS259531 eFuse (soft start, current limit, 5.7 V clamp)
- TLV76733 3.3 V regulator. Kept (approved 2026-09-25).
- SN74AHCT1G125 5 V level shifter with the 33 Ω series resistor and 10 kΩ pull-down. Kept (approved 2026-09-25).
- RESET / ON/OFF / BOOT buttons, 10 test pads, 4 × M3 mounting holes with 7 mm keep-outs.
- 2 copper layers, 1.6 mm FR-4, 1 oz copper. All parts on the front. JLCPCB assembly.
- A 100 nF capacitor next to every LED.
Decisions (approved 2026-09-25)
| Decision | Choice |
|---|---|
| LED | XL-2020RGBC-2812B (XINGLIGHT, JLCPCB/LCSC C5349955), 2.0 × 2.0 mm. PROVISIONAL until the timing test passes |
| LED spacing | 5 mm centre to centre (V1: 7 mm) |
| Layout | Electronics at the right end of the word (V1: in a strip under the word) |
| Board size | 250 × 40 mm target (V1: 300 × 70 mm). Placement may trim a few mm; the 4 mm option is not used |
| 750 Ω eFuse current-limit resistor | Two 1.5 kΩ 1 % resistors in parallel (basic part C25867) |
| 499 Ω serial TX resistor | 470 Ω (basic part C25117) |
| Buttons | 3.9 × 3 mm basic buttons TS-1088-AR02016 (C720477) instead of 5.1 × 5.1 mm |
| Other substitutions | None that reduce reliability just to avoid an extended-part fee |
| Storage | Everything for Version 2 lives in v2/ |
| LED chain | Starts at the electronics side: V2 LED1 is where V1 LED107 was (approved 2026-09-25) |
| 5.7 V clamp vs 5.5 V LED | Accepted only as a documented prototype risk, not as a verified production condition (approved 2026-09-25 with conditions; see below) |
| Clearances (corrected 2026-09-25) | LED courtyard ≥ 1.0 mm outside each 7 mm hole keep-out (required ≥ 0.5 mm); antenna clearance 15.5 mm (required ≥ 15 mm) |
LED check (datasheet XL-2020RGBC-WS2812B, rechecked 2026-09-25)
| Item | Datasheet | WLED / board | Result |
|---|---|---|---|
| "0" bit high time | typ 0.25 µs, max 0.47 µs | about 400 ns | ✅ 70 ns margin (V1 LED: 10 ns) |
| "1" bit high time | 0.58–1.0 µs (typ 0.85) | about 800 ns | ✅ |
| "1" bit low time | typ 0.4 µs (no limits given) | about 450 ns | ✅ near typical |
| "0" bit low time | typ 1.0 µs (no limits given) | about 850 ns | ✅ near typical |
| Bit period | min 1.2 µs | 1.25 µs | ✅ |
| Reset (latch) | more than 80 µs | 300 µs | ✅ |
| Data input "high" level | at least 0.5 × VDD (2.5 V at 5 V; 2.75 V at 5.5 V) | 5 V from the level shifter | ✅ |
| Supply voltage | 3.5–5.5 V, listed in the absolute maximum table; full function 4.5–5.5 V | 5 V rail | ✅ normal use; see the 5.7 V risk below |
| LED current | constant current 5 mA per colour (typ; ±3 % between chips) | 15 mA per LED at full white | |
| Chip standby current | 0.5 mA (typ) | 54 mA for 107 LEDs | |
| Moisture sensitivity | MSL 5 | JLCPCB handles baking |
WLED's timing figures are the NeoPixelBus WS2812x values used for Version 1's check (400 / 850 ns for a "0", 800 / 450 ns for a "1"). This is a datasheet check only. The bench test below must still pass.
Rejected candidates:
| LED | Reason |
|---|---|
| WS2812C-2020 | "0" bit max 380 ns (WLED sends 400); supply max 5.3 V |
| WS2812B-Mini 3535 | "0" bit max 380 ns; supply max 5.3 V |
| SK6805-EC15 | "0" bit max 400 ns, so no margin at all |
| XL-1615RGBC-2812B | "1" bit min 900 ns; WLED sends 800 |
Timing test (required before any Version 2 order)
Same method as Version 1 (requirements.md, "Prototype plan", Step 1), but with 5–10 XL-2020RGBC-2812B LEDs:
- Setup: ESP32-C3 running standard WLED, 74AHCT1G125 level shifter powered from 5 V, 33 Ω series resistor, 100 nF per LED.
- Pass:
- 30 minutes of colours, effects and brightness changes with no wrong colours or random flashes
- correct after a power cycle and after a reset
- oscilloscope reading of the "0" high time is about 400 ns
- Pass: the LED stops being provisional. Fail: do not order. Decide between a different LED and (last resort) a custom WLED timing build.
LED footprint (verified against the datasheet, page 11)
File: v2/hardware/rithesh_v2_fp.pretty/LED_XL-2020RGBC-2812B.kicad_mod (generated by v2/hardware/tools/make_v2_footprint.py).
| Item | Value |
|---|---|
| Body | 2.0 × 2.0 × 0.65 mm |
| Pads | 4 × 0.85 × 0.75 mm (across × down), gaps 0.5 mm both ways, centres ±0.675 × ±0.625 mm (the datasheet's recommended soldering pattern) |
| Pins, seen from the top | DI top-left (pin 3), GND top-right (pin 2), VDD bottom-left (pin 4), DO bottom-right (pin 1) |
| Orientation mark | Round mark on the top at the DO / pin 1 corner. The bottom-view triangle points to the same side. Footprint has a silkscreen dot outside that corner and a chamfered fab outline |
| Courtyard | 2.70 × 2.50 mm |
⚠️ The pin order differs from the Version 1 LED (XL-5050: 1 VDD, 2 DO, 3 GND, 4 DI). The V2 schematic symbol must use the new numbering. JLCPCB's placement preview must be checked for this LED's rotation.
LED pattern and dimensions
Drawings (generated by v2/hardware/tools/make_v2_plan.py):
v2/hardware/layout-plan/led-pattern-v2.svgis 1:1 when printed at 100 %; the.pngis a preview.board-plan-v2.pngelectronics-area-v2.png
| Item | Value |
|---|---|
| Grid | 41 columns × 7 rows at 5 mm (7 letters × 5 columns + 6 empty columns between letters) |
| One letter | 22 mm wide × 32 mm tall (V1: 33 × 47 mm) |
| Space between letters | 10 mm centre to centre, 8 mm clear between LED bodies |
| Whole word | 202 × 32 mm (V1: 285 × 47 mm) |
| LED positions | column 0 at x = 9.1 mm, row 0 at y = 5.0 mm (from the board's top-left corner). Moved 0.6 mm right on 2026-09-25 for hole clearance; pattern and 5 mm spacing unchanged |
| Board | 250.0 × 40.0 mm, 2 mm corner radius |
LED chain order (changed from Version 1)
The data line starts next to the electronics, so the chain now starts at the right end:
- V2 LED1 is at the bottom-right of the last "H" (where V1's LED107 is).
- V2 LED107 is at the top-left of the "R".
- V2 LED n sits where V1 LED (108 − n) sits.
- LEDs per letter: H 1–17, S 18–32, E 33–50, H 51–67, T 68–78, I 79–89, R 90–107.
- The visible letters are identical; only the physical numbering (data order) changed.
This keeps the 5 V data line from the level shifter to LED1 only a few millimetres long, instead of a 21 cm track.
The separate Version 2 files are in v2/firmware/, generated by v2/hardware/tools/make_v2_ledmaps.py, which
checks each map two independent ways:
ledmap.json("RITHESH V2 41x7")ledmap1.json("RITHESH V2 left-to-right")led-order.csv
Version 1's firmware/ files are unchanged.
Board outline and electronics area (preliminary)
| Item | Position (mm, from the top-left corner) | Notes |
|---|---|---|
| Mounting holes (M3, 3.2 mm, non-plated) | (3.2, 3.2), (3.2, 36.8), (215.0, 3.2), (215.0, 36.8) | 7 mm keep-outs. Right-hand holes sit between the word and the electronics. Clearances in the table below |
| ESP32-C3-MINI-1 | body x 233.4–250.0, y 2.0–15.2; antenna end flush with the right edge | Top-right corner. The board corner gives free air above the antenna |
| Antenna keep-out | x 244.6–250, y 2.0–15.2 | No copper on either layer (module rule, as V1) |
| Antenna clearance zone | x 244.0–250 (6.0 mm deep), y 15.2–30.7 (15.5 mm) | Espressif Hardware Design Guidelines Fig. 21: at least 15 mm beside the antenna along the board edge, as deep as the antenna area (about 6 mm). No parts, pads, tracks, vias or copper fill on either layer. Every part stays at least 0.5 mm outside it |
| Strip above the antenna | x 244.0–250, y 0–2.0 | No copper. The board ends here, so this side has free air (more than 15 mm) |
| USB-C | centred at x = 238.0 on the bottom edge | Plug from below. 8 mm away from the antenna clearance |
| Buttons | RESET / ON/OFF / BOOT stacked at x 211.4–217.4, y 8–25 | Labels printed to the right |
| Test pads | TP6 LED_DIN beside the level shifter; 8 in two rows along the bottom (5V_IN, 5V_OUT, FLT, ILM / 3V3, GND, RX, TX); TP5 GND right of the USB-C | ≥ 3.6 mm apart |
| Level shifter | beside LED1 (x ≈ 213.6, y ≈ 29) | Short data line |
| eFuse, surge diode, USB ESD | just above the USB-C | |
| C301 220 µF (fitted) | at the eFuse output (x ≈ 227, y ≈ 22) | |
| C302 220 µF (fitted) | between "R" and "I" (x 36, y 20) | Far end of the 5 V rail |
| C303 220 µF (DNP spare) | between "T" and "H" (x 93, y 22) | Middle of the rail |
Mounting-hole clearances (corrected 2026-09-25)
The closest LED is measured for both 0° and 90° LED rotations; the worst case is shown.
| From the closest LED's … | to the 7 mm keep-out | to a 6 mm washer | to an M3 screw head (5.7 mm, largest common: button head) | to the 3.2 mm hole |
|---|---|---|---|---|
| courtyard (2.70 × 2.50 mm) | 1.08 mm | 1.58 mm | 1.73 mm | 2.98 mm |
| body (2.0 × 2.0 mm) | 1.46 mm | 1.96 mm | 2.11 mm | 3.36 mm |
| solder pads (2.2 × 2.0 mm outer edges) | 1.37 mm | 1.87 mm | 2.02 mm | 3.27 mm |
- Requirement: at least 0.5 mm, target about 1 mm. Met, with 1.08 mm at the courtyard (was 0.39 mm).
- Screw heads and washers: a 5.7 mm screw head stays 0.35 mm inside the board edge and a 6 mm washer 0.20 mm.
- Larger washers: the 7 mm keep-out also fits a DIN 125 washer (7.0 mm), but that would reach 0.3 mm past the board edge (same as V1).
Antenna clearance (corrected 2026-09-25)
- Clearance zone below the antenna: 15.5 mm long and 6.0 mm deep (requirement at least 15 mm; the extra 0.5 mm is a safety margin, not a rounding).
- Nearest part in the edge strip below the antenna: 19.05 mm from the antenna keep-out (TP5).
- Nearest part to any antenna zone boundary: 0.90 mm outside it (U1, moved 0.6 mm left).
- Above the antenna: the board corner, then free air.
- At placement: the zone becomes a KiCad rule area on both copper layers forbidding tracks, vias, pads and copper fill. The placement checker then verifies bodies, pads, tracks, vias and fills against it (as for V1).
Check results (make_v2_plan.py, 2026-09-25):
- No overlaps between parts, LEDs, hole keep-outs, the antenna zones (0.5 mm margin) or the board edge.
- The electronics area (x 211.0–250) is 60 % used by parts, keep-outs and passive-part zones; 631 mm² is free for routing.
- The plan therefore fits without crowding. Final positions come at placement.
Power
| Item | Value |
|---|---|
| One LED at full white | 3 × 5 mA + 0.5 mA = 15.5 mA |
| All 107 LEDs at full white | 1.66 A (up to about 1.71 A with the ±3 % chip spread) |
| All LEDs off (standby) | about 54 mA |
| ESP32-C3 | about 100–130 mA on average; Wi-Fi transmit peaks up to 335 mA |
| Board worst case | 1.71 + 0.335 + about 0.01 = about 2.06 A |
| Typical (colourful effects) | about 0.6–0.9 A |
| eFuse current limit | 2.49–2.90 A (see below): at least 0.43 A (17 %) above the worst case |
| Charger | USB-C 5 V ⎓ 3 A (15 W) recommended: 0.94 A above the worst case. It also works on a 1.5 A USB-C source if WLED's limit is lowered to 1,300 mA |
| USB-C connector | same part as V1. V1's accepted risk 7 (one VBUS pad pair reaches its 2.5 A rating only during the eFuse's brief 2.9 A limit) still applies; the normal maximum is now 2.06 A instead of 2.2 A |
WLED settings and what happens at full white
Checked in the WLED source code, release v16.0.1:
settings_leds.htm: the per-LED current menu has 55 / 35 / 30 / 15 mA presets plus Custom (1–255 mA).bus_manager.cpp: WLED estimates each LED as (colour sum ÷ 765) × mA-per-LED + 1 mA standby, and reservesMA_FOR_ESP= 120 mA for the ESP32.
| Setting | Value |
|---|---|
| LED current | Custom: 16 mA (15.5 mA rounded up) |
| Maximum PSU current | 2,000 mA (unchanged from V1), brightness limiter on |
At full white, WLED estimates 107 × 16 + 107 × 1 = 1,819 mA for the LEDs. Its LED budget is 2,000 − 120 = 1,880 mA. Because 1,819 is less than 1,880, WLED does not dim: full white runs at full brightness. The real LED current is about 1.66 A.
The 2,000 mA limit becomes a safety net. It only acts if a setting is wrong, for example too many LEDs entered. If the default 55 mA is left in place, WLED dims full white to about 31 % for no reason, so set 16 mA.
eFuse current limit with two 1.5 kΩ resistors (TI TPS2595 datasheet)
- Formula: I = 2000 / R + 0.04 A. It matches the datasheet table (487 Ω gives 4.17 A; 1780 Ω gives 1.17 A).
- Resistance: 1.5 kΩ ∥ 1.5 kΩ = 750 Ω. The worst case, with both resistors 1 % high or both 1 % low, is 742.5–757.5 Ω. That is the same ±1 % as a single 1 % resistor; with random tolerances it is usually tighter.
- Limit: about 2.71 A typical. With the chip's own spread (about −7 / +6 %) the range is 2.49–2.90 A, identical to Version 1. Resistor drift with temperature (±100 ppm/°C) adds less than ±0.5 %.
- Current monitor: unchanged, about 0.21 V per amp (276 µA/A × 750 Ω).
Failure modes (datasheet fault table):
| Fault | Result | Safe? |
|---|---|---|
| One resistor missing or open | R = 1.5 kΩ, so the limit falls to about 1.37 A (roughly 1.27–1.47 A). The board current-limits at high brightness, and the ILM test pad reads about 0.41 V/A instead of 0.21 V/A | ✅ fails safe (less current). The prototype full-white test and the ILM check find it |
| Both open (ILM pin open) | limit 0 A, so the eFuse shuts down | ✅ safe |
| Solder bridge across a resistor (ILM shorted to GND) | circuit breaker trips at 3 A | ✅ same as with a single resistor |
| Bridge between the two resistors | none: both sit between the same two nets | ✅ harmless |
Place the two resistors side by side with a direct ground connection. Add to the prototype test: ILM pad about 0.21 V per amp (0.41 V/A means one resistor is missing).
Voltage drop and copper
- Supply path: power enters at the right end, and the farthest LED is about 200 mm away.
- Estimate: 5 V fill about 30 mm wide (about 6.7 squares, 3.3 mΩ) plus a ground plane about 40 mm wide (about 5 squares, 2.5 mΩ). With the load spread along the word, the drop is about 1.66 A × 5.8 mΩ ÷ 2 ≈ 5 mV, plus vias and narrow sections: estimated under 30 mV (V1: 9 mV).
- To do: calculate it with
hardware/tools/power_analysis.pyafter routing. - Copper: 1 oz is enough. IPC-2221 needs ≥ 0.8 mm for 2 A at a 10 °C rise on an outer layer; plan 1.2 mm power tracks as in V1.
- 5 V feed: runs from C301 to the LED area between the ON/OFF/BOOT buttons and the level shifter.
Capacitors
| Where | Value | Change from V1 |
|---|---|---|
| Every LED | 100 nF 0402 X7R (basic C1525), within about 2 mm of its LED | same (107 + level shifter) |
| Bulk on the LED rail | 3 footprints for 220 µF 16 V (C72496): 2 fitted (C301 at the feed, C302 at the far end) and 1 spare DNP (C303, middle) | V1 had 4 footprints (2 fitted). Worst-case synchronised LED current is now 1.6 A instead of about 4.3 A, so the V1 method gives about 0.4 V of dip instead of 1.1 V |
| USB input | 4.7 µF (basic) | same; the charger still sees about 5 µF at plug-in (USB-C limit 10 µF) |
| eFuse soft start | 100 nF | same; covers all 3 bulk capacitors |
| Regulator | 10 µF in + 10 µF out (basic) | same |
Remaining risk: LED 5.5 V rating vs eFuse 5.7 V clamp
- Normal use: USB-C chargers deliver 4.75–5.5 V. The eFuse drops about 0.07 V at 2 A, so the LEDs see at most about 5.5 V, at their limit but within it.
- Fault: if a charger fails and goes above about 5.5–5.9 V, the TPS259531 clamps its output at 5.2–5.7 V (5.45 V typical). The LEDs could then see up to 0.2 V above their 5.5 V absolute maximum for as long as the fault lasts.
- Consequence: possible LED damage in that fault case. How much margin the LED really has is unknown.
- Same as V1: this is Version 1's accepted risk 2 unchanged. The XL-2020 datasheet also lists 5.5 V as an absolute maximum.
- Options if it is not acceptable: an eFuse or clamp with a lower output limit, or a series diode (costs about 0.3 V of LED supply). Neither is proposed now.
- Status (approved 2026-09-25): accepted only as a documented prototype risk, not as a verified production condition.
Conditions attached to this risk:
- Measure the actual LED supply (5 V rail at the first and last LED) during the prototype test.
- Test with at least two normal 5 V USB-C chargers.
- Confirm the LED rail never exceeds 5.5 V in normal operation (idle, full white, effects, plug-in), with the oscilloscope and a meter.
- Do not intentionally test a destructive overvoltage fault on the assembled board.
- Do not approve a larger batch until the prototype passes.
- Before completing the Version 2 schematic, briefly check whether a simple, reliable alternative can keep the LED rail at or below 5.5 V without adding significant cost, heat or extended parts. Present it for comparison only; do not change the approved design automatically.
Parts changes (JLCPCB catalogue, checked 2026-09-25)
| Current (V1) | Version 2 | JLCPCB # | Type | Stock | Price (100 pcs) | Size | Compatible? | Why |
|---|---|---|---|---|---|---|---|---|
| XL-5050RGBC-2812B (C2843785) | XL-2020RGBC-2812B | C5349955 | extended | 127,770 | $0.081 | 2.0 × 2.0 mm | Yes (timing and supply above). New footprint, new pin order | smaller, better timing margin, lower current |
| 750 Ω 1 % (C25132, extended) | 2 × 1.5 kΩ 1 % in parallel | C25867 | basic | 2,187,279 | $0.003 each | 0402 | Yes: same 750 Ω and same tolerance; fails safe | removes one extended type |
| 499 Ω (C4125, extended) | 470 Ω 1 % | C25117 | basic | 1,047,546 | $0.003 | 0402 | Yes: series protection on TX; value not critical | removes one extended type |
| TS-1187A 5.1 × 5.1 mm button (C318884, basic) | TS-1088-AR02016 3.9 × 3 mm, 160 gf, no locating post | C720477 | basic | 942,241 | $0.054 | 3.9 × 3.0 × 2.0 mm, pads 5.5 × 2.0 mm | Yes: same 2-pin switch | saves space |
Unchanged extended parts:
- ESP32-C3-MINI-1-N4, TPS259531, TLV76733, TYPE-C-31-M-12, USBLC6-2SC6, SN74AHCT1G125, 220 µF RVT (C72496)
- plus the LED
"Preferred" parts (no fee): SMAJ5.0A and the 39 kΩ resistor.
| Extended types with a setup fee | V1: 10 (about $30 per order) | V2: 8 (about $24 per order) |
|---|
Before any future quote (required):
- Recheck every part's basic/extended status and stock on JLCPCB on the day of the quote. The status above comes from JLCPCB's public catalogue; the Adom tool's basic/extended flag was found to be unreliable.
- The eFuse has the lowest stock (3,299 today). Check it again.
- All prices here are preliminary estimates. Only a JLCPCB quote is real.
Version 1 vs Version 2
| Version 1 (approved prototype) | Version 2 (proposal) | |
|---|---|---|
| Board | 300 × 70 mm (210 cm²) | 250 × 40 mm (100 cm², −52 %) |
| LEDs | 107 × XL-5050 (5 mm) at 7 mm pitch | 107 × XL-2020 (2 mm) at 5 mm pitch |
| Letter size | 33 × 47 mm | 22 × 32 mm |
| Readability | readable from about 5 m; large bright dots | readable from about 3.5 m; smaller dots, more "dotted"; about ¼ of the brightness (good indoors, weak in daylight) |
| Full-white current | 3.85 A (WLED dims to about 30 %) | 1.66 A (no dimming needed) |
| Board maximum | 2.2 A (with WLED limiting) | about 2.06 A (without limiting) |
| Timing margin ("0" bit) | 10 ns | 70 ns |
| Supply rating vs 5.7 V clamp | 5.5 V (accepted risk) | 5.5 V (same risk) |
| Parts per board (estimate) | about $9.70 | about $13.60 (small LEDs cost more) |
| Extended-part fees | about $30 (10 types) | about $24 (8 types) |
| 5 assembled boards, excluding shipping and tax (preliminary) | about $120–160 | about $120–150 |
| Repair by hand | 5050 LED: possible with care | 2020 LED: needs hot air |
| New risks | – | new footprint and pin order, new timing test, tiny parts, changed LED numbering (V2 maps required) |
Next steps (each needs approval)
- Approve this proposal (dimensions, pattern, electronics plan, footprint), including the corrected clearances.
- Version 2 schematic (copy of V1 with the approved changes), ERC, pin audit.
- Placement, then routing, DRC and checks. Then images, a power recalculation and review.
- Version 2 firmware: maps and LED order done (
v2/firmware/). A full V2 setup guide comes with the schematic. Before the schematic is completed: the 5.5 V alternative comparison (5.7 V risk, condition 6). - Timing test with real XL-2020 LEDs before any Version 2 order.
# Version 2 requirements (rev 0.2, proposal)
> **Status (2026-09-25): proposal only, waiting for approval.** No schematic, placement or routing yet.
> Version 1 (the project root) is the approved prototype design and is **not changed** by anything in `v2/`.
> The Version 2 LED is **provisional** until its own 5–10 LED WLED timing test passes.
> **Do not order anything from this folder.**
## Goal
A smaller, lower-power RITHESH board with smaller LEDs. It still spells "RITHESH" clearly, keeps the same electronics
and protection, and uses JLCPCB basic parts where that does not reduce reliability.
## What stays the same as Version 1
- Same 5 × 7 letter patterns and **107 LEDs** (see `requirements.md` in the project root for the patterns).
- ESP32-C3-MINI-1-N4 running standard **WLED**: LED data on GPIO10, ON/OFF button on GPIO5.
- USB-C 5 V input with the same protection chain:
- SMAJ5.0A surge diode
- USBLC6-2SC6 USB ESD chip
- TPS259531 eFuse (soft start, current limit, 5.7 V clamp)
- TLV76733 3.3 V regulator. **Kept** (approved 2026-09-25).
- SN74AHCT1G125 5 V level shifter with the 33 Ω series resistor and 10 kΩ pull-down. **Kept** (approved 2026-09-25).
- RESET / ON/OFF / BOOT buttons, 10 test pads, 4 × M3 mounting holes with 7 mm keep-outs.
- 2 copper layers, 1.6 mm FR-4, 1 oz copper. All parts on the front. JLCPCB assembly.
- A 100 nF capacitor next to every LED.
## Decisions (approved 2026-09-25)
| Decision | Choice |
|----------|--------|
| LED | **XL-2020RGBC-2812B** (XINGLIGHT, JLCPCB/LCSC **C5349955**), 2.0 × 2.0 mm. **PROVISIONAL** until the timing test passes |
| LED spacing | **5 mm** centre to centre (V1: 7 mm) |
| Layout | Electronics at the **right end** of the word (V1: in a strip under the word) |
| Board size | **250 × 40 mm** target (V1: 300 × 70 mm). Placement may trim a few mm; the 4 mm option is not used |
| 750 Ω eFuse current-limit resistor | **Two 1.5 kΩ 1 % resistors in parallel** (basic part C25867) |
| 499 Ω serial TX resistor | **470 Ω** (basic part C25117) |
| Buttons | **3.9 × 3 mm** basic buttons TS-1088-AR02016 (C720477) instead of 5.1 × 5.1 mm |
| Other substitutions | **None** that reduce reliability just to avoid an extended-part fee |
| Storage | Everything for Version 2 lives in `v2/` |
| LED chain | **Starts at the electronics side**: V2 LED1 is where V1 LED107 was (approved 2026-09-25) |
| 5.7 V clamp vs 5.5 V LED | **Accepted only as a documented prototype risk**, not as a verified production condition (approved 2026-09-25 with conditions; see below) |
| Clearances (corrected 2026-09-25) | LED courtyard **≥ 1.0 mm** outside each 7 mm hole keep-out (required ≥ 0.5 mm); antenna clearance **15.5 mm** (required ≥ 15 mm) |
## LED check (datasheet XL-2020RGBC-WS2812B, rechecked 2026-09-25)
| Item | Datasheet | WLED / board | Result |
|------|-----------|--------------|--------|
| "0" bit high time | typ 0.25 µs, **max 0.47 µs** | about 400 ns | ✅ 70 ns margin (V1 LED: 10 ns) |
| "1" bit high time | 0.58–1.0 µs (typ 0.85) | about 800 ns | ✅ |
| "1" bit low time | typ 0.4 µs (no limits given) | about 450 ns | ✅ near typical |
| "0" bit low time | typ 1.0 µs (no limits given) | about 850 ns | ✅ near typical |
| Bit period | min 1.2 µs | 1.25 µs | ✅ |
| Reset (latch) | more than 80 µs | 300 µs | ✅ |
| Data input "high" level | at least 0.5 × VDD (2.5 V at 5 V; 2.75 V at 5.5 V) | 5 V from the level shifter | ✅ |
| Supply voltage | **3.5–5.5 V**, listed in the *absolute maximum* table; full function 4.5–5.5 V | 5 V rail | ✅ normal use; see the 5.7 V risk below |
| LED current | constant current **5 mA per colour** (typ; ±3 % between chips) | | 15 mA per LED at full white |
| Chip standby current | 0.5 mA (typ) | | 54 mA for 107 LEDs |
| Moisture sensitivity | MSL 5 | | JLCPCB handles baking |
WLED's timing figures are the NeoPixelBus WS2812x values used for Version 1's check (400 / 850 ns for a "0",
800 / 450 ns for a "1"). This is a **datasheet check only**. The bench test below must still pass.
**Rejected candidates:**
| LED | Reason |
|-----|--------|
| WS2812C-2020 | "0" bit max 380 ns (WLED sends 400); supply max 5.3 V |
| WS2812B-Mini 3535 | "0" bit max 380 ns; supply max 5.3 V |
| SK6805-EC15 | "0" bit max 400 ns, so no margin at all |
| XL-1615RGBC-2812B | "1" bit min 900 ns; WLED sends 800 |
### Timing test (required before any Version 2 order)
Same method as Version 1 (`requirements.md`, "Prototype plan", Step 1), but with 5–10 **XL-2020RGBC-2812B** LEDs:
- **Setup:** ESP32-C3 running standard WLED, 74AHCT1G125 level shifter powered from 5 V, 33 Ω series resistor,
100 nF per LED.
- **Pass:**
- 30 minutes of colours, effects and brightness changes with no wrong colours or random flashes
- correct after a power cycle and after a reset
- oscilloscope reading of the "0" high time is about 400 ns
- **Pass:** the LED stops being provisional. **Fail:** do not order. Decide between a different LED and (last resort)
a custom WLED timing build.
## LED footprint (verified against the datasheet, page 11)
File: `v2/hardware/rithesh_v2_fp.pretty/LED_XL-2020RGBC-2812B.kicad_mod` (generated by `v2/hardware/tools/make_v2_footprint.py`).
| Item | Value |
|------|-------|
| Body | 2.0 × 2.0 × 0.65 mm |
| Pads | 4 × **0.85 × 0.75 mm** (across × down), gaps **0.5 mm** both ways, centres ±0.675 × ±0.625 mm (the datasheet's recommended soldering pattern) |
| Pins, seen from the top | **DI** top-left (pin 3), **GND** top-right (pin 2), **VDD** bottom-left (pin 4), **DO** bottom-right (pin 1) |
| Orientation mark | Round mark on the top at the **DO / pin 1** corner. The bottom-view triangle points to the same side. Footprint has a silkscreen dot outside that corner and a chamfered fab outline |
| Courtyard | 2.70 × 2.50 mm |
⚠️ **The pin order differs from the Version 1 LED** (XL-5050: 1 VDD, 2 DO, 3 GND, 4 DI). The V2 schematic
symbol must use the new numbering. JLCPCB's placement preview must be checked for this LED's rotation.
## LED pattern and dimensions
Drawings (generated by `v2/hardware/tools/make_v2_plan.py`):
- `v2/hardware/layout-plan/led-pattern-v2.svg` is 1:1 when printed at 100 %; the `.png` is a preview.
- `board-plan-v2.png`
- `electronics-area-v2.png`
| Item | Value |
|------|-------|
| Grid | 41 columns × 7 rows at 5 mm (7 letters × 5 columns + 6 empty columns between letters) |
| One letter | **22 mm wide × 32 mm tall** (V1: 33 × 47 mm) |
| Space between letters | 10 mm centre to centre, **8 mm clear** between LED bodies |
| Whole word | **202 × 32 mm** (V1: 285 × 47 mm) |
| LED positions | column 0 at x = **9.1 mm**, row 0 at y = 5.0 mm (from the board's top-left corner). Moved 0.6 mm right on 2026-09-25 for hole clearance; pattern and 5 mm spacing unchanged |
| **Board** | **250.0 × 40.0 mm**, 2 mm corner radius |
### LED chain order (changed from Version 1)
The data line starts next to the electronics, so the chain now **starts at the right end**:
- **V2 LED1** is at the bottom-right of the last "H" (where V1's LED107 is).
- **V2 LED107** is at the top-left of the "R".
- **V2 LED n sits where V1 LED (108 − n) sits.**
- **LEDs per letter:** H 1–17, S 18–32, E 33–50, H 51–67, T 68–78, I 79–89, R 90–107.
- **The visible letters are identical; only the physical numbering (data order) changed.**
This keeps the 5 V data line from the level shifter to LED1 only a few millimetres long, instead of a 21 cm track.
The separate Version 2 files are in `v2/firmware/`, generated by `v2/hardware/tools/make_v2_ledmaps.py`, which
checks each map two independent ways:
- `ledmap.json` ("RITHESH V2 41x7")
- `ledmap1.json` ("RITHESH V2 left-to-right")
- `led-order.csv`
Version 1's `firmware/` files are unchanged.
## Board outline and electronics area (preliminary)
| Item | Position (mm, from the top-left corner) | Notes |
|------|------------------------------------------|-------|
| Mounting holes (M3, 3.2 mm, non-plated) | (3.2, 3.2), (3.2, 36.8), **(215.0, 3.2), (215.0, 36.8)** | 7 mm keep-outs. Right-hand holes sit between the word and the electronics. Clearances in the table below |
| ESP32-C3-MINI-1 | body x 233.4–250.0, y 2.0–15.2; antenna end flush with the right edge | Top-right corner. The board corner gives free air above the antenna |
| Antenna keep-out | x 244.6–250, y 2.0–15.2 | No copper on either layer (module rule, as V1) |
| **Antenna clearance zone** | x **244.0–250** (6.0 mm deep), y 15.2–**30.7** (**15.5 mm**) | Espressif Hardware Design Guidelines Fig. 21: at least 15 mm beside the antenna along the board edge, as deep as the antenna area (about 6 mm). **No parts, pads, tracks, vias or copper fill on either layer.** Every part stays at least 0.5 mm outside it |
| Strip above the antenna | x 244.0–250, y 0–2.0 | No copper. The board ends here, so this side has free air (more than 15 mm) |
| USB-C | centred at x = 238.0 on the bottom edge | Plug from below. 8 mm away from the antenna clearance |
| Buttons | RESET / ON/OFF / BOOT stacked at x 211.4–217.4, y 8–25 | Labels printed to the right |
| Test pads | TP6 LED_DIN beside the level shifter; 8 in two rows along the bottom (5V_IN, 5V_OUT, FLT, ILM / 3V3, GND, RX, TX); TP5 GND right of the USB-C | ≥ 3.6 mm apart |
| Level shifter | beside LED1 (x ≈ 213.6, y ≈ 29) | Short data line |
| eFuse, surge diode, USB ESD | just above the USB-C | |
| C301 220 µF (fitted) | at the eFuse output (x ≈ 227, y ≈ 22) | |
| C302 220 µF (fitted) | between "R" and "I" (x 36, y 20) | Far end of the 5 V rail |
| C303 220 µF (DNP spare) | between "T" and "H" (x 93, y 22) | Middle of the rail |
### Mounting-hole clearances (corrected 2026-09-25)
The closest LED is measured for both 0° and 90° LED rotations; the worst case is shown.
| From the closest LED's … | to the 7 mm keep-out | to a 6 mm washer | to an M3 screw head (5.7 mm, largest common: button head) | to the 3.2 mm hole |
|---|---|---|---|---|
| courtyard (2.70 × 2.50 mm) | **1.08 mm** | 1.58 mm | 1.73 mm | 2.98 mm |
| body (2.0 × 2.0 mm) | 1.46 mm | 1.96 mm | 2.11 mm | 3.36 mm |
| solder pads (2.2 × 2.0 mm outer edges) | 1.37 mm | 1.87 mm | 2.02 mm | 3.27 mm |
- **Requirement:** at least 0.5 mm, target about 1 mm. Met, with 1.08 mm at the courtyard (was 0.39 mm).
- **Screw heads and washers:** a 5.7 mm screw head stays 0.35 mm inside the board edge and a 6 mm washer 0.20 mm.
- **Larger washers:** the 7 mm keep-out also fits a DIN 125 washer (7.0 mm), but that would reach 0.3 mm past the
board edge (same as V1).
### Antenna clearance (corrected 2026-09-25)
- **Clearance zone below the antenna:** **15.5 mm** long and 6.0 mm deep (requirement at least 15 mm; the extra
0.5 mm is a safety margin, not a rounding).
- **Nearest part in the edge strip below the antenna:** **19.05 mm** from the antenna keep-out (TP5).
- **Nearest part to any antenna zone boundary:** 0.90 mm outside it (U1, moved 0.6 mm left).
- **Above the antenna:** the board corner, then free air.
- **At placement:** the zone becomes a KiCad rule area on **both copper layers** forbidding tracks, vias, pads and
copper fill. The placement checker then verifies bodies, pads, tracks, vias and fills against it (as for V1).
**Check results** (`make_v2_plan.py`, 2026-09-25):
- No overlaps between parts, LEDs, hole keep-outs, the antenna zones (0.5 mm margin) or the board edge.
- The electronics area (x 211.0–250) is **60 % used** by parts, keep-outs and passive-part zones; **631 mm²** is free for routing.
- The plan therefore fits without crowding. Final positions come at placement.
## Power
| Item | Value |
|------|-------|
| One LED at full white | 3 × 5 mA + 0.5 mA = **15.5 mA** |
| All 107 LEDs at full white | **1.66 A** (up to about 1.71 A with the ±3 % chip spread) |
| All LEDs off (standby) | about 54 mA |
| ESP32-C3 | about 100–130 mA on average; Wi-Fi transmit peaks up to **335 mA** |
| **Board worst case** | 1.71 + 0.335 + about 0.01 = **about 2.06 A** |
| Typical (colourful effects) | about 0.6–0.9 A |
| eFuse current limit | **2.49–2.90 A** (see below): at least **0.43 A (17 %)** above the worst case |
| Charger | USB-C **5 V ⎓ 3 A** (15 W) recommended: 0.94 A above the worst case. It also works on a 1.5 A USB-C source if WLED's limit is lowered to 1,300 mA |
| USB-C connector | same part as V1. V1's accepted risk 7 (one VBUS pad pair reaches its 2.5 A rating only during the eFuse's brief 2.9 A limit) still applies; the normal maximum is now 2.06 A instead of 2.2 A |
### WLED settings and what happens at full white
Checked in the WLED source code, release v16.0.1:
- `settings_leds.htm`: the per-LED current menu has 55 / 35 / 30 / 15 mA presets plus **Custom (1–255 mA)**.
- `bus_manager.cpp`: WLED estimates each LED as (colour sum ÷ 765) × mA-per-LED **+ 1 mA standby**, and reserves
`MA_FOR_ESP` = **120 mA** for the ESP32.
| Setting | Value |
|---------|-------|
| LED current | **Custom: 16 mA** (15.5 mA rounded up) |
| Maximum PSU current | **2,000 mA** (unchanged from V1), brightness limiter **on** |
At full white, WLED estimates 107 × 16 + 107 × 1 = **1,819 mA** for the LEDs. Its LED budget is 2,000 − 120 =
**1,880 mA**. Because 1,819 is less than 1,880, **WLED does not dim**: full white runs at full brightness. The real
LED current is about 1.66 A.
The 2,000 mA limit becomes a safety net. It only acts if a setting is wrong, for example too many LEDs entered.
If the default 55 mA is left in place, WLED dims full white to about 31 % for no reason, so **set 16 mA**.
### eFuse current limit with two 1.5 kΩ resistors (TI TPS2595 datasheet)
- **Formula:** I = 2000 / R + 0.04 A. It matches the datasheet table (487 Ω gives 4.17 A; 1780 Ω gives 1.17 A).
- **Resistance:** 1.5 kΩ ∥ 1.5 kΩ = **750 Ω**. The worst case, with both resistors 1 % high or both 1 % low, is
742.5–757.5 Ω. That is the **same ±1 %** as a single 1 % resistor; with random tolerances it is usually tighter.
- **Limit:** about 2.71 A typical. With the chip's own spread (about −7 / +6 %) the range is **2.49–2.90 A**,
identical to Version 1. Resistor drift with temperature (±100 ppm/°C) adds less than ±0.5 %.
- **Current monitor:** unchanged, about 0.21 V per amp (276 µA/A × 750 Ω).
**Failure modes (datasheet fault table):**
| Fault | Result | Safe? |
|-------|--------|-------|
| One resistor missing or open | R = 1.5 kΩ, so the limit falls to about **1.37 A** (roughly 1.27–1.47 A). The board current-limits at high brightness, and the ILM test pad reads about 0.41 V/A instead of 0.21 V/A | ✅ fails safe (less current). The prototype full-white test and the ILM check find it |
| Both open (ILM pin open) | limit 0 A, so the eFuse shuts down | ✅ safe |
| Solder bridge across a resistor (ILM shorted to GND) | circuit breaker trips at 3 A | ✅ same as with a single resistor |
| Bridge between the two resistors | none: both sit between the same two nets | ✅ harmless |
Place the two resistors side by side with a direct ground connection. Add to the prototype test: **ILM pad about
0.21 V per amp** (0.41 V/A means one resistor is missing).
### Voltage drop and copper
- **Supply path:** power enters at the right end, and the farthest LED is about 200 mm away.
- **Estimate:** 5 V fill about 30 mm wide (about 6.7 squares, 3.3 mΩ) plus a ground plane about 40 mm wide
(about 5 squares, 2.5 mΩ). With the load spread along the word, the drop is about 1.66 A × 5.8 mΩ ÷ 2 ≈
**5 mV**, plus vias and narrow sections: **estimated under 30 mV** (V1: 9 mV).
- **To do:** calculate it with `hardware/tools/power_analysis.py` after routing.
- **Copper:** 1 oz is enough. IPC-2221 needs **≥ 0.8 mm** for 2 A at a 10 °C rise on an outer layer; plan
**1.2 mm** power tracks as in V1.
- **5 V feed:** runs from C301 to the LED area between the ON/OFF/BOOT buttons and the level shifter.
### Capacitors
| Where | Value | Change from V1 |
|-------|-------|----------------|
| Every LED | 100 nF 0402 X7R (basic C1525), within about 2 mm of its LED | same (107 + level shifter) |
| Bulk on the LED rail | **3 footprints** for 220 µF 16 V (C72496): **2 fitted** (C301 at the feed, C302 at the far end) and **1 spare DNP** (C303, middle) | V1 had 4 footprints (2 fitted). Worst-case synchronised LED current is now 1.6 A instead of about 4.3 A, so the V1 method gives about 0.4 V of dip instead of 1.1 V |
| USB input | 4.7 µF (basic) | same; the charger still sees about 5 µF at plug-in (USB-C limit 10 µF) |
| eFuse soft start | 100 nF | same; covers all 3 bulk capacitors |
| Regulator | 10 µF in + 10 µF out (basic) | same |
## Remaining risk: LED 5.5 V rating vs eFuse 5.7 V clamp
- **Normal use:** USB-C chargers deliver 4.75–5.5 V. The eFuse drops about 0.07 V at 2 A, so the LEDs see at most
about 5.5 V, at their limit but within it.
- **Fault:** if a charger fails and goes above about 5.5–5.9 V, the TPS259531 clamps its output at **5.2–5.7 V**
(5.45 V typical). The LEDs could then see **up to 0.2 V above their 5.5 V absolute maximum** for as long as the
fault lasts.
- **Consequence:** possible LED damage in that fault case. How much margin the LED really has is unknown.
- **Same as V1:** this is Version 1's accepted **risk 2** unchanged. The XL-2020 datasheet also lists 5.5 V as an
absolute maximum.
- **Options if it is not acceptable:** an eFuse or clamp with a lower output limit, or a series diode (costs about
0.3 V of LED supply). Neither is proposed now.
- **Status (approved 2026-09-25):** accepted **only as a documented prototype risk**, **not** as a verified
production condition.
**Conditions attached to this risk:**
1. **Measure** the actual LED supply (5 V rail at the first and last LED) during the prototype test.
2. **Test with at least two** normal 5 V USB-C chargers.
3. **Confirm** the LED rail **never exceeds 5.5 V** in normal operation (idle, full white, effects, plug-in), with the
oscilloscope and a meter.
4. **Do not** intentionally test a destructive overvoltage fault on the assembled board.
5. **Do not approve a larger batch** until the prototype passes.
6. **Before completing the Version 2 schematic**, briefly check whether a simple, reliable alternative can keep the LED
rail at or below 5.5 V without adding significant cost, heat or extended parts. **Present it for comparison only;
do not change the approved design automatically.**
## Parts changes (JLCPCB catalogue, checked 2026-09-25)
| Current (V1) | Version 2 | JLCPCB # | Type | Stock | Price (100 pcs) | Size | Compatible? | Why |
|--------------|-----------|----------|------|-------|-----------------|------|-------------|-----|
| XL-5050RGBC-2812B (C2843785) | **XL-2020RGBC-2812B** | C5349955 | extended | 127,770 | $0.081 | 2.0 × 2.0 mm | Yes (timing and supply above). **New footprint, new pin order** | smaller, better timing margin, lower current |
| 750 Ω 1 % (C25132, extended) | **2 × 1.5 kΩ 1 % in parallel** | C25867 | **basic** | 2,187,279 | $0.003 each | 0402 | Yes: same 750 Ω and same tolerance; fails safe | removes one extended type |
| 499 Ω (C4125, extended) | **470 Ω 1 %** | C25117 | **basic** | 1,047,546 | $0.003 | 0402 | Yes: series protection on TX; value not critical | removes one extended type |
| TS-1187A 5.1 × 5.1 mm button (C318884, basic) | **TS-1088-AR02016** 3.9 × 3 mm, 160 gf, no locating post | C720477 | **basic** | 942,241 | $0.054 | 3.9 × 3.0 × 2.0 mm, pads 5.5 × 2.0 mm | Yes: same 2-pin switch | saves space |
**Unchanged extended parts:**
- ESP32-C3-MINI-1-N4, TPS259531, TLV76733, TYPE-C-31-M-12, USBLC6-2SC6, SN74AHCT1G125, 220 µF RVT (C72496)
- plus the LED
**"Preferred" parts (no fee):** SMAJ5.0A and the 39 kΩ resistor.
| Extended types with a setup fee | V1: **10** (about $30 per order) | V2: **8** (about $24 per order) |
|---|---|---|
**Before any future quote (required):**
1. Recheck every part's basic/extended status and stock on JLCPCB **on the day of the quote**. The status
above comes from JLCPCB's public catalogue; the Adom tool's basic/extended flag was found to be unreliable.
2. The eFuse has the lowest stock (3,299 today). Check it again.
3. **All prices here are preliminary estimates.** Only a JLCPCB quote is real.
## Version 1 vs Version 2
| | Version 1 (approved prototype) | Version 2 (proposal) |
|---|---|---|
| Board | 300 × 70 mm (210 cm²) | **250 × 40 mm (100 cm², −52 %)** |
| LEDs | 107 × XL-5050 (5 mm) at 7 mm pitch | 107 × XL-2020 (2 mm) at 5 mm pitch |
| Letter size | 33 × 47 mm | 22 × 32 mm |
| Readability | readable from about 5 m; large bright dots | readable from about 3.5 m; smaller dots, more "dotted"; about ¼ of the brightness (good indoors, weak in daylight) |
| Full-white current | 3.85 A (WLED dims to about 30 %) | 1.66 A (no dimming needed) |
| Board maximum | 2.2 A (with WLED limiting) | about 2.06 A (without limiting) |
| Timing margin ("0" bit) | 10 ns | 70 ns |
| Supply rating vs 5.7 V clamp | 5.5 V (accepted risk) | 5.5 V (same risk) |
| Parts per board (estimate) | about $9.70 | about $13.60 (small LEDs cost more) |
| Extended-part fees | about $30 (10 types) | about $24 (8 types) |
| 5 assembled boards, excluding shipping and tax (preliminary) | about $120–160 | about $120–150 |
| Repair by hand | 5050 LED: possible with care | 2020 LED: needs hot air |
| New risks | – | new footprint and pin order, new timing test, tiny parts, changed LED numbering (V2 maps required) |
## Next steps (each needs approval)
1. Approve this proposal (dimensions, pattern, electronics plan, footprint), including the corrected clearances.
2. Version 2 schematic (copy of V1 with the approved changes), ERC, pin audit.
3. Placement, then routing, DRC and checks. Then images, a power recalculation and review.
4. Version 2 firmware: maps and LED order done (`v2/firmware/`). A full V2 setup guide comes with the schematic.
Before the schematic is completed: the 5.5 V alternative comparison (5.7 V risk, condition 6).
5. Timing test with real XL-2020 LEDs **before** any Version 2 order.