|
1 | 1 | # Wine rack 1 - bin lighting for the CellarTracker integration |
2 | 2 | # ============================================================================= |
3 | 3 | # |
4 | | -# One WS2812 strand per rack row, one block of LEDs per bin. Home Assistant |
| 4 | +# One WS2815 strand per rack row, one block of LEDs per bin. Home Assistant |
5 | 5 | # tells the board what to show; the board owns nothing but the pixels. |
6 | 6 | # |
7 | 7 | # Two things are drawn: |
|
54 | 54 | # repository should be regenerated before it goes in there. |
55 | 55 | # |
56 | 56 | # 2. Why FastLED and not neopixelbus. A classic ESP32 has eight RMT channels |
57 | | -# and two I2S buses to get WS2812 timing from - ten strands' worth of |
58 | | -# hardware for thirteen strands. That is a limit on how many can transmit |
| 57 | +# and two I2S buses to get WS2812-protocol timing from - ten strands' worth |
| 58 | +# of hardware for thirteen strands. That is a limit on how many can transmit |
59 | 59 | # at once rather than on how many you can have, and it is the whole |
60 | 60 | # difference between the two components: FastLED takes a channel per strand |
61 | 61 | # as it goes and hands it back for the next one, so thirteen strands |
|
74 | 74 | # ESPHome's supported component, and the one that works under ESP-IDF. That |
75 | 75 | # means reworking the per-strand lambdas to cover more than one row. |
76 | 76 | # |
77 | | -# 3. Power. Budget a WS2812 at 20 mA per colour channel at full scale plus |
78 | | -# 1 mA for being powered at all, so one pixel is |
| 77 | +# 3. Power. The strips are WS2815 on a 12 V rail. Budget a pixel at 0.3 W - |
| 78 | +# 25 mA at 12 V - at full white, scaling with the sum of its channels, |
| 79 | +# plus about 1 mA standing for the controller and the backup-line logic: |
79 | 80 | # |
80 | | -# (R + G + B) / 255 * 20 mA + 1 mA |
| 81 | +# (R + G + B) / 765 * 25 mA + 1 mA @ 12 V |
81 | 82 | # |
82 | 83 | # 13 rows x 13 bins x 6 LEDs is 1014 pixels that can be lit at once, out of |
83 | 84 | # 1482 powered. That makes the whole rack: |
84 | 85 | # |
85 | | -# everything off ............................ 1.5 A |
86 | | -# every bin ready (0, 110, 0) .............. 10.2 A |
87 | | -# every bin drink-this-year (150, 55, 0) ... 17.8 A <- the worst case |
88 | | -# per strand, at that worst case ............ 1.4 A |
| 86 | +# everything off ............................ 1.5 A (18 W) |
| 87 | +# every bin ready (0, 110, 0) ............... 5.1 A |
| 88 | +# every bin drink-this-year (150, 55, 0) .... 8.3 A <- the worst case |
| 89 | +# per strand, at that worst case ............ 0.6 A |
89 | 90 | # |
90 | | -# So: a 5 V supply of 25 A, a fuse that protects the feed cable rather than |
91 | | -# the LEDs, and power injected at BOTH ends of every strand - a 1 m strand |
92 | | -# at 1.4 A fed from one end only drops its far bins to around 3.1 V, and a |
93 | | -# WS2812 wants 3.5 V. Halving `bin_leds` to 3 halves all of it and still |
94 | | -# reads as a solid marker behind a bottle; that is much the cheapest way to |
95 | | -# get to a 15 A supply and 14 AWG. |
| 91 | +# So: a 12 V supply of 12.5 A, a 15 A fuse protecting the 14 AWG feed |
| 92 | +# rather than the LEDs, and - unlike the 5 V version this replaced - a |
| 93 | +# single feed at the head of each strand is enough. A 1.1 m strand at |
| 94 | +# 0.6 A drops about 0.3 V, against the 1.5 V of budget between 12 V and |
| 95 | +# the 10.5 V a WS2815 wants. Measure your strip's copper before trusting |
| 96 | +# that; over 1 ohm/m per rail, or strands longer than 1.5 m, feed both ends. |
96 | 97 | # |
97 | | -# The palette is what keeps those numbers reachable - no channel goes above |
98 | | -# 150, and gamma_correct is 1.0, so these values are what the LEDs actually |
99 | | -# draw. Full white on every pixel would be 62 A. Do not raise the palette |
100 | | -# without redoing the arithmetic. |
| 98 | +# The 12 V rail powers only the LEDs. The ESP32 and the level shifters run |
| 99 | +# from a small 12 V -> 5 V buck off the same bus, and every ground - buck |
| 100 | +# included - returns to the PSU terminal rather than through a strip. |
| 101 | +# |
| 102 | +# Two things 12 V costs you. Total power is slightly higher than the 5 V |
| 103 | +# equivalent, because each pixel regulates 12 V down and dissipates the |
| 104 | +# difference as heat in the strip. And the always-on backup-line logic |
| 105 | +# makes idle 18 W rather than 7 W, which in a room you are paying to keep |
| 106 | +# cold is worth switching off - see the blueprint for the high-side switch |
| 107 | +# and the output-enable interlock that goes with it. |
| 108 | +# |
| 109 | +# The palette is what keeps those numbers modest - no channel goes above |
| 110 | +# 150, and gamma_correct is 1.0, so these values are what the pixels |
| 111 | +# actually draw. Full white everywhere would be 28 A. Halving `bin_leds` |
| 112 | +# to 3 halves the lot and still reads as a solid marker behind a bottle. |
101 | 113 | # |
102 | 114 | # ============================================================================= |
103 | 115 |
|
@@ -379,6 +391,11 @@ script: |
379 | 391 | # still scales the whole row, so Home Assistant's slider is a master dimmer. |
380 | 392 | .strand: &strand |
381 | 393 | platform: fastled_clockless |
| 394 | + # The hardware is WS2815 - 12 V, and with the backup data line that keeps a |
| 395 | + # row alive when one pixel dies. ESPHome has no name for it because it does |
| 396 | + # not need one: WS2815 speaks the same 800 kHz protocol as a WS2812B, so |
| 397 | + # that is the chipset to declare. Wire the first pixel's BI pad alongside |
| 398 | + # its DI; left floating it can oscillate and take the row with it. |
382 | 399 | chipset: WS2812B |
383 | 400 | rgb_order: GRB |
384 | 401 | num_leds: ${strand_leds} |
|
0 commit comments