Making a Computer Controlled Greenhouse

 
 
 

   This project actually started because I had just bought a new PC leaving my old one doing nothing but sitting in a corner. It was still a perfectly good PC running windows XP at a reasonable speed for all but the most demanding of applications and I was determined to use it for something. The something was based on an idea I had some time ago to automate my greenhouse. I got this idea after fitting electric windows which opened and closed at the flick of a switch rather than boring old window stays. It created an opportunity for automating the ventilation function.
As I saw it there were four areas I had to work on to make this project happen.
1. Decide exactly what I meant by automating the greenhouse. i.e. the specifications
2. Choose / design the sensors and actuators
3. Decide how to connect all these to the PC
4. Write the software

   Seems simple when you say it quickly ! Anyway, setting about this in pseudo professional style here were my thoughts on the four areas starting with the specifications I decided on.

What it should do.
Temperature: The greenhouse works best when the temperature is not too hot and not too cold. Sounds simple but in the spring and autumn you can easily have a wide range of temperatures from the cold in the middle of the night (especially in March) to the excessive heat of the day when the sun is shining (greenhouse effect and all that !). Currently, when the sun’s out and its starting to cook the tomato plants I usually open all of the windows which has the desired effect. Problem is being there when they need to be opened and not being at the shops or down the pub. Also at night remembering to close them again is, shall we just say, challenging. (Probably amnesia from all that beer down the pub). So, the windows should open automatically whenever the temperature gets to a certain level and close again when it falls to a lower level.
Watering: Surprisingly plants need watering ! Not when you want to water them but actually when the soil they are in starts to dry out. Too many plants are ruined or their growth reduced due to under or over watering.. I’ve tried over the years with various drip delivery systems but they inevitably deliver either too much or too little depending on the ambient conditions and I can never adjust them to get it just right. They also suffer from the hard water in our area causing blockages due to scale build-up. The only solution is to monitor the “dryness” of the soil and automatically deliver water when it gets to an appropriate dryness. (this sounded like it was going to be a tough part of the spec to meet).
Humidity: As any greenhouse gardener will tell you the humidity of the air plays an important role in many aspects of plant welfare. Some plants are very tolerant of an arid dry air while others suffer in this environment. Whilst not as important as the soil dryness I felt that most of my past success with some plants was down to my attention paid to humidity and it should be included in any automated system. Therefore I needed to spray a mist of water into the air whenever the humidity falls below a certain measured level. (again sounded tough).

Connecting to the PC
    I decided that the method of connecting my (as yet unspecified) sensors and actuators to the PC should be done first in case I had to choose specific devices to match the interface unit. I opted for a USB board product called a DigiBee which provided a convenient way of connecting 16 inputs and 16 outputs to the PC. I also purchased a switching adaptor board to go with it called a BeeDriver. Although I could have probably made the switching adaptor myself, it offered a convenient way of directly connecting higher current devices via screw terminals. I had considered finding an analogue input device for measuring temperature etc. but decide this was a bit of an overkill since all I wanted to know was when a pre-determined temperature threshold had been reached. Before I firmly decided on the digi-bee I had to be sure I could use this approach for the other inputs. What follows are my designs for all of the required sensors, confirming that all I needed was digital type inputs..

Input Sensors
Temperature Measurement.
    The temperature sensing device used was a simple 5k thermistor purchased from an online store (25p). The circuit I used is shown below.

    The principle of the circuit is very simple. The thermistor forms one half of a voltage divider which is connected to one of the inputs to a voltage comparator (1/4 LM339 also from online store(30p) ). The other input to the comparator is a fixed voltage set by the potentiometer. Whenever the thermistor decreases in resistance due to a rise in temperature by enough to make it’s voltage divider produces a voltage greater than the reference one, the comparator output flips from 0 to 5v. This output is connected to one of the digi-bee inputs to be read by the computer. By setting the fixed voltage reference potentiometer I could set the desired switching temperature. I considered using just one threshold (i.e. comparator) but eventually decided on two to allow me to have two levels. One for detecting too hot and one for too cold, with an assumed okay region in between. This avoids the constant on-off switching around the desired temperature. One LM339 was all that was needed since it has 4 comparators in the same DIL package.

Humidity Measurement
    Getting a measure of humidity was not as difficult as I had anticipated. I used an SRHR233 sensor (from RS Components (£3.40)) which is a resistive humidity sensor which operates very like a thermistor. i.e. the more humid the air, the lower the resistance. This allowed me to use the same circuit I had used for the thermistor with just a change in the resistance values. Again I decided to use two comparators, one for too humid and one for too dry. This used up the two remaining comparators on the LM339 device. (not bad value for 30p). circuit shown below..


Soil Dryness Measurement

Again the object here is to determine when the soil has dried out enough to warrant watering rather than actually measuring it’s “dryness”. The principle used was based on the fact that dry soil has a much higher electrical resistance than moist soil. To evaluate this I inserted two lengths of copper wire about 10cm long and 1cm apart, into a plant pot and connected my meter to them to measure resistance. The copper wire was simply stripped out of some heavy gauge twin and earth cable I had lying around my garage.

    I measured the resistance at about 80K with the soil fairly moist and , when left to dry out, the resistance increased quite sharply to several MegaOhms. Virtually an open circuit. This made the detection circuit fairly easy to design and in fact, was yet again based on the good old LM339 comparator. Essentially it is the same as the circuit used for humidity measurement except the humidity detector is replaced by two copper wires in the plant pot.
Once I had the basic moisture detection sensor working I realised that I should really use a number of them since, like most greenhouses, I have a large number of separate pots, troughs and tubs. It would however be impractical to give every pot it’s own sensor so I decided that the best approach was to put one sensor into each type and size of pot. My assumption was that pots of similar size with similar plants would dry out at similar rates. I also had to try and arrange these pots together in these similarity groups to make it easier to apply watering when that particular group needed it. In the end I managed to “make do” with just four groups (matching the number of comparators on the second LM339).

Control Outputs
Water Valves

    The controlled outputs in my system were the Motorised windows (3 off) and Solenoid operated water valves (5 off). As far as driving these is concerned it was simply a case of connecting them to some small pcb relays which were then connected directly to the BeeDriver terminals of the digi-bee, taking care to get the polarity correct as shown in the diagram below.


    The solenoid operated water valves served two purposes. One was to turn on the plant watering system. The 4 valves corresponded to my 4 groups of “dryness monitored” plants. This allowed me to water only the group that needed it, when it needed it. The fifth water valve was to provide the humidity control. When on , this delivered water to an atomising spray mounted centrally in the apex of the greenhouse. It provided a very fine mist of water vapour, which actually proved quite effective in maintaining a good level of humidity.

Motorised Windows
    When I originally installed the motorised window openers some years ago, I arranged one switch to operate all three windows together. Although I could have left it like this and just used the one control I decided to go one step further by having independent control (partly influenced by the fact that I still had 9 unused outputs on the Bee Driver unit). This would allow me to vary the amount of ventilation/cooling in three stages.
The connection of the motors was identical to the water valve solenoids except that each motor required two relays; one for forward and one for reverse operation. The motorised openers had their own built in over run limit so they automatically disconnected the appropriate input when the window was fully open or fully closed. This meant that all I had to do was ensure they were turned on for “long enough” to reach that limit. This was about 15 seconds (a job for the software).

    Connecting the DigiBee to the computer was (in keeping with USB devices) very simple. There wasn’t even a driver to install since Windows XP already has the necessary HID driver installed as standard. I installed the software which was supplied with the digi-bee (LogicLab) which offered a quick way to get up and running with basic combinational logic applied to inputs and outputs. It allowed quite a flexible approach to the control of the digi-bee outputs (if input 1 is on AND input 2 is off THEN turn output 2 ON…… that sort of thing). However I wanted to do my own thing with visual basic software so I used the DLL (dynamic link library) supplied on the installation disk. As a quick test I copied the example VB program on the disk into my Microsoft compiler and fired it up. This was a very simple program that just read the inputs and set the outputs but it let me make a start without any headaches. The DLL provided three functions, InitDgb(), ReadInputs() and SetOutputs(). This was all I needed for basic I/O, the rest was up to me.
Without going into the fine details of my VB program, the basic strategy was to set up a loop which repeatedly reads the inputs, determines the next state of the outputs and then sets the outputs. Where something needed a timed turn-on (eg the window closing) I simply turned it on for a counted number of loops. The loop interval I chose was one second.

Running the System.
    When I first ran my program nothing happened. After a moment or two of pondering, I realised that it was not hot enough for the windows to open, dry enough for watering or arid enough for spraying a humidifying mist. I then had to adopt a sensible approach to testing. I selectively disconnected each of the soil sensors in turn making sure the watering system came on each time. I got the hairdryer on to the thermistor and, lo and behold, the windows opened. Each in quick succession. I tried the hairdryer on the humidity sensor but nothing happened. I assumed that hot air could still be humid so I needed a better test. Disconnecting the sensor worked ok (i.e. the atomiser spray turned on) but I really had to wait for better weather to test it properly. All in all I was quite pleased with the functionality of the system but I still needed to fine tune the durations used for watering and humidifying to try and achieve a reasonable soil moisture balance. I also had to fine tune the temperature switching points for opening and closing the windows. I didn’t rush to do this, but rather waited for genuine hot weather conditions to judge the best settings.
    After running it for a few months I discovered one or two issues, which I hadn’t initially considered. In the very hot weather even with all of the windows fully open the greenhouse was still too hot and needed the door open. I considered automation this but decided instead to fit a fan to increase the airflow. The four independent dryness sensors were not really enough to represent the varying conditions within different plant pots. eg some plants like tomatoes, take large amounts of moisture very quickly out of the soil while others take much less, even for the same size pots. The solution would be to either fit more sensors or arrange the plants in common pots. I have also considered fitting and controlling a space heater for early season work where the temperature, particularly at night, needs a boost. This should be straight forward but does mean that I have to use an electric heating system rather than my old favourite paraffin.
All in all I can’t say the tomatoes taste any better but the greenhouse is certainly a much more interesting place to spend some time now. I am constantly trying new ideas for sensors and controls which can be easily added to the system in the optimistic hope of getting to the stage of a fully automated greenhouse.

Matt J. Cumbria

   
   

More info on DigiBee  and BeeDriver

   
                   
                   
 

.      .

 
 

© Copyright pc-control.co.uk 2004