Making something work on the bench, and making it work in the real world are often very different things. While the Dish-O-Tron 6000 has been an amusing companion on my dishwasher door for a few months now, it has proven to be somewhat unreliable. Making it more robust has been an interesting odyssey of tracing unpredictable behaviour, and learning the finer points of electrical noise. I’ve also learned a lot more about the weaknesses of the noble 555 timer.
The first two bugs were pretty rare, but common enough to be annoying. The battery life problem was just plain expensive! All three issues needed to be resolved for the Dish-O-Tron to be a practical device. I started by tackling bugs #1 and #2.
The first step was to see if I could reproduce the bugs on the bench. I started by rebuilding the breadboard version of the Dish-O-Tron, and running it through some paces. Everything checked out just fine- it worked perfectly on the breadboard, and never switched states spontaneously. So what's going on?
Perhaps there's something wrong with the construction of the original circuit. I ran the original Dish-O-Tron on the bench for several days, seeing if it would hold its states. It worked perfectly. This confirmed that there wasn't anything different about the breadboard circuit. Why would the device run fine on the bench, but not in the kitchen? That suggested that something about the kitchen environment was causing the problem. This picture looks like the Dish-O-Tron is on life support, which makes me giggle.
I took the breadboard into the kitchen and "installed" it alongside the real Dish-O-Tron, being sure to make it read the door temperature from the same location. I wanted all conditions to be identical except the physical location of the circuit (kitchen vs. bench). Success!!! Bug #1 reappeared in both the real device and the breadboard version! So there's something about this part of my kitchen causing the state to flip from Dirty to Clean at random.
So now it was back to research mode. I knew something in my kitchen was making the upper 555 reset, but not what. I studied up on the quirks of the 555 timer, and learned that when chaining them together, a decoupling capacitor is recommended on signal lines. Perhaps my spontaneous state changes are being caused by noise on the signal line between the two 555s.
I got lazy here and decided to forego rigourous testing to verify this theory about the source of the problem. I just jumped right in and put a 0.1uF cap on the signal line. You can see it lying sideways on top of the wiring, there.
Well, that turned out to be a wild goose chase. The problems persisted. A decoupling cap in a signal line is still good practice, so I left it there and moved back to research. I read everything I could find on known issues and gotchas with the 555. The evidence seemed to suggest that the 555 was picking up noise on pin 2, which is pulled to ground by the Clean switch. When the switch is open, this pin is supposed to be pulled high by the thermistor voltage divider. However, perhaps noise was getting in there somehow. A small cap tying the Set pin to ground might help.
Another possible solution to the noise problem (causing bug #1) was to put a 0.1uF cap between the Set pin and ground. I tested this on the real device, and success! The random Dirty-to-Clean flips (bug #1) finally went away.
I made that fix permanent, and moved on to the next problem!
So, the Dirty state was now stable. However, Clean was still a bit unstable. I noticed that Clean only became unstable after the dishwasher door had been opened following a cycle. That pointed the finger at the tilt switch I’m using to start the unloading timer. Could the tilt switch be giving false positives? I opened and closed the door repeatedly until the Clean state flipped spontaneously, then quickly put an ohmmeter on the tilt switch. It was closed when it should be open! That meant the little rolling ball inside the switch was getting stuck sometimes. Tapping the switch with my finger made it read correctly again.
I ran some tests on these little switches. I tried different ones, and ran a set of trials on the bench involving different rest angles and types of motion. I determined that basically they are all shit, and just won't work for this application. They are unreliable and very prone to the little ball inside getting wedged if the switch sits in one position for a while. In fact, I could reproduce this on every switch I tried. Hold it upside down and motionless for a full minute. Then gently turn it over, and measure the resistance. About half the time, it will remain closed, until you jostle it.
I needed something better than this rolling ball tilt switch. The old-school component for this purpose would be a mercury switch. However, as we all know mercury is very toxic, and mercury switches have essentially been phased out completely. They are not RoHS compliant, which makes them very difficult to get in the United States. A modern equivalent would be an accelerometer, but that would require a completely different circuit design. I needed a drop-in replacement for a simple mechanical switch that registers changes in angle. There are other rolling-ball designs, but I have no way of knowing if they would be any better, and I suspect they wouldn’t. A mercury switch is really what I need, but you can’t buy them in the United States any more. Or can you?
Overseas eBay sellers to the rescue! You can find various dealers (mostly in China) that are quietly shilling these things on eBay. I couldn't find them through any US mail order website, or normal retail channel. I don't necessarily recommend mercury switches, and I would change my design to not need one if I were to do it all over again. However, in this situation, it's just the ticket to solve the problem quickly and easily.
Out with the new, in with the old. A header and a couple of bits of insulation, and I now have a reliable drop-in replacement for my tilt switch. Thanks, globalization!
So that fixed bug #2 quite nicely! Now on to bug #3, the battery life problem. I considered circuit changes to extend battery life, but honestly the 555 timer is kind of a little pig, and I was never going to get battery life to where I was happy with it (six months or so). However, where there’s a dishwasher, there’s mains power, right? Why not just convert the Dish-O-Tron to run on mains? That’s exactly what I did, in fact.
I had an old 9V wall wart handy, so I built a little adapter that would connect to the wart and occupy the same space as the battery did. This way I could go back to running the Dish-O-Tron on battery if I wanted. I also put a fuse in there for good measure. Imagine trying to explain to my landlord that the house burned down because of the Dish-O-Tron 6000.
Here's the new "virtual battery" installed, and the Dish-O-Tron is working great. Put it back in the kitchen, and we're done, right? WRONG!!
I resumed normal use of the Dish-O-Tron with its new power source, but much to my frustration, Bug #1 reappeared! It was switching from Dirty to Clean all by itself again. Back to the bench!
By now, I knew how to reproduce Bug #1, so I brought the Dish-O-Tron back to the bench, and patched in bench supply power to see if my new wall wart was the source of the problem. Indeed it was.
A little bit more research taught me that wall warts are terribly, terribly noisy sources of power. With that knowledge, I went back to the kitchen, and messed around in the environment to see if I could recreate the problem. I found that if I flipped a nearby light switch rapidly, the Dish-O-Tron would flip spontaneously to Clean. That’s Bug #1, alright! I could reproduce it by introducing AC power noise via the nearby light switch. So clearly, I needed a cleaner power supply.
No more fooling around, now. I built a proper regulated supply, this time using a 12V wall wart and a 7809. I played with different combinations of filter caps to see what worked the best. I did all this testing in the real environment where the Dish-O-Tron would be operating, since I'd learned by now how important that was. I was going to be sure this time. I lived with a breadboard taped to my dishwasher for weeks to make sure this fix was going to hold. A good hack takes dedication!
That seemed to work very well once I got the right capacitor setup to support the 7809 regulator which was now supplying our juice.
I took the same "virtual battery" approach, but this time I built an entire regulated 9V power supply into the same space as the battery. I quite enjoy deadbug construction. It's a great way to save space and make something visually interesting. As you can see, I went with some pretty serious caps there. I wasn't taking any more chances, and had determined empirically that this combination worked well.
Here's the new power supply, mounted in the case where the 9V battery used to live. It's gettin' pretty crowded in there! Things are looking progressively messier, but if it works, it works, right?
I'm using a spare 12V wall wart I had in my junk pile. It's a bit on the large side, but it's white to match the Dish-O-Tron, which I liked. I really wanted a right-angle connector on the end, so I cut off the factory tip (which was the wrong size anyway) and made a 90-degree connector. I drilled a hole in the side of a normal tip, routed the wire out the side, and painted it white to match. I covered the connections in white heat shrink for strain relief and to cover the black leads. The connector plugs into a new jack I mounted in the bottom of the Dish-O-Tron.
Since I was in there reworking stuff, I decided one more tweak was in order. The Dirty light was a bit dim on the original design, which was intentional but always bugged me. The device spends most of its time in the Dirty state, and I wanted to save battery life. Now that it runs on mains, however, why not brighten it up?
I decided to halve the resistor on the Dirty LED. I couldn't get in there to replace it, however. Things were just too tight. So it was time to hack my own hack. I slipped a second 5k resistor in on top of the first, and soldered the leads to it, piggyback-style. That created a little parallel resistor network which halved the effective resistance. Science! If you look closely in this photo, just above the connector with the blue-tape label, there are two resistors crammed on top of each other. Presto, brighter Dirty light!
I took careful notes while I was making all these changes, and revised the schematic once I had it all working. Here’s Revision B of the Dish-O-Tron 6000. Meet the Dish-O-Tron 6000 EXTREME!
If you're really really observant, you may also notice that the activation transistor between the two 555s is now gone. I determined in testing that it wasn't needed, and could potentially be contributing to bugs 1 and 2, so I eliminated it. It was too difficult to extract from the PCB, so I just bypassed it with a short and clipped the connections to it.
For a better look, or if you’d like to layout a PCB, here’s the Eagle schematic file.
Have you ever had a prolonged debugging experience like this? Would you make other changes to the Dish-O-Tron? Let me hear about it in the comments!
Dish-O-Tron 6000 Extreme, chillin' in his native habitat
Glamour shot! Work it, baby!