Budget Seed/plant Propagator With Automatic Temperature Control
by PetervdPol in Living > Gardening
4133 Views, 33 Favorites, 0 Comments
Budget Seed/plant Propagator With Automatic Temperature Control
As a gardener I am stuck in winter. I do have a unheated poly-greenhouse, but that is not much use when it is freezing. The heated propagators in the shops are expensive and small; I wanted something bigger, with better controls and obviously affordable.
This is how I made my propagator:
List of materials I used:
- 2 Ikea Samla storage boxes, 78x55x18 cm, € 7,99 / piece (but any watertight box will do)
- Insulation material: foam board, left over, free, bubble wrap, also free
- 5 meter/75 watt Silicone heating cable, farm shop, used for keeping chicks warm, € 13,75 Any other type of heating wire can be used; look for cables used in e.g. a terrarium. It is however essential that the cable is insulated to prevent electrical problems with moisture.
- Sand, I used the 2 bags I already had laying around in the shed
- MH1210W Thermostat, about € 6,30, Aliexpress.
Total investment: € 36,-
Update: I added a Arduino with some sensors to monitor the propagator.
Parts I used:
- Arduino Uno (cheap clone)
- Arduino Ethernet shield (to talk to www.thingspeak.com)
- DHT22 temperature / Moisture sensor
- Soil Moisture sensor
- BMP180 barometer/thermometer to measure the outside temperature and (cool) airpressure
I had these parts around, and it seemed a nice addition. I have included the sketch I used below.
At IKEA I spotted the Samla series of storage boxes: very clear plastic, affordable and big enough for multiple seeding and cutting trays. Although they come with a lid I decided to use TWO boxes, with the top one upside down on the other as lid. This way there is have more air (climate) in the propagator and I will be able to grow bigger plants.
For bottom isolation I used a sheet of foam I already had; cut in pieces and handsomely put together with tape. Obviously you can use any other material. For top isolation I used bubble wrap.
Setting Up the Basic Construction
this is pretty self-explanatory: create an isulating box big enough to hold the Samla box. I used foam sheet and tape, obviously there are better and more handsome solutions.
Add the Heating and Electronics
Fill the box with approx. 5-6 cm of sand. I used sand I had left from fixing the driveway. Fine sand is better appearently.
Add the heating cable. Make sure the cable does NOT cross itself , does not touch the walls or touch another piece of wire. The 75 watt power is a wild guess. I will find out whether the heating capacity is large enough. Obviously the room temperature plays a crucial role here....
Carefully cover the wire with another 5-6 cm of sand. The sand will work as buffer and store heat.
Connect the thermostat; it took me a while to figure out how, I eventually used this tutorial and made a trial with a light. Success!
Warning: we are working with 230 volts close to water/moisture. If you don't know what you are doing: stop here.
Program the thermostat. The mh1210w, although cheap, is a wonderfully accurate piece of electronics. It is 0,5 degree celcius precise and one can program in a temperature trajectory. Mine is programmed to switch ON at 22 celcius and OFF at 24 celcius: ideal for propagating basil etc.
Put the sensor in the propagator, I suggest NOT to stick it in the sand, but to keep it a few centimeters above the sand in the air on a stick or something.
Ready.....?
And here is the finished product, very much prototype-style but it works! I will make it look better in the future if I have too much time. I have also covered it in bubble-foil as insulation as the propagator is in the annex where the temperature is just above 2-3 celcius. It took approx. 14 hours to reach 24 celcius, so the 75 watt heating element is powerful enough to raise the temperature with 20-22 degrees!
So far I have sown sweet red pepper, Basil, Parsley, Littele Gem salad and Coriander.
Things to do/wishlist:
- Add lights
- Monitor the RV and temperature with an Arduino/Nodemcu
- Add automatic watering & cooling (also Arduino stuff)
If anyone can help me with the automatic watering system: much obliged!
First Results After Four Days!
Four days ago I added seeds to the propagator. Some crops are already growing and germinating! I see cress (green plate) Rocket salad (right back) and Basil (left front) This is promising. Now I will add light.
Arduino Sketch for Monitoring and Talking to Thingpeak
The code below is based on work of others, I am not a programmer, but can do "cut-and-paste" programming. It works, and I am happy. Thinks to do: trigger actions based on what I measure e.g. run a pump. Eventually I would love to used this code in my greenhouse and/or veg garden. If you have ideas or knowledge: let me know!
<p>/*<br> Arduino --> ThingSpeak Channel via Ethernet</p><p> The ThingSpeak Client sketch is designed for the Arduino and Ethernet. This sketch updates a channel feed with an analog input reading via the ThingSpeak API (https://thingspeak.com/docs) using HTTP POST. The Arduino uses DHCP and DNS for a simpler network setup. The sketch also includes a Watchdog / Reset function to make sure the Arduino stays connected and/or regains connectivity after a network outage. Use the Serial Monitor on the Arduino IDE to see verbose network feedback and ThingSpeak connectivity status. Getting Started with ThingSpeak: * Sign Up for New User Account - https://thingspeak.com/users/new * Create a new Channel by selecting Channels and then Create New Channel * Enter the Write API Key in this sketch under "ThingSpeak Settings" Arduino Requirements: * Arduino with Ethernet Shield or Arduino Ethernet * Arduino 1.0+ IDE Network Requirements: * Ethernet port on Router * DHCP enabled on Router * Unique MAC Address for Arduino Created: October 17, 2011 by Hans Scharler (http://www.nothans.com) Additional Credits: Example sketches from Arduino team, Ethernet by Adrian McEwen */</p><p>#include <SPI.h><spi.h> #include <Ethernet.h><ethernet.h> #include <DHT.h><dht.h> #include <Wire.h><wire.h> #include <Adafruit_BMP085.h><adafruit_bmp085.h></adafruit_bmp085.h></wire.h></dht.h></ethernet.h></spi.h></p><p>// Local Network Settings byte mac[] = { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 }; // Must be unique on local network</p><p>// ThingSpeak Settings const char* server = "api.thingspeak.com"; // char thingSpeakAddress[] = "api.thingspeak.com"; String writeAPIKey = "XXXXXXXXXXXXXXXXXXXX"; const int updateThingSpeakInterval = 30 * 1000; // Time interval in milliseconds to update ThingSpeak (number of seconds * 1000 = interval)</p><p>//DHT22 #define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino</p><p>//BMP180 Adafruit_BMP085 bmp;</p><p>//Soil Moisture Sensor int sensorPin = 0; // select the input pin for the potentiometer int SoilMoisture = 0; // variable to store the value coming from the sensor </p><p>// Variable Setup long lastConnectionTime = 0; boolean lastConnected = false; int failedCounter = 0;</p><p>// Initialize Arduino Ethernet Client EthernetClient client;</p><p>void setup() { // Start Serial for debugging on the Serial Monitor Serial.begin(9600);</p><p>//BMP180 bmp.begin(); // Start Ethernet on Arduino startEthernet(); }</p><p>void loop()</p><p>{</p><p>//read Soil Moisture Sensor SoilMoisture = analogRead(sensorPin); delay(1000); </p><p>float m = analogRead(sensorPin);</p><p>// read DHT Sensor float h = dht.readHumidity(); float t = dht.readTemperature();</p><p>// read BMP180 float t2 = bmp.readTemperature(); float p= bmp.readPressure();</p><p>if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } // Einde DHT Sensor if (client.connect(server,80)) { // "184.106.153.149" or api.thingspeak.com String postStr = writeAPIKey; postStr +="&field1="; postStr += String(t); postStr +="&field2="; postStr += String(h); postStr +="&field3="; postStr += String(t2); postStr +="&field4="; postStr += String(p); postStr +="&field5="; postStr += String(m);</p><p>postStr += "\r\n\r\n\r\n\r\n\r\n";</p><p>client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr);</p><p>Serial.print("Temperature: "); Serial.print(t); Serial.print(" degrees Celcius Humidity: "); Serial.print(h); Serial.print(" Baro Temp: "); Serial.print(t2); Serial.print(" Pressure: "); Serial.print(p); Serial.print(" Soil moisture = " ); Serial.println(SoilMoisture); Serial.println("% send to Thingspeak"); } client.stop(); // Check if Arduino Ethernet needs to be restarted if (failedCounter > 3 ) {startEthernet();} lastConnected = client.connected(); }</p><p>void updateThingSpeak(String tsData) { // if (client.connect(thingSpeakAddress, 80)) if (client.connect(server, 80)) { client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(tsData.length()); client.print("\n\n");</p><p> client.print(tsData); lastConnectionTime = millis(); if (client.connected()) { Serial.println("Connecting to ThingSpeak..."); Serial.println(); failedCounter = 0; } else { failedCounter++; Serial.println("Connection to ThingSpeak failed ("+String(failedCounter, DEC)+")"); Serial.println(); } } else { failedCounter++; Serial.println("Connection to ThingSpeak Failed ("+String(failedCounter, DEC)+")"); Serial.println(); lastConnectionTime = millis(); } }</p><p>void startEthernet() { client.stop();</p><p> Serial.println("Connecting Arduino to network..."); Serial.println(); </p><p> delay(1000); // Connect to network amd obtain an IP address using DHCP if (Ethernet.begin(mac) == 0) { Serial.println("DHCP Failed, reset Arduino to try again"); Serial.println(); } else { Serial.println("Arduino connected to network using DHCP"); Serial.println();</p><p> } delay(20000); }</p>