This is the second part of our Laundrino project. This part is a wireless remote unit that displays the same information as the front of the washing machine, which it gets from the Laundrino 'server'.
The remote is a battery powered cut-down Arduino, which means it's designed to be super power efficient. Using an Arduino with batteries can be done a number of ways, but most of the simplest ways are actually quite inefficient. Further, the actual code running on the chip has a huge effect on the power consumption of the whole circuit. In this project, we haven't done absolutely every last thing to reduce power consumption, but we've tried to address the biggest things.
First of all, let's have a look at the finished product:
The remote has a series of LEDs which mirror the indicators on the front of the washing machine (you can see the washing machine in question in the server article). There's also a push button at the bottom, which switches the remote on. That means you can load up the washing machine and start the programme, then find the remote and push the button to have it turn on. We've arranged it so that it stays on until the washing machine turns itself off (which turns all the lights off). When that happens, the remote also turns off.
The Remote Circuit
The remote, like the server, is a cut-down Arduino, with an Atmega chip, a crystal and a few other components. There are six LEDs, a push button and a power supply circuit. The power supply is based on an LT1303 step up voltage regulator, with an additional transistor on it's output so we have a proper shutdown facility. This means there's a way to completely shutdown the main circuit, so we can set the circuit into a super-power saving mode which we'll use for the days an hours between wash cycles. We receive wireless messages from the server by use of a radio receiver module.
Here's the full circuit diagram:
And here's a picture of the innards of our circuit:
The Power Supply
The power supply is fairly involved because it uses a step-up regulator (rather than the more common step-down). This makes the supply very efficient, but means it requires a slightly unusual component: an inductor. Thankfully though, the circuit is pretty straight forward, and in fact very close to the 'typical circuit' you'd find in the regulator's data sheet. We add a transistor onto the output stage; we use a general purpose PNP transistor because they're cheap and plentiful. Essentially, pulling the base of the transistor to ground makes the transistor conductive, which means that current flows from the battery and regulator side of the transistor to the main circuit side. This is coincidentally about the same as the LT1303's shutdown pin's functionality - if you pull it low, the chip shuts down and reduces it's power consunption to a few microamps. By combining the two, we ensure that the battery absilutely doesn't pass any current to the main circuit when we want to shut the circuit down.
In our actual build, we've separated the power supply from the rest of the circuit. This was mostly for space reasons, but means it's easy to see that the power supply has battery connections, power and ground outputs, and a shutdown signal wire (in the picture, we also have a "battery out" wire which isn't connected to anything - we used it a bt during development, so left it there in case we needed it again.
In this circuit, we use the same sort of cut-down design as we used in the server. Once again, we had to solder the chip directly to the board because there's not much space in the box. Again, we're using a resistor on the reset pin so we can do a quick reset by touching the reset pin. We've also put some pins in place so we can connect a serial port if we want to.
Inputs and Outputs
Here we have six LEDs and a radio receiver. The LEDs we used are arranged to be the same colours as the ones on the front of the washing machine. The different colour LEDs aren't all the same brightness, and all need different currents; through a process of trial and error, we found values for the current limiting resistors that made all the LEDs about the same brightness. We deliberately tried to make the LEDs dimmer than their full brightness, in an effort to save a little bit of battery power. The LEDs are connected to digital outputs on the Arduino; we've left all the analogue pins unused.
We receive instructions via the RF receiver module. Because we're short of space, we ended up slinging it on the bottom of the board. It still really just provides one pin which we have to connect to an input on the Arduino.
The program we're running is quite complex because it has all sorts of power saving features. We can skip a lot of those details until later. At a high level, the software starts up by holding the power supply's shutdown input low (which means the circuit will continue to receive power!). After that, it does some setup, some power saving setup and configures the VirtualWire library to receive data.
The main loop of the program startup up by "looking" for a transmission from the server. Until the first message is received (or a timeout is reached), the client performs a "swisher display". This is simple LED display where each LED is lit in turn to indicate it's doing something, although not yet able to show the state of the washer itself. Once a message is received, the LEDs are switched on and off to represent the state of the lights on the front of the washer. If we don't receive anything for a timeout period, or we receive successive zeros (meaning there are no lights on the washer) then the software commits electronic suicide by pushng the power supply's shutdown input high. This makes the power supply shutdown, causing all power to the circuit to cease, and so (in a way), the program stops.
In addition to all of this, the software uses a handful of power-saving techniques, which we've talked about in a pevious article. The idea is that we set up the Atmel chip in a power saving state - that's matter of setting unused pins as inputs and pull up resistors, turning off parts of the chip that we don't need and most important of all: setting the chip's clock speed to half (8Mhz). All of this means the chip consumes a lot less power while it's running than it normally would do. However, these savings aren't free - we have to make some sacrifices and changes to accommodate the savings. The biggest issue we have to face is that the clock speed reduction means everything runs at half speed. The millis() and delay() functions now run at half speed, so a delay(100) actually waits 200ms. Also, the interrupt that the VirtualWire library uses runs at half speed, so we have to set it up to run at double the speed we really want.
We picked a small box for our receiver. In hindsight, we should probably have picked a slightly larger box! We found that getting the LEDs into the box meant we had very little space to fit the main circuit. Once we'd got that figured out, we found ti hard to squeeze in the batteries and power supply. We ended up having a bit of spare space on the main circuit board, although the height of the capacitors and inductor meant we couldn't have used it for the power supply. We did save a bit of space by putting the (comparatively large!) receiver module on the bottom of the board.
Making it All
Click here to add (nearly) all the components required to make this to your basket. You can adjust quantities, or add more things into the basket later, and you won't be charged unless you complete the checkout procedure.