Plant Watering Timer

This page last updated: 15 March 2016.

I had been looking for something that would remind me to water the plants.  I didn't want an app, or anything that sensed the need for the plant to be watered, I just wanted a thing that would raise an alarm every three days.  This doesn't appear to be a need that anyone has anticipated, at least not that I could find on the web.  Discussing this over lunch at work it became an excuse to play with a PIC microcontroller from MicroChip.  I ordered the following from RadioSpares:
Half a day's work with some vero board, single-core wire and 0.1" pitch connectors gave me this:

          board bottom of

Another couple of hours with a very fine soldering iron and controlled breathing gave me this:

board with
          TSSOP chip mounted on carrier

The above shows my second attempt to mount the TSSOP chip on the carrier board: be very careful never to get a solder hair between the pins of the chip, you will never be able to get it out and you're done for.  And obviously don't solder the carrier board to the base board until you're sure all is good with both parts.

I would give you a schematic but there's really nothing to it: the power and ground come out to the connector bottom-left, USB comes out to the connector middle left, the debug connector comes out to the connector on the right and the IOs lines are brought to the area of board on the left hand side so that I can mount the few other components there.


Now, some software.  Go to the Microchip website and download the MPLAB X IDE, the XC8 compiler and the MLA libraries.  Strictly speaking you don't need this latter but, since there is USB on the chip, I decided that it was worth getting the USB stack running, if only for debug or for future projects.  This turned out to be the biggest pain.  The MLA libraries are huge and do everything, making it very difficult to understand how you pull out just the bit you want and how that bit works.  In the end I followed some advice on the web and basically copied in what looked like relevant USB files, pretty much one by one, until I had a set  of USB client files that would compile.  Then I could see what's what.  The code I ended up with can be found on Github here:

After discussions over lunch at work the following week the spec changed a little.  John suggested that, rather than flashing an LED, the device should raise a flag when the time is up.  This makes sense since no power is consumed by the alarm being on, only by the act of it coming on.  He was thinking of a relay modified to release a catch holding back something spring loaded but I'd chosen a low voltage PIC (for power saving) and none of the relays I could find would work down to 3 Volts.  In retrospect, I could have employed a supercap but what I decided to do was use one of those tiny motors from a toy helicopter, which will run down to almost 1 Volt.  I happened to have just such a motor in a broken remote controlled wasp-thingy, with some useful gearing attached:

Motor with gearing

Driving the motor required a transistor plus a couple of resistors for protection.  Here is the whole circuit mounted on top of the battery box with some velcro.

Board mounted on battery box

Current-wise, when running from its internal 31 kHz clock the board takes 20 to 30 uA.  That was measured with the spare IO lines run as inputs and not grounded, since I wanted to keep my options open.  In the code archived above the IO lines are set as outputs instead, which might or might not be better.  Either way I don't think that current consumption is likely to be an issue with two 1800 mAh AA cells in the box.  So, finally here is the whole thing, mounted on a piece of wood that I can place on a shelf:

Finished timer

And to prove that it works, here's a video of the timer running with a 4 second timeout:

Operation: the period timer in the PIC goes off and switches on an IO line which allows the motor to draw current via the transistor. The flag arm is turned as a result and the flag raised until it operates the microswitch (I just picked one from Radio Spares that had the very lowest on-pressure).  The PIC detects this and switches off the IO line then puts itself back to sleep.  Resetting the arm causes the microswitch to release, waking up the PIC, which starts the period timer once more and then puts itself back to sleep. And repeat.

Back to Meades Family Homepage