Fixing Dell Ultrasharp (U3014/U3014T) Monitor Not Working (Now with Firmware!)

So, I found this lovely behemoth in my work’s e-waste pile and yanked it out, figuring on harvesting a nice big diffuser and backlight for a different project. But a quick search on the partnumber showed this thing is pretty impressively specced, and maybe I’d rather have a go at getting it running again instead. Plus, after many moons of mostly shuffling paper and “FTEs” (the exciting new term for humans who actually do work), it would be an excuse to actually get my hands dirty with actual electronics again!

it turns out all it needed was a little love. That and a new motherboard. Yes, in the end I took the easy way out (I know you were expecting a valiant tale of BGA reballing or fabricating my own rectifier diodes from corroded razor blades), but maybe some of the information below might be helpful to someone in a similar boat. Even if it’s as simple as lifting the back off and swapping boards, a handful of quick tests might help you determine which board needs replacing. As of this writing, replacement boards run ~$60-$100USD, so not a bad deal. Plus, you can generate a bit less landfill fodder!

A couple TL;DR troubleshooting tips:

  • Only the power supply and interface board (mainboard) (and obviously, front-panel button/LED board) are needed to show basic “signs of life” in response to the power button. Everything else, including the LCD panel (T-Con board), backlight board and even that silly card-reader daughterboard, can be detached without affecting basic operation.
    • This means if the unit doesn’t power on, it’s pretty much either the power supply or interface board.
  • Likewise, the backlight board and card reader board can be failed/disconnected and you should still get video if the mainboard and power supply are working. Obviously, the LCD panel (T-Con board) must be connected to check video output, and without a working backlight you’ll need to shine a good flashlight into the front of the LCD at point-blank range to see if it’s doing anything. Without a video input, a “No input source” type dialog will bounce slowly around the screen for a couple minutes.
  • Basic life/bootup signs from the interface board (lights, serial output, detection by the PC) are not a guarantee that the interface board is in good working order.

Assessing The Patient

Having never seen this monitor actually running before, I wasn’t sure what to expect. Is there a power LED? Should anything light up automatically when plugged in? Should something happen if you press the power switch, even if there is no video source? Should the little unmarked whitish nubbins (menu buttons) on the side near the power switch visibly do anything when pressed?

What’s supposed to happen is when plugged in, the little white nubbins light up white with a brief animation pattern (or at minimum, do so if you press the power button, which also lights up). Anyway, this unit did none of these things. Despite various fiddling with the nubbins, power button, plugging in video sources, etc., there were no visible signs of life. So lets get inside!

Actually opening the unit is a bit of a trick; there are almost no visible screws and the whole thing just snaps together. The actual, official way to open this product is to wedge some plastic spudgers (and probably a couple kitchen knives after you run out of spudgers) into the seam between the front bezel and back panel, and start prying the two apart until it feels like you’re going to break something. Alternately, as shown in this iFixit guide, try pulling at the bezel where it contacts the LCD. Eventually, the front bezel can be detached and carefully flipped out of the way (but not very far; it’s still tethered by a pair of non-removable ribbon cables to the power/menu button assembly on the bezel, which is plastic-welded in place and hidden behind a sticker of sorts). At this point you can either be very delicate with it until you can get the rest of the innards out and get to the removable side of the ribbon, or do what I did and just snap the button board off from the little plastic welds, then tape/glue it back in place at the end. This assembly is actually two boards, the plastic-welded menu buttons and a physical power button board, which is held on with two small screws.

Either way, with the bezel removed, you can place the unit screen-side-down (on a soft, non-marring surface!) and detach the stand to reveal four sizeable Phillips-head screws. Remove these and the back panel can be lifted straight off to reveal the LCD panel and the electronics boxes that are literally just taped to the back of it. Granted, it’s aluminum tape and not the stuff you hang postcards with, but still. Just peel the tape back to liberate these boxes, consisting of a large main box and a smaller box holding a daughterboard with an SD card reader and a couple spare USB ports. Unless you are specifically repairing the card reader, it’s easiest to just detach this and set it aside for now as it doesn’t affect the operation of anything else.

The remaining cables to the main electronics box can be removed at this point if you have nimble enough fingers; otherwise, just be gentle with them until you can flip the box over for easier access.

Ultrasharp U3014t main electronics box with 3 main boards (cardreader assembly not shown)

Inside the box are 3 large boards with well-defined functions. In the following, all locations and directions (top, bottom, etc.) are with respect to the photo above.

  • Power supply board (L2231-2M 48.7T401.02M), top-left, generates voltages needed by the rest of the system
  • Backlight driver board (L2259-1 48.7T408.011), bottom-right
  • Mainboard or “interface board” (L2121-2 48.7T409.021), top-right, handles pretty much everything else between input from video sources to output to the LCD panel.

You can do a “which board is bad” level diagnosis without further disassembly at this point, but if you do need to remove the boards, in addition to the obvious screws there is another mating a heatsink on the component side of the power board to the metal box for additional heatsinking, and a couple of screw-in posts in the DVI connector pinning the interface board to it as well. Removing the boards makes it much easier to disconnect the cables as needed. Beware that with the protruding video connectors and ribbon cables, getting the interface board in and out is a bit of a Tetris game – watch the little ribbon cables and don’t force it.

The “Which board is bad” diagnosis

Power supply board

The power supply board is “on” and generating all of its voltages regardless of the power button, as long as the unit is plugged in. Needless to say, mains voltage will be present on at least portions of the board when powered, and potentially some while after on charged capacitors, so be extremely careful doing any diagnosis. The HV section is at least clearly marked off with a thick white line. With the interface board connected, you may hear a faint ‘ticktick, tick, tick’ sequence from somewhere near the mains cable right when it is powered up. There are a total of 4 cables exiting the righthand side, with easily accessible solder pads on the back (green/solder) side, outputting various low (<40V) DC voltages. From the back (green/solder) side, going down the line top to bottom (square solder pad first), the voltages should be:

(P804, 6 pins):

  • GND
  • GND
  • GND
  • 15.5V
  • 15.5V
  • 15.5V

(P803, 4 pins):

  • GND
  • GND
  • 12.5V
  • 12.5V

(P802, 5 pins):

  • GND
  • GND
  • 12V
  • 37.5V
  • 37.5V

(P851, 8 pins):

  • 5.0V
  • 5.0V
  • 5.0V
  • GND
  • GND
  • GND
  • 3.0V
  • 0.0/2.4V (appears to be a feedback signal telling whether anything, nominally a sound bar accessory, is plugged into the 12VDC output jack)

Note these are nominal values and could vary a bit on different units, especially the larger voltages. Adjacent pins on the same cable with the same voltage are physically bridged together on the board and don’t need to be separately probed. Finally, all boards are grounded to the large metal box when screwed down, so it can be used as a convenient probe ground. If all of these look good, have a look at…

Backlight driver board

This board accepts two cables on the left; they are labeled on the component side only: P101 (5 pins, from P802 on the power supply), and P102 (4 pins, from the interface board) – and outputs one to the panel’s LED backlights on the right. Pinout of P101 matches P802 on the power supply; pinout of P102 (again, starting from the square solder pad) appears to be:

  • ENABLE
  • NC/Unknown (leads to a non-populated circuit on my board)
  • PWM (brightness control)
  • GND

To quickly test, assuming the power supply voltages are OK, you can disconnect P102 coming from the interface board and pull the ENABLE and PWM pins up to ~3V. I just used a resistor divider on the 12V power supply pin (12V -> 1k -> 330R -> GND) and connected its center tap to both pins. (Despite some oft-repeated Internet wisdom, simply disconnecting the control cable is not enough to force it awake, at least for this particular model.)

With this temporary hack done, the panel should visibly light (easily seen in a darkened room) whenever the unit is plugged into mains power, bypassing the interface board (including power button). If it lights, next possible culprit is…

Interface board

This is the brains of the whole thing, and unfortunately, if it’s got a problem (particularly under the media processor BGA), component-level diagnosis and repair may prove to be a tall order. What follows is pretty specific to my unit, but a functioning interface board should at minimum respond to / light the power button and animate the menu LEDs, regardless of whether the backlight board, LCD panel (“t-con” or timing controller board, hiding under a thin metal bracket on the panel itself) or card reader assembly are connected.

On my particular unit, the power button and LEDs appeared completely non-responsive. (Pressing a moist finger on the bottom of the LED/button board caused the LEDs to glow dimly, this doesn’t count.) After confirming the power button physically works and had continuity at the ribbon connector, I started poking around and found a debug serial port(!) on the non-populated connector P320 (nestled between the DVI and HDMI ports), that emitted text at startup. Its pinout, again from “top to bottom” in the photo (starting from the board edge) on the back/solder side of the board is:

  • GND
  • Rx (UART in from host)
  • Tx (UART out to host)
  • Vcc (3.3V?)

Beware, after buttoning everything up I discovered an inconsistency in my notes and can’t be 100% sure the serial port isn’t 5V; doublecheck before hooking up anything you care about. Connection parameters are the extremely standard 115200-8-N-1. The Tx pin needs a pullup resistor to Vcc (1k worked fine for me) to produce sharp rising edges on the signal and avoid garbled serial decoding. However, even with the signal cleaned up, there are consistent stray characters in the output where it looks like linebreaks should be. In any case, comparison of the startup output between the “dead” and replacement board show some differences.

“Bad” board output:

Ø Dual Flash Bank is disabled.!Init PCTL. April 27 2012<DDR3 - NT5CB64M16DP-CFFine tune WDQD: 0x%xine tune RDQSD: 0x%x¹,IFM measured RC-OSC Clock Value = 0x%xÝã'Calibrated RC-OSC Trim Value = %d8%Measured RC-OSC Clock = %d000HzõeUploaded LPM: %d bytes
cOtpSramInit OKÍLPM DC off!

“Good” board output:

 Dual Flash Bank is disabled.!Init PCTL. April 27 2012<DDR3 - NT5CB64M16DP-CFFine tune WDQD: 0x%xine tune RDQSD: 0x%x¹,IFM measured RC-OSC Clock Value = 0x%x¹'Calibrated RC-OSC Trim Value = %d7%Measured RC-OSC Clock = %d000Hz/jÔUploaded LPM: %d bytes
cOtpSramInit OKÍLPM AC on!:+STHDMIRX-REL_BSP_1.7H.5 - E24CT5_HDMIRXRLPM GPIO0 : 0 => DP_MINIê%**Athena Product Version 2.%d**Ä2¼DP1.2 Lib Version 1.1È09:46:43  Nov  7 2012]!HDCP Repeater Lib Version 0.7i10:34:12  Sep  5 2012yAudio_Cus_Mute %d zAudio_Cus_Mute %d zVWD Gen3: May, 2012ìAudio_Cus_Mute %d ø	*****SYS Lib Ver - V1.0 RC0Sep. 14, 2012 8:00 PM?OSD Lib Ver - V3.0.10July 22, 2008 02:23PMÞDRV Lib Ver - V1.0.00
Oct. 25, 2012 2:30 PMBSTDP93xx Athena UaSTDP93xx RD1 BoardWApplication Ver - Beta TCuSep. 14, 2012 8:00 PM?LG_WQXGA_LM300WQ5_SLA1DRAM code execution	 Î 

Dual Flash Bank is disabled.!Init PCTL. April 27 2012<DDR3 - NT5CB64M16DP-CFFine tune WDQD: 0x%xine tune RDQSD: 0x%x¹PM restarted from SRAMÚLPM DC on!7+STHDMIRX-REL_BSP_1.7H.5 - E24CT5_HDMIRXRLPM GPIO0 : 0 => DP_MINIê%**Athena Product Version 2.%d**Ä2¼DP1.2 Lib Version 1.1È09:46:43  Nov  7 2012]!HDCP Repeater Lib Version 0.7i10:34:12  Sep  5 2012yAudio_Cus_Mute %d Audio_Cus_Mute %d VWD Gen3: May, 2012ìAudio_Cus_Mute %d 

The bolding is added by me of course, but a couple differences to notice are the “LPM” messages and overall length. In the “good” board output, the first block of text (ending with “DRAM code execution”) is from a single poweron (plugin); the 2nd block of text occurs after powering the monitor off and on again using the power button. The bad board appears to halt prematurely following the “LPM DC off!” message. (Needless to say, since this board is not responding to the power button, we don’t get any separate “warm restart” output either.) We’ll get into the details in a bit, but the LPM is the “Low-Power Mode” subsystem, which includes some dedicated power rails and and a low-speed microcontroller core running on the media processor IC that generally handles mundane tasks such as scanning for power/menu key presses, cable detection and power management. My best guess is this hints at a power issue on the mainboard (LPM domain supply not turning on, or not being detected by the processor), but since I ultimately solved my issue by just replacing the entire mainboard, I don’t plan to dig further into it at the component level.

Button/Menu Board Assembly

I didn’t bother taking a picture of this, but it’s a small pair of PCBs connected together by ribbon cables, consisting of a physical power button with internal LED on one, and a set of 5 “soft” buttons/LEDs on the other. Operation of the power button can be confirmed pretty easily via continuity test on the ribbon cable while pressing the button. The softbuttons are a bit more complex, but don’t prevent the basic video function from working and can be diagnosed as a culprit if “everything but menus” works.

T-Con (TFT Controller or Timing Controller) Board

I actually don’t know much about this one, and never liberated it from beneath its shield, but more-or-less every LCD panel has one in some form; it’s responsible for massaging the video data stream from the mainboard into the individual row/column drive chips festooning the edges of the LCD glass itself, and in most cases generating the necessary drive voltages. Do your own web searching if this is still on the table as a possible culprit, but it sounds like common (repairable) issues with a T-Con board will affect the picture as a whole and may include color or brightness shifts or lines across the entire display. In general, T-Con board issues cannot cause glitches localized to specific image regions.

Firmware Dumping, wait, what?

Oh yeah, I guess it’s obvious in retrospect, but did you know monitors have firmware? A quick web search on the debug output strings above reveals a couple reports of this media processor in similar monitors spontaneously bricking by corrupting its firmware, which resides on a small serial Flash chip on the board. In particular, this detailed report inspired me to dump and compare the firmware between the good/bad boards and see if this was the cause of failure. Long story short, it wasn’t – although there were minor byte-level differences, possibly due to different compiler versions used to build it, there were no obviously missing or corrupted blocks, and reflashing the old board with known-good contents didn’t have any effect. However, I now have two different FW dumps from this monitor model.

Despite the byte-level differences, examining the strings in both dumps using a ‘strings’ utility reveals only one identifiable difference in version strings. The content suggests a number of separate libraries, each with their own versioning, go into the build, although the association between a version string and identifiable library name is not always evident, and there are probably more that don’t include an explicit human-readable version string in the binary.

Now that we’ve got ’em, are these dumps remotely useful? There are scattered reports that various issues with this display, in particular compatibility issues with DisplayPort 1.2+ (e.g. hanging on/off with a blank screen and requiring power cycling) that are FW version dependent. Unfortunately I can’t say if either of these versions helps with that, but both are linked below in case you want to give it a go. The only obvious version string difference is in a string near a reference to “Dp1.2”, which is promising at least. The respective identifiable version strings are:

"Older":

VWD Gen3: May, 2012

Init PCTL. April 27 2012

09:46:43  Nov  7 2012

10:34:12  Sep  5 2012

Dp1.2
20130807
M1T103
VK278

STDP93xx Athena U
STDP93xx RD1 Board
Beta TC
Sep. 14, 2012 8:00 PM
cASTDDVIRX_1
cASTHDMIRX_1
SAMSUNG_WUXGA_LTM240W1_L01

DP1.2 Lib Version 1.1

HDCP Repeater Lib Version 0.7
V3.0.10
July 22, 2008 02:23PM
V1.0 RC0
Sep. 14, 2012 8:00 PM
V1.0.00
Oct. 25, 2012 2:30 PM

"Newer":

VWD Gen3: May, 2012

Init PCTL. April 27 2012

09:46:43  Nov  7 2012

10:34:12  Sep  5 2012

Dp1.2
20140305
M1T104
VK278

STDP93xx Athena U
STDP93xx RD1 Board
Beta TC
Sep. 14, 2012 8:00 PM
cASTDDVIRX_1
cASTHDMIRX_1
SAMSUNG_WUXGA_LTM240W1_L01

DP1.2 Lib Version 1.1

HDCP Repeater Lib Version 0.7
V3.0.10
July 22, 2008 02:23PM
V1.0 RC0
Sep. 14, 2012 8:00 PM
V1.0.00
Oct. 25, 2012 2:30 PM

Just beware that the reflashing procedure is not for the faint of heart as it requires desoldering the Flash chip (labeled I319 on the board; exact partnumber and capacity may differ – mine had a 4MByte Winbond 25032FVSIG) and wiring it up to custom hardware (a 3.3V Arduino will work fine). While the media processor datasheet hints at reflashing capabilities through debug serial port commands and even HDMI/DisplayPort (?!) via a software tool called “EZ_Display UP”, both methods are rather well undocumented, and even Dell will have you mail the whole thing back for replacement rather than offer a software flash tool for things like the DisplayPort update.

The chip is a standard serial Flash (NOR Flash, DataFlash, etc.) for which a number of tools exist. Personally, I used an Arduino-compatible SparkFun RedBoard and the spi-flash-programmer library by Nicholas FitzRoy-Dale. With this combination, dumping the whole chip takes about 8 minutes, writing it takes quite a while longer (I just left it go overnight). If you do end up doing this, working out which pins correspond to the requisite serial lines on your chosen board is left as an exercise to the reader. On the RedBoard and likely others, the serial pins on the 6-pin ICSP header are the library default and any available digital pin can be chosen for /CS (D8 being the default). Just beware that on most of these chips the /WP and /HOLD pins need to be pulled high (3.3V) and cannot be left floating. The dumps linked above are 512Kbit or 4,194,304 bytes (addresses from 0 to 0x3FFFFF).

Some More Nerdy Details

Media Processor

The heatsink-enshrouded media processor on the mainboard is the STMicro STDP9320-BB or similar, also known as Athena (“Premium high resolution multimedia monitor controller with 3D video”). While some fairly useless “product brief” information about this chip is officially published, the actual datasheet is a national secret and probably available only under the strictest of NDAs, although it’s also available from unofficial sources online if you know where to look.

stdp93xx-92xx-73xx-datasheet.pdf, Doc ID C93x0-DAT-01 Rev F, wink nudge say no more

The chip documentation is a mildly interesting read, for those of us into that sort of thing. Of particular – if now mostly hypothetical – relevance to my board’s issue was the boot process of this chip and what could cause it to halt prematurely. To wrangle the various high-horsepower on-chip video hardware, the processor includes two separate microcontrollers (OCM – On-Chip Microcontroller), a 250MHz jobbie (“Mission”) handling the bulk of the operation, and a smaller, “LPM” (Low Power Microcontroller) at a paltry 27MHz handling basic user interface and power management tasks. The single serial Flash contains firmware images for both. Interestingly, the powerful Mission OCM boots first, controlling the process and in turn booting the LPM, rather than the other way around.

On my particular board, the evidence points to an issue with the power management signal from the LPM – “(MAIN_POWER_ON), which is used to control power to the mission power domain through external switching circuitry.” I don’t know how common this failure mode is, but as it started to sound like a tail-chasing exercise of finding the lifted BGA ball or shotgunning FETs at random without a schematic, a fresh board off the flea-est of Bays sounded too good to pass up.

A minor thing that stuck out at me is that with all this grunt and spare Flash on board, the PCB is still festooned with small EEPROMS (24Cxxxx) around the individual video and USB interface ICs, or that there are even discrete chips for that. On a quick look, the one near the HDMI port is tied directly to the port, and several existing video cable standards including HDMI explicitly use small I2C EEPROMs to store display identification data (EDID). It’s probably cheaper overall to stuff discrete chips for it than try to emulate them on demand.

Display Glass

The actual LCD in this monitor is made by LG, part number 0X3CH4, for which online replacements seem to exist (the sticker also contains the part-numbery value LM300WQ6, which turns up more in the way of likely replacements). In fact, the marriage between the display and the video “brains” board is a loose one and the signaling to the T-Con board is fairly well standardized; many of the images online for the LCD panel show various other video boards in use. YMMV of course, but if anyone reading this succeeds cobbling a working screen together using the mainboard from an unrelated one, I’d love to hear about it.

Solved: YouTube Watch Later ‘Remove Watched’ missing 2021

TL;DR: Watch one of the first 10 videos in your “Watch Later” list and see if it magically reappears.

Doing a web search for this problem reveals it has been an issue for some time, but possibly for varying reasons in the past. The above is working for me on Web + native clients as of 6/2021.

YouTube has a neat feature, ‘Watch Later’, which does exactly as it says on the tin. The Watch Later list has a very handy context menu option to ‘Remove Watched’, which will appropriately enough prune the list of already-watched videos. Or at least it’s supposed to. This option, which appears on the…. ugh… “three vertical dots menu” (is that really what you call these things?) on the current Android mobile client, appears to randomly appear and disappear from the native mobile client and Web versions of YouTube on a whim.

After more fruitless searching and plinking around than I’d like to admit, it appears this is not telegraphing the future removal of this option, nor part of a grand conspiracy to wean users off of it for more ‘engagement’ by manually deleting every watched video off the queue, instead it’s a dastardly combination of programmer cleverness and laziness. Cleverness in the sense of programmatically adding and 1984’ing* removing the menu item itself depending on an algorithmic assessment of whether it would currently be useful (vs. just leaving the menu item alone and having it do nothing if there are no watched videos to remove), and laziness in the sense of this assessment only checking if there is a watched video in the first ‘n’ (dozen or few) entries. Don’t ask me the exact value of ‘n’ or what factors it may vary on, but it does at least appear to vary between Web and native clients, so you may run into cases where the option appears on the Web version of YouTube but not the mobile app, and on another day disappears from both. Watching something in the topmost (oldest added) 10 or so videos seems to pretty reliably fix it though. (Just don’t ask me what this extreme menu-decluttering shenanigans is meant to accomplish, other than having you Google in circles at len…oh.)

* This menu option does not exist. This menu option has never existed.

Sticky Nano Heater, a small fishtank heater that stays dry

While procrastinating on my current year+ long “couple long weekends” project, in which I’ve clearly bitten off more than a post-kids me has time to chew, I set my sights on a stupid-simple project I could actually complete :-)

If you’ll recall a couple posts back, I found that it’s curiously hard to find small heaters intended for small (nano/pico) aquariums that don’t suck. Preset temperatures (or no temperature regulation whatsoever), not being invisible, short life span, not being invisible, sketchy mains lead going right into the water, and not being invisible are but a few ways in which they suck. So, I made an invisible one that doesn’t go in the water.

Ugly test tank, mostly storage for unruly marimo balls and Utricularia

Okay, so it’s not technically invisible, but this one can be easily concealed and does take up -zero- space inside the tank.

This is not a product for sale, but the design files are published under a Creative Commons license if you want to roll your own.

In a nano tank, every cc is precious, and well, your typical heater options for small tanks are a big ugly hunk of plastic or a big ugly tube of glass intruding into the already limited space. Everyone has the silly peel-and-stick liquid crystal thermometer on the outside of the glass though, because however sketchy it looks, they actually work pretty well. So, why not a heater that works the same way?

So to test it out I made the Sticky Nano Heater (not a real product name, suggestions welcome), a skinny circuit board with a 7-10W resistive heating element (PCB trace heater), MOSFET, and a pair of resistor-adjustable thermostat chips to control it. The board is adhered with double-sided tape to the outside of the glass in an unobtrusive location, such as along the substrate, and uses the glass itself as a heat spreader.

Besides “dirt simple project I could bang out quickly”, some design details are:

Dryness: No parts touch the water. Not the heating element, not the thermal sensor, not the power cord. This simplifies the sealing requirements to “nonexistent” (a splash-proof cover or coating is still not a bad idea for those water-change oopsies that never happen.)

Power: Just to keep things simple and avoid having to muck around with mains voltage near things that get wet, the power plug is USB and runs off one of the numerous spare phone chargers found sitting in a drawer somewhere. This keeps the really energetic wall pixies a good 3-6ft away. A common 5V/2A USB charger nominally delivers 10W, but I initially aimed to draw closer to ~7.5W just because I don’t trust the ratings on cheap phone chargers and neither should you. (I ended up cranking it back up to 10W for the 2.5-gallon test tank, but more on that later.)

Temperature Sensing: On one end of the PCB, away from the heating element, is a simple thermostat IC, the cheap and cheerful MCP9510 (or TMP709). It provides a digital output that cycles on/off as the temperature exceeds a resistor-set threshold, with a ~2C hysteresis. This is coupled to the glass by a copper thermal pour and via-stitching on the PCB. On this prototype version, the temperature setpoint is adjusted by twiddling a small pot, but providing a few discrete options is probably simpler for real-world users. A second thermostat on the heating element itself limits the maximum surface temperature to a user-set value (useful for very tiny setups and/or plastic tanks).

Safety Features:

  • The main one, pun intended, is no mains wire going into the water.
  • The second sensor, coupled directly to the heating trace by a via and small thermal pad, limits maximum surface temperature in case of detachment from the tank, tank materials with poor thermal conductivity, or other adversities. While some informal testing with an outdoor outlet, some dry leaves and a warm day showed that 10W over this surface area doesn’t really pack enough punch to be a serious fire hazard, this feature cheaply protects the heater and nearby surfaces from heat damage, keeps double-stick tape happy, and allows the heater to be freely used on those plastic tanks that are inexplicably the rage these days (YMMV on actual heat transfer of course).
  • A surface-mount fuse inline with the power supply. While the USB charger “should” current-limit in the event of a board-level fault, this will blow if it doesn’t, or if the charger faults in a way that sends wall voltage down the wire. (*the prototype shown uses a tiny 0603 fuse that is not rated for 120VAC; this is fixed in the published revision).

Looks like a snakeoil Kickstarter pitch – does this actually work?

Surprisingly well, albeit with a couple caveats I’ll explain in a moment.

Given I just bashed out a suck-it-and-see prototype rather than do any kind of actual thermal modeling, I was a little worried that the glass and tape would not be thermally conductive enough, the tape would immediately overheat and lose its stick, or that the glass would prove too conductive relative to water, causing the proximity of heating element to the temperature sensor to disturb the measurement. On a 2.5 gallon glass betta tank used for test, the outer surface of the heater part of the PCB gets barely warm to the touch on a filled tank (vs. scalding in free air), and the glass immediately outside the contact area is not perceptibly warm to the touch. The water very effectively sinks the heat; no noticeable heat transfers across the only-an-inch-or-so of glass between the heating element and temperature sensor. So far, I’ve just used plain Scotch brand double-stick tape to attach them to glass and plastic, and this has stayed very well stuck while seeming to have negligible effect on heat transfer. Likewise, the tank sinks heat effectively enough that I’ve seen no need to insulate the outer surface of the heater or surrounding glass against excess heat loss.

The only major caveat to the prototype shown is that the oft-quoted “3-5 watts per gallon” (or ~1 watt per liter) rule of thumb kind of breaks down for nano tanks as surface area begins to dominate volume, so the 10W (max) available from a standard USB charger just isn’t a lot. On my 2.5 US gallon (10L) test tank, 10W is really just enough to take the edge off a drafty windowsill and chilly winter thermostat setting, raising the temperature only a handful of degF on average. Of course, slapping on a second one to double the wattage is easy enough, but with 20+ gallons still being considered “nano”, festooning a tank with them kind of defeats the purpose. If I were to do up another one, I’d probably base it on a beefier power source of ~25W or so.

7-10W will keep one of these little plastic Triops kits toasty under pretty much any conditions, though!

This leads to the second, more minor caveat, which is that PCB trace resistors are rather low precision, the actual resistance (and thus heat output) from a given supply will vary between batches and even between boards. Across two batches of 3 OSH Park boards each, one had a spread of 4% resistance and the other about 50%, and I can’t tell you which of those cases is the outlier, if any. As long as the power supply has enough grunt to cover reasonable variations, this is not a big deal and the thermostatic control (a way to not suck, remember?) will maintain the right temperature regardless. But, it becomes an issue if you’re trying to eke every last drop of power from a marginal wall-wart without toasting it.

Design Details and Lessons Learned

Below is the full schematic. There’s not a lot to it (and the long zigzag at right represents the PCB trace heater, of course), but it’s still “complex” compared to the industry standard. Hey, at least it doesn’t have IoT and a phone app!

This is something an EE1 can probably design in their sleep, but a few minor real-world gotchas worth noting.

  • USB phone chargers are switching regulators and can be noisy, and USB cables vary dramatically in quality. In particular, long or poorly-made cables will exhibit a significant voltage drop when the heating element is on. Besides reducing output power, this can cause the tank temperature sensor to oscillate as its interpretation of the setpoint resistor is somewhat voltage-dependent, at least in the short term (the voltage drop when the heater turns on causes the setpoint to appear slightly lower, turning the heater off, which causes the voltage to rise again, etc.). The RC filter (R8, C2) on its power rail mitigates both the inherent noisiness of value-engineered USB chargers and the voltage ripple of heater operation. Note that I didn’t bother with filtering the overtemp sensor, since (you shouldn’t be tripping it anyway and) its exact setpoint is less critical.
  • The outputs from the two sensors are ANDed together with an explicit gate vs. using some more clever scheme with diodes. Mainly this allows the all-important tank temperature sensor to have minimal output loading by not driving the indicator LED directly. This avoids self-heating of the tiny sensor IC, which can be significant even at a handful of mA for the tiny die inside. Again, the overtemp sensor is less critical and does drive an LED directly, although at a fairly low current.
  • It doesn’t show on the schematic, but I designed the trace resistor to err on the high resistance side, and added a few sets of trim jumpers in the form of closely-spaced vias that could be soldered across to short neighboring traces. This came in handy as the trace resistors had a fair bit of tolerance and it became clear that I needed to extract as much heating power from the power source as possible.
  • Remember that the heater side needs to press flush against the tank, so all components (including indicator LEDs) are on the other side of the board and likely facing away from the viewer. To make the LED indication visible I just added openings in the soldermask on both sides of the board and mounted the SMT LEDs upside-down. This produces a pretty neat, subdued effect with the LEDs producing a diffuse glow through the board material in the shape of the soldermask opening. You can buy SMT LEDs specially designed for downward-firing, but simply flipping most standard ones over seems to work fine too, and shining into the PCB material they are plenty visible from both sides.
  • Yes, this could totally be done on a flex PCB for contoured tanks. All of mine happened to have flat surfaces handy, so I didn’t bother.

Potential Safety Flaw in Home Depot HDX brand wire shelving units

Asbestos undergarments? Check.

Lawyer-proof socks? Check.

Here we go.

I got a small safety lesson over the weekend I wanted to share. Officially, it’s about an extremely common design of wire-rack shelving units, but the real safety lesson is to double-check the workmanship of load-bearing products with a critical eye, because the manufacturer may not have!

Here, a simple cheap design choice combines with lax quality control inspection to produce a potentially unsafe product. The TL;DR is that insufficient and off-center welds are used as a primary load-bearing element on the Home Depot shelf design indicated below, allowing the shelves to fail in a way that dumps the contents (for the product described below, up to 350lbs, ~160kg, per shelf) off the shelf, and potentially onto the person who just put them there.

The basic wire shelving unit design I’m referring to dates back to at least 1970 and can be seen in US patent 3,523,508. While the one I purchased, depicted below, came from The Home Depot, you can buy a substantially similar product from most big-box retailers. They consist of a set of typically 3-5 rectangular wire-rack shelves that slip over a set of four corner support poles with grooves at intervals. Each shelf has tubular metal sleeves in the corners to receive the poles, and assembly consists of snapping a set of plastic rings (clamshell or mating half-rings) onto the poles at the groove corresponding to the desired shelf height, then sliding the shelf down the poles until it snugs in against the plastic rings. The plastic rings and/or the matching corner sleeves in the shelf are very slightly tapered, causing the shelf to wedge firmly into place and support heavy loads without sliding down. If you remember your grade school science class, a wedge is a classic simple machine, in this case converting the downward force of objects on the shelf into an outward force at the support sleeves, at a substantial mechanical advantage. With the narrow wedge angle and small size of these sleeves, the forces they must bear are significant to say the least.

The product photos below show the “HDX 5-Tier Wire Garage Storage Shelving Unit in Black (36 in. W x 72 in. H x 16 in. D)”, model #  21656PS-1, although as of this writing the website shows dozens of nearly identical products with various names and model numbers, differing in color or number of shelves (or not at all). This unit claims a load capacity of 350lbs (~160kg) per shelf, or 1,750lbs total. While setting the first shelf with a healthy downward hand-shove in each corner, I heard a small ‘tink’ sound as welds on one of the corner sleeves gave way. With these welds popped, slight hand pressure is enough to peel the corner sleeve open and send the corner of the shelf floorward (the plastic ring should not be visible above the sleeve at all).

The first obvious thing to notice on the Home Depot version is that the load-bearing sleeves are not continuous tubes of metal as shown in the original patent, but were rolled from sheet stock and have a seam. The small pair of welds serves double duty of fixing the wire shelving to the corner sleeve and holding the sleeve closed at the seam. Kind of a penny-pinching design choice, but it’s probably OK as long as those welds are solid…

The first set of broken welds, suffered before the shelf was fully assembled (let alone loaded) prompted a quick visual inspection of the other seam welds. In the photo below, the individual shelves are stacked alongside one another to show the variability in weld quality and placement. Holy wow!

The leftmost sleeve, now marked with red tape, is the same one that’s shown peeling open in the previous photo above, but without the force of the plastic ring it springs back to its original shape and the break is nearly impossible to see. The next, marked with yellow tape, is not yet broken (no attempt was made to assemble it), but the welds are so far off the mark that there is almost no material bridging the seam at all. This one is a disaster waiting to happen. Finally, the rightmost sleeves show more trustworthy welds, centered on the seam with adequate coverage on both sides serving to hold the sleeve closed. Ironically, each sleeve is pre-stamped with an NSF certification logo.

As previously mentioned, a lot is riding on these tiny welds: they bear the entire shelf load (or technically, 1/4 of it per sleeve, assuming the weight is perfectly distributed) via the outward force exerted on the sleeve by the wedging action of the plastic support rings. A failed seam weld will cause the shelf to tilt as that corner slides freely down its supporting rod, putting all the force as well as an unexpected bending moment on the remaining corners and, whether or not this results in a cascading failure, likely tipping the shelf contents onto the floor. Or, since this is most likely to happen in dynamic loading conditions, possibly onto whoever just placed the heavy thing there.

Hoping this unit was a fluke, I tried to exchange it for another of the same model. The employee working the returns counter brought out another and even invited an inspection before taking it home. Unfortunately, while the quality of the welds on the new unit wasn’t quite as bad as the first, there were still corners were only one of the welds traversed both sides of the seam at all. I left with a refund but otherwise empty-handed, apart from the associate manager’s business card and a promise to “run it up the chain”. We’ll see.

If you, dear reader, have a shelving unit like this already in use, I urge you to inspect it for the combination of seams at the shelf corner sleeves and shoddy welds holding them together. While welds are in general nontrivial to assess visually, even by experienced professionals, the process-control issues shown above are pretty obvious to inspection. That said, don’t ask me for advice on whether yours are “good” or “good enough” for “good enough to hold exactly 3 bags of concrete mix if set down gently”. Luckily, if in doubt, 1/2″ height pipe clamps will juuust fit between the typical shelf wires and could be used to bolster the corner sleeves – either as a permanent bit of due-diligence bodgework, or at least long enough to safely unload the unit if you’re not taking any chances.

DISCLAIMER: While the information above depicts a specific product, the underlying issue is not specific to one retailer or model number, and may occur on any unit with a similar design. This post and all statements it contains represents my personal opinion. It does not represent the opinions of my employer, my cat, The Home Depot, or any recognized safety agency. I am not an engineer (well, I am, but not a mechanical engineer), and this is not engineering, legal or any other sort of advice.

Tim Tears It Apart: SunGrow Betta Heater, a Sketchy Preset Aquarium Heater