I made this project as a universal plant-monitoring system based around Arduino. I also used a Grove shield which simplified the connections to the numerous sensors. You can easily replace this with direct connections into the pins of the arduino for a shallower form factor.
How it works
The system in basic takes a reading from a water sensor and temperature sensor. These readouts are displayed on the base mounted LCD. If the soil humidity is critical (this threshold can be adjusted), the screen will turn red and activate a pump driven by mains and a relay. The arduino attempts this pumping cycle 5 times by default before asking the user to replenish the water reservoir at the back. I used a small submersible pump simply because I had it lying around from a previous project - you can use any type. Small DC peristaltic pumps may be preferable because the inner parts do not actually come into contact with the water.
I read up and found that 8-10mm LEDs should be used in place of less powerful kinds for an effective growth light if you do not want this by the window. The light array consists of 10 RGB LEDs connected in parallel to supply the variation in colour. (70% Red, 25% Blue, 5% Amber) These are on a timer: 15 hours on, 9 hours off.
Connect the sensors to the pins below.
Connect the LCD.
Connect the relay.
Solder the LED array. (If you are using serial LEDs like I have, then you simply overlap each LED by one pin, so that the OUT pin goes to the IN pin and so on - no wires are needed apart from the positive and negative leads) I used a perfboard, using the horizontal rails for overlaps. I then fed all the positive and all the negatives through connection blocks to one unified connection to be plugged into the arduino. Be careful though, install a sufficient power supply (mine was 9V, 1200mA) BEFORE connecting the LEDs up. This prevents drawing potentially damaging amounts of current from USB.
If you are using the grove shield, the only soldering you'll have to do is for the LED array. NOTE: I used serial LEDs. If you use common cathode/anode the wiring is different. The reason for this is that when chained together, serial LEDs can still feed varied signals through the chain. I.e. red, red, yellow.
Start by testing the sensors and LCD. I have supplied an arduino sketch of my final program, though I would strongly suggest creating your own, especially if you have modified parts of the build. If you do choose to use the program, here are the ports I used. I have commented the sections where you can change these parameters.
►Water Sensor - A0
►Temperature Sensor - A1
►LCD -"I2C"on grove, this would require modification for direct pin use.
►Relay - D2
►LED Array Signal - D6
The final step is to remove the plug of the pump (if using mains) and install connections into the relay:
MAINS LIVE → RELAY → PUMP LIVE
MAINS GROUND → PUMP GROUND
I would advise enclosing the relay in its own self-contained, silicon sealed container for safety (water reservoir is close!). If you want, you can use a PowerTail here, but it will not fit in the base. NOTE: Do not seal the relay in or solder the wires yet, you need to complete step 3 first.
Check everything works (apart from the mains circuit), and you are ready to build the enclosure.
You can build this out of any container you like, as long as it is watertight. I had already found a plant enclosure, so I found a container that matched the width (they will fit on the same platform). Try to avoid making this reservoir much higher than the soil container, find both boxes at the same time (see next step).
Take the water container and install the pump. My pump does have suction cups, but it does not need to be removable as the cable will be glued to the container. Once I measured out enough cable, I drilled a hole in the bottom and fed the wire through. I then added silicon sealant around the outside. It is vital that this is water tight - test it first - as it sits on top of the base with live wires in it.
Finally connect pump tubing to the pump. This can be attached to the container, though this is unnecessary because we will need to insert it into the plant enclosure. You can now reconnect the wires to the relay circuit, which should also be sealed in an appropriate enclosure.
Start by drilling a hole in the back, near the top. This is for the pump tubing. Obviously measurements will be dependent on your pump, but make sure it is a tight fit so that the tube does not come loose.
Now add your sensors. I tried to keep them as far from the water nozzle as possible - it could damage them and will give false/inaccurate humidity readings if put too close. Again, an advantage to using the modular system I used is that each sensors has pre-drilled holes; I just made a hole in the plastic and added some small screws (taken from a servo horn mount). I would not recommend filling it with soil just yet.
The base is just a simple (closed) plywood box. Mine was the length of both enclosures put together. I would use screws for easy access. I also drilled holes for the programming jack so that it can easily be updated. Obviously you will need holes for the DC input, mains input and mains output (to the pump). Finally, you need an outlet for all the sensor cables. Confirm that all the parts will fit within your box dimensions before cutting. You could 3D print this but the LCD cutout will create a large overhang.
Now cut a hole in the front face to accommodate the LCD display. If you will not be using it all the time, you could also install a switch here. I cut sections out of the top and bottom panel so that the LCD screen was actually level with them. This meant I could decrease the height as much as possible. I only ended up using half the volume in mine; it was simply easier to create a full length box so that both containers were at the same level. I actually left the box open at the back because I was still testing it, but you can drill holes or simply cut a corner off to accommodate for the mains cables.
Before assembling this you can paint it any colour; I decided to cover it with tape afterwards.
Now you can put the soil and water containers on the base. These can be stuck with Velcro, or permanently with glue. (This depends on your design). Before performing the below, I would recommend calibrating the pump - it will overflow if soil is added now. My pump had an adjustable power. I set this to the lowest, before checking the connections and plugging it in. If you are using my program, I have commented the area where you can change how long each pump cycle lasts.
Next you can glue the light array to the soil box and fill it with soil (and seeds). Hopefully all the sensors work, and the pump responds accordingly. The lights need to be on a timer (verify that it stays on for 15 hours per day). Feel free to modify any part of the project - it can probably be improved or re-engineered to only occupy one plug, for example. You could also put a small ventilation fan in it, using readings from the thermistor. (In this design, it simply gives the user a readout).