saved by a capacitor
Wednesday, October 11 2006
A woman came over today to have her laptop "cleaned up" and she wanted to hang around and watch so she'd know how to do it. That was fine with me, though I move fast and there was no way for her to keep up. It turned out that her biggest problem was Norton Internet Security. This wasn't the first time I'd seen a computer rendered almost unusuable by this particular cancerous mass of programming malpractice. It doesn't take much web research to find out that Norton Internet Security is hated by all who know it's on their computers. Unfortunately, the reviews written by computer publications are part of the system of malpractice that permits Norton Internet Security to thrive in a world full of people not paying attention. It's analogous to the relationship between the compliant media (especially Fox News) and the Bush administration: they enable each other while consumers/citizens get screwed.
The sensor responsible for starting my solar collector pump on sunny mornings is a probe from a digital meat thermometer. It's a long, curved spike that I've used to penetrate the insulation around the output pipe on my original homebrewed solar panel. The cord leading out of the probe is made of braided steel, presumably to withstand oven temperatures. The connector it uses to plug into a digital thermometer readout is a male subminiature phone plug. But instead of plugging into a digital readout, it plugs into a subminiature jack to which I've soldered wires running in a telephone cable coming up from the basement (some 80 feet of wire away). One of these wires connects to one of the six analog-in pins of my Arduino controller, which runs a 6,000 byte program that determines when solar heat sufficiency can be said to exist. The board doesn't itself decide to turn on the circulator pump; that decision is the responsibility of 19th Century technology: thermostats, relays, and rotary switches.
Aside from the recent upgrade to microcontroller-based decisionmaking, this system has been working reasonably well for nearly a year. One of the problems it has faced, though, is shorting from rainwater. That female subminiature phone jack is usually protected from the elements by being tucked under the solar panel, but sometimes it's exposed, particularly if I've been working and left things in a sloppy state. That would be a good description of the aftermath of my recent drive to install the Arduino board.
So today when it rained, the phone jack quickly shorted out, causing resistance across its wires to plunge. This had the effect of simulating a sunny day, and the circulator pump ran for hours. It should be noted, though, that this had relatively little effect on the water in the hot water tank. Its heat exchanger coil is at the bottom of the tank where the coldest water sits, and it's possible that this water was actually warmed somewhat by passing through the panel, since the air temperature today was higher than the average temperature of the rock (and thus the well water) at this latitude.
This situation was a good test for one of the provisions of my sufficiency algorithm. In cases when the pump has been running for fifteen minutes yet no hot water has arrived in the basement, the algorithm considers the solar loop "frozen" and stops the pump for an hour and then tries again. This is to handle bitter cold mid-winter conditions when the antifreeze-laden hydronic fluid is too cold to flow. Waiting an hour gives the sun (or perhaps heat tape) a chance to raise the fluid to a flowable temperature. Since the panel was detecting heat because it had been shorted by the rain, the algorithm should have shut down the pump fifteen minutes later when the hot water never materialized in the basement. Strangely, though, the pump wasn't shutting off no matter how long I waited. Everything had worked fine "in the laboratory" (literally), but once hooked up to the relays and such the algorithm was failing.
I changed the constants in the algorithm so that the "loop frozen" determination happened after only 20 seconds and then watched the data stream (a list of temperatures and sufficiency states presented every two seconds) coming back from the Arduino. Something fishy was going on. Every time one of the sufficiency states acted in a way that turned off a relay, some jumbled characters would come back on the serial line from the Arduino, usually followed by a long pause in the transmission. There was nothing in my code that should have caused this to happen, so I was clearly looking at a symptom of hardware trouble. Was there crosstalk between the digital outputs and the serial lines? I searched in vain for anyone else having this experience and decided it must be a problem with my particular ATMEGA8 processor. So I swapped it out with another I had handy. This didn't fix the problem. Next I tried controlling the relays with a different set of output pins, but that didn't help either. I ended up back upstairs in the laboratory trying experiments with the algorithm remotely across that 130 feet of USB line, bringing my well-practiced code debugging skills to bear.
It was a good thing that one item I'd included in the data stream was the uptime of the Arduino in milliseconds. I don't know how long I watched that datastream before realizing that the uptime was being reset to zero every time there was an output-related data glitch. The Arduino's signals to the relays were causing such sharp powerline glitches that the board was resetting! I tried fixing the problem with a diode, and when that didn't help I installed a 1000 microfarad capacitor, and only then were my problems history. This simple issue had devoured hours of my life.
I should have known better. Back in 1984 when I had to build a replacement for my VIC-20's power supply brick (it needed five volts at two amps and nine volts at one amp as I recall). My replacement worked fine, but periodically the computer would lock up or reset, behaviors that, though familiar to computer users today, were virtually unknown back then. After putting up with this unreliability for several weeks, it eventually dawned on me that the computer was crapping out whenever one of the pumps in the basement cut on. Clearly this was causing a voltage drop on the makeshift household power grid. The simple addition of a large electrolytic capacitor across the pre-regulated DC lines solved the problem so perfectly that I've had a particular fondness for electrolytic capacitors over the subsequent 22 years.
I've noticed, by the way, that electrolytic capacitors of a certain capacitance and voltage rating have shrunk over the past 22 years. This shrinking has been nowhere near as dramatic as the shrinking of hard drives, transistors, and memory chips, but it is noticeable. The 1000 microfarad 25 volt capacitor I used to fix my Arduino powerline glitch issues was salavaged from a 2400 baud external modem built in 1994. It was 0.75 inch long and 0.375 inch wide. A capacitor with a similar rating, salvaged from equipment built in the 1970s, was used to fix my VIC-20, and it was two inches long and an inch wide.
For linking purposes this article's URL is:feedback
previous | next