<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>HEDW44004 on project392.net</title>
        <link>https://www.project392.net/tags/hedw44004/</link>
        <description>Recent content in HEDW44004 on project392.net</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Sun, 02 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.project392.net/tags/hedw44004/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Dishwasher: Controller Board</title>
        <link>https://www.project392.net/p/dishwasher-controller-board/</link>
        <pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://www.project392.net/p/dishwasher-controller-board/</guid>
        <description>&lt;img src="https://www.project392.net/dishwasher/controller.jpg" alt="Featured image of post Dishwasher: Controller Board" /&gt;&lt;script type=&#34;module&#34; src=&#34;https://www.project392.net/js/kicanvas.js&#34;&gt;&lt;/script&gt;
&lt;h1 id=&#34;a-brave-new-brain&#34;&gt;A Brave New Brain
&lt;/h1&gt;&lt;p&gt;My &lt;a class=&#34;link&#34; href=&#34;https://www.project392.net/p/dishwasher-introduction/&#34; &gt;dishwasher&lt;/a&gt; broke down and I set out to build a new brain for it. Made from reclaimed parts. In this post I will detail the design of the controller board that will ease me from the burden of washing dishes by hand. I&amp;rsquo;m going to kick off this story by outlining what hardware went into the design. If you&amp;rsquo;re more interested in the schematics and circuit board layout, scroll right down because that&amp;rsquo;s in here, too!&lt;/p&gt;
&lt;p&gt;The hardware for this project is extremely simple. It&amp;rsquo;s the kind of project most people would likely use an Arduino with a relay shield for. All it really is, is a simple microcontroller that controls some relays via low side &lt;abbr title=&#34;Bipolar Junction Transistor&#34;&gt;BJT&lt;/abbr&gt; switches, a couple of inputs and a simple mains connected power supply. While it was designed to fit into a (slightly modified) HEDW44004 dishwasher, it can be used for other applications as well.&lt;/p&gt;
&lt;p&gt;As always, I designed the board in KiCAD&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;The design presented here differs slightly from the version depicted on the photos shown on the blog. I made some improvements to the original design before I felt comfortable sharing it with the world.&lt;/p&gt;
&lt;p&gt;Before continuing I would like to dedicate a few words to safety.&lt;/p&gt;
&lt;h2 id=&#34;please-be-careful&#34;&gt;Please Be Careful
&lt;/h2&gt;&lt;p&gt;The controller board that&amp;rsquo;s shown here runs on mains power. Therefore &lt;strong&gt;safety&lt;/strong&gt; is important. Mains voltages can potentially be &lt;strong&gt;lethal&lt;/strong&gt;, so please thread carefully if you attempt to build this design or your own version thereof. Please keep the following precautions in mind.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t just assume I designed this device properly, because I probably didn&amp;rsquo;t.&lt;/li&gt;
&lt;li&gt;If you build or use the device, you do so &lt;strong&gt;at your own risk&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t do any work on the device when it&amp;rsquo;s connected to mains power. Always disconnect the plug.&lt;/li&gt;
&lt;li&gt;If you &lt;em&gt;do&lt;/em&gt; need to do any work while the device is live: use an &lt;strong&gt;isolation transformer&lt;/strong&gt; and do everything &lt;strong&gt;one-handed&lt;/strong&gt; with your second hand nowhere near the device.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Act responsibly&lt;/strong&gt;. Especially if you build the device for someone else to use. Don&amp;rsquo;t cut corners and take electrical safety seriously.&lt;/li&gt;
&lt;li&gt;Always make sure that the metal parts are grounded and the &lt;strong&gt;protective earth&lt;/strong&gt; lead is connected properly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With that out of the way we can move on to the design.&lt;/p&gt;
&lt;h2 id=&#34;cleaning-power&#34;&gt;Cleaning Power
&lt;/h2&gt;&lt;p&gt;The power supply consists of a mains transformer salvaged from an old wall wart. It&amp;rsquo;s a 12V, 1A transformer, but other (for instance lower power) transformers can be be used as well. If a lower voltage unit is used, the relays will have to be changed accordingly and the door detection circuit described below must be adjusted as well,&lt;/p&gt;
&lt;p&gt;The low voltage secondary &lt;abbr title=&#34;Alternating Current&#34;&gt;AC&lt;/abbr&gt; is rectified and smoothed to form the 12 volts rail for the relays. The 5 volts rail for the microcontroller is provided by a classic 7805&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; regulator.&lt;/p&gt;
&lt;p&gt;The mains parts are protected by a 7A slow blow fuse. One of the relays I used in my own build was only rated for 2A and needed additional protection. I addressed this by adding an external, inline fuse to the wiring from this relay to the load.&lt;/p&gt;
&lt;h2 id=&#34;unwanted-showers&#34;&gt;Unwanted Showers
&lt;/h2&gt;&lt;p&gt;A switch in the door locking mechanism cuts off the the power to the relay coils, turning off, for instance, the pump. This prevents the curious user from being squirted in the face by the spray arm. People generally don&amp;rsquo;t like it very much when they get deluged in hot, dirty water and an aggressive detergent. Also, as Isaac Asimov would say: a robot should not allow a human being to come to harm&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;In the original HEDW44044 the door switch would break the mains power, but I preferred to limit the number of high voltage wires inside the machine. Breaking the 12V supply to the relay coils has essentially the same effect as in both cases the power to the actuators is cut. In truth, the relay-disabling solution is slightly less safe as there is a non-zero chance that one of the relay contacts gets stuck or fused to a short. In that case the user is kindly advised to quickly shut the door and turn off the mains power manually.&lt;/p&gt;
&lt;h2 id=&#34;to-be-open-or-not-to-be-open&#34;&gt;To Be Open Or Not To Be Open
&lt;/h2&gt;&lt;p&gt;It would of course be practical for the controller to know that the door has been opened. It could then pause the program until the user is ready doing whatever they deemed necessary in the dish compartment. Luckily, with the relay coil voltage being interrupted rather than the mains power to the actuators, this can easily be done. To do so there is a 4.7V Zener diode and a series resistor (and an &lt;abbr title=&#34;Light Emitting Diode&#34;&gt;LED&lt;/abbr&gt;) in the 12V relay supply. This converts the interruptible 12V supply for the relays to a logic-safe voltage level. If the switch is closed, the controller will see a logic high on its input and can take appropriate action (e.g. sit and wait).&lt;/p&gt;
&lt;h2 id=&#34;relaying-commands&#34;&gt;Relaying Commands
&lt;/h2&gt;&lt;p&gt;A mismatched bunch of salvaged relays control the motor, inlet valve and heater element. They&amp;rsquo;re controlled by the microcontroller via low side BJT&amp;rsquo;s (BC547&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;). Catch diodes (1N4148&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;) prevent the transistors from releasing their magic smoke due to inductive kickback.&lt;/p&gt;
&lt;p&gt;Two of the relays are used as single throw switches. They control the water inlet valve and the heater element. Running the pump takes two relays. One single throw type to enable the motor and a second, dual throw type to set the direction.&lt;/p&gt;
&lt;p&gt;The pump in the HEDW44004 is a single phase AC motor with an auxiliary winding. A capacitor linking the two windings creates a phase shift between them. The motor either runs forwards or backwards, depending on which winding current is leading. This topology allows the direction to be set by powering either the primary or auxiliary winding (hence the dual throw relay). In forward operation the pump circulates water through the spray arm, in reverse it drains the water.&lt;/p&gt;
&lt;h2 id=&#34;synapses&#34;&gt;Synapses
&lt;/h2&gt;&lt;p&gt;Like any brain, a dishwasher&amp;rsquo;s brain must have some connections to the outside world. That means connectors.&lt;/p&gt;
&lt;p&gt;The low voltage signals enter via the ubiquitous &lt;abbr title=&#34;Japan Solderless Terminal (brand)·&#34;&gt;JST&lt;/abbr&gt; headers. I salvaged quite a few of them from various discarded audio devices. There are four of them on the board. One to connect the control panel and three for signal inputs. The input connectors are 3-pin headers. One signal input, one ground and one 5V supply.&lt;/p&gt;
&lt;p&gt;The mains input and outputs are connected using 6mm blade connectors. I used a nine position terminal block salvaged from an old motor cycle alarm, but discrete through hole blade connectors can also be used. The inlet valve, motor and heater element all connect to this header.&lt;/p&gt;
&lt;h2 id=&#34;not-so-brainy&#34;&gt;Not So Brainy
&lt;/h2&gt;&lt;p&gt;At the core of the controller board is an Attiny84A&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;abbr title=&#34;Microcontroller Unit&#34;&gt;MCU&lt;/abbr&gt;. It brings (among other features) the following to the table:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;12 &lt;abbr title=&#34;General Purpose Input / Output&#34;&gt;GPIO&lt;/abbr&gt; pins&lt;/li&gt;
&lt;li&gt;An 8-channel, 10 bit &lt;abbr title=&#34;Analog to Digital Converter&#34;&gt;ADC&lt;/abbr&gt;&lt;/li&gt;
&lt;li&gt;8k Bytes of Flash&lt;/li&gt;
&lt;li&gt;512 Bytes of &lt;abbr title=&#34;Random Access Memory&#34;&gt;RAM&lt;/abbr&gt;&lt;/li&gt;
&lt;li&gt;A universal serial peripheral&lt;/li&gt;
&lt;li&gt;4 &lt;abbr title=&#34;Pulse Width Modulation&#34;&gt;PWM&lt;/abbr&gt; outputs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s a simple 8 bit controller that will not be making miracles happen. It will quickly run out of flash memory if the programs gets too feature-rich. It won&amp;rsquo;t be bringing &lt;em&gt;all&lt;/em&gt; my household dreams to reality, but it  will certainly fulfill the recurring one in which I push a button to get my kitchen utensils cleaned.&lt;/p&gt;
&lt;h2 id=&#34;advanced-abbr-titleuser-experienceuxabbr&#34;&gt;Advanced &lt;abbr title=&#34;User eXperience&#34;&gt;UX&lt;/abbr&gt;
&lt;/h2&gt;&lt;p&gt;Household appliances can be equipped with a plethora of interfaces to interact with their users. Buttons, a touch panel or a projection display are just a few examples. My humble HEDW44004 however, got none of all that. The user will have to make their desires clear by tapping a single button. The dishwasher will in turn have a nice red LED at its disposal to talk back. There is also be a green LED to indicate that the machine is powered up. This prevents the user from repeatedly bashing the start button in increasing frustration in case of the power cord not being plugged in. (We&amp;rsquo;ve all been there, right? Right?).&lt;/p&gt;
&lt;p&gt;This minimalist panel is partly due to a lack of GPIO on the microcontroller but also because I didn&amp;rsquo;t feel like replacing the original front panel of the dishwasher.&lt;/p&gt;
&lt;p&gt;The LEDs and push button are all off-board components, located on a daughter board behind the front panel of the device. There is no design included for that board as it&amp;rsquo;s dead simple and can perfectly be made out of perf board.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.project392.net/dishwasher/control-panel.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Control panel&#34;
	
	
&gt;&lt;em&gt;Highly sophisticated control panel&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;schematic-design&#34;&gt;Schematic Design
&lt;/h2&gt;&lt;p&gt;The schematic is quite straightforward. You can view it below in the KiCanvas&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt; viewer (or &lt;a class=&#34;link&#34; href=&#34;https://codeberg.org/project392/dishwasher-project/src/branch/main/pcb/131-4_rev-1_design.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Download&lt;/a&gt; it in &lt;abbr title=&#34;Portable Document Format&#34;&gt;PDF&lt;/mark&gt;).&lt;/p&gt;
&lt;kicanvas-embed controls=&#34;full&#34; theme=&#34;kicad&#34;&gt; 
  &lt;kicanvas-source src=&#34;pcb/dishwasher controller.kicad_sch&#34;&gt;&lt;/kicanvas-source&gt;
  &lt;kicanvas-source src=&#34;pcb/mains-connector.kicad_sch&#34;&gt;&lt;/kicanvas-source&gt;
  &lt;kicanvas-source src=&#34;pcb/controller.kicad_sch&#34;&gt;&lt;/kicanvas-source&gt;
  &lt;kicanvas-source src=&#34;pcb/relays.kicad_sch&#34;&gt;&lt;/kicanvas-source&gt;
&lt;/kicanvas-embed&gt;
&lt;h2 id=&#34;board-layout&#34;&gt;Board Layout
&lt;/h2&gt;&lt;p&gt;The &lt;abbr title=&#34;Printed Circuit Board&#34;&gt;PCB&lt;/abbr&gt; is a double layer board, but with some minor routing tweaks everything will fit just as well on a single layer board. However, a double layer board did not come at a premium at my fabricator and it made the routing process slightly easier.&lt;/p&gt;
&lt;p&gt;&lt;kicanvas-embed src=&#34;pcb/dishwasher controller.kicad_pcb&#34; controls=&#34;full&#34; theme=&#34;kicad&#34;&gt; &lt;/kicanvas-embed&gt;&lt;/p&gt;
&lt;p&gt;All the mains connected parts (transformer, AC headers and relays) are clustered at the upper region of the board. Routed slots prevent electrical creepage and also allow for the transformer, which is not a board-mounted type, to be held in place with zip-ties and double-sided adhesive tape.&lt;/p&gt;
&lt;p&gt;The mains tracks in the final design are exposed (i.e. no solder mask) to allow them to be tinned to increase their current carrying capacity.&lt;/p&gt;
&lt;p&gt;At the lower area of the board the microcontroller and low voltage GPIO are located. LED indicators for the voltage rails (5V, 12V and switched 12V) and the actuator states are positioned near the long edge of the board. This is also where the 5V linear regulator and the BJTs for the relays are located.&lt;/p&gt;
&lt;p&gt;The mounting holes are placed at the corners of the board, as well as near the transformer to support the extra weight.&lt;/p&gt;
&lt;h2 id=&#34;build-it-yourself&#34;&gt;Build it Yourself
&lt;/h2&gt;&lt;p&gt;Can&amp;rsquo;t wait to upgrade your own dishwasher? Or maybe you have some other project with three mains powered actuators and a couple of sensors? You&amp;rsquo;re in luck, because this dishwasher brain is freely available on my &lt;a class=&#34;link&#34; href=&#34;https://codeberg.org/project392/dishwasher-project&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Codeberg repository&lt;/a&gt;. It is licensed under the &lt;abbr title=&#34;Conseil Européen pour la Recherche Nucléaire&#34;&gt;CERN&lt;/abbr&gt;-&lt;abbr title=&#34;Open Hardware Licence, Strictly Reciprocal&#34;&gt;OHL-S&lt;/abbr&gt; license, which is included with the design files. &lt;abbr title=&#34;Too Long; Didn&#39;t Read&#34;&gt;TL;DR&lt;/abbr&gt;: You can copy, build, modify the design, but please open source your version as well.&lt;/p&gt;
&lt;p&gt;Next week&amp;rsquo;s post will be about some hardware modifications I made to the HEDW44004. After that I&amp;rsquo;ll wrap this series up by discussing the firmware.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.kicad.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KiCAD&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://duckduckgo.com/&amp;amp;q=7805%20datasheet&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;7805 Datasheet&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://en.wikipedia.org/wiki/Three_Laws_of_Robotics&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Asimov&amp;rsquo;s Laws&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://duckduckgo.com/&amp;amp;q=BC547%20datasheet&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;BC547 Datasheet&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://duckduckgo.com/&amp;amp;q=1N4148%20datasheet&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;1N4148 Datasheet&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://duckduckgo.com/&amp;amp;q=ATTINY84A%20datasheet&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Attiny84 Datasheet&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:7&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kicanvas.org/home/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KiCanvas&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:7&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
        </item>
        
    </channel>
</rss>
