Long story short; I started this project 16 days ago with the goal of keeping my sub-tropical bonsai and orchids alive through semi-alpine winters in a small greenhouse, not to grow MJ. However, any attempt to learn about growing plants in controlled environments quickly leads to wonderful forums such as this one, and I'd be flat out lying if I said I don't love a good creative sativa buzz... So here we are!
This thread will document the prototype implementation of an automated/monitored grow box I'm building using the Arduino microcontroller platform. I've never developed anything with an Ardino or C++ before, but I'm a software developer 9-5 and so far I'm reasonably confident that a quality (and FREE! Open Source or Bust!) product will come from this that will hopefully be useful for other people's needs.
Biodome Software Overview - It's just Devices & Sensors
- Lights, fans, pumps, heat mats, whatever are treated as "Devices".
- Each Device can be scheduled to be on or off for every hour in a 24 hour period. This schedule is stored in a very simply formatted TXT file on an SDCard for easy adjustments during a monitored grow.
- Every X minutes, all Sensor outputs and Device statuses are logged to a CSV file on the SDCard. I'm going by the Schrödinger's Crop theory; if you open the box to take readings you're changing those readings. Besides, who wouldn't like to easily generate graphs showing the temperature and humidity in your grow space throughout the entirety of a grow.
- Each device can be set to respond to different temperature and/or humidity events, either turning on or off depending on the environment. These sensor-enacted statuses override the scheduled status of the Device.
- Sensor-enacted override events are logged to a separate CSV file to allow the gardener to easily review environmental abnormalities and extremes and adjust the grow space accordingly.
- Plugging a Serial-capable device into the USB port and pressing a button will push a full system status report to the connected device, allowing the gardener to know exactly what's going on without opening the box.
- "Re-entrant" -- the SDCard board has a RealTimeClock chip along with a separate battery to ensure accurate time keeping regardless of power source. If you unplug the box at 9am, drive it somewhere and plug it back in at 10am it knows what time it is and gets straight back to the schedule
- Easily configured for different setups! What's the point of building something like this if I'm the only person who can use it, or if I have to hack the crap outta it when I move it to my greenhouse?! As a brief example, below is the core configuration used in my prototype:
Device Light("Lights", 8);
Device CirculationFan("Circulation Fan", 9);
Device ExhaustFan("Extra Exhaust Fan", 10);
Device Devices[COUNT_DEVICES] = {Light, CirculationFan, ExhaustFan};
TemperatureSensor IntakeTemp("Intake Temp", 1);
TemperatureSensor ExhaustTemp("Exhaust Temp", 1);
SensitronSensor InternalTemp("Internal Temp", 2, 3);
Sensor Sensors[COUNT_SENSORS] = {InternalTemp, IntakeTemp, ExhaustTemp};
...
//---------------------
// DEVICES
//---------------------
// CFL Light Setup
Light.tempMax = 45; // ºC
Light.ignoreHighTemp = false;
Light.thermInvert = true; // turn off when hot
// Circulation fan
CirculationFan.tempMin = 22; // ºC
CirculationFan.tempMax = 30; // ºC
CirculationFan.ignoreLowTemp = false;
CirculationFan.ignoreHighTemp = false;
// Supplimentary exhaust fan
// powers up relative to temps of exhaust air coming out of carbon filter
ExhaustFan.tempMin = 30; // ºC
ExhaustFan.tempMax = 35; // ºC
ExhaustFan.ignoreLowTemp = false;
ExhaustFan.ignoreHighTemp = false;
...
// Lights turn off if grow space gets too hot
temperatureOverride(Light, InternalTemp.read());
// Exhaust fan turns on if exhaust temps get too hot
temperatureOverride(ExhaustFan, ExhaustTemp.read());
// Circulation fan turns on if intake temps are too hot
temperatureOverride(CirculationFan, IntakeTemp.read());
The goal is that anyone who has basic electronics skills and basic experience with any C-based programming language will be able to construct, configure and maintain their own Biodome
All of the above features are fully implemented and tested
That's pretty much it for software. It's easily extended to work with other sensors such as pH or moisture sensors, but they're either too expensive or too inaccurate for me to bother with at the moment. Adding the ability to report to a website or even send an SMS is verging on trivial, but again is not something I'll be looking at in the near future. Right now it's all about the primary goals of the system, to help a gardener grow healthy plants.
The entire codebase and circuitry will be released as Open Source once I'm a little more confident in it (hence the reason for this prototype implementation -- to see how it goes in reality).
On to the micro grow box...
- Recycled PC case
- 2-4x 25W CFL lights
- 4 DIY LED panels. 2 panels are primarily red (620-660nm) with some warm white and cool white, 2 panels are primarily blue with some red. LED will be run from constant-current sources, one per panel. Each string of LEDs is running at 18mA rather than the 20mA to avoid cascade failure. If one string on a panel dies, the other strings will only have to dissipate 21mA each.
- 3 temperature sensors: one in the light trap measuring intake air; one in the main grow space; one in the "control room" behind the carbon filter to measure exhaust temperatures.
- 1 humidity sensor in the main grow space
The grow box build is about 50% complete.
Case layout:
LED driver board and relay board plans
**note: The pic above states the LED panels are running at 12V, it's actually 10.5V due to the drop of the LM317.
Microcontroller, SDCard expansion board, one of the two power supplies, relay board 1/4 complete and a couple of LED panels
Two of the LED panels running at about 1/4 power:
Well that's it for the (lengthy!) intro. Any questions please ask. I'm really hoping people are willing to offer experienced advice as this thing progresses so that it can be a cheap and useful grow assistant.
This thread will document the prototype implementation of an automated/monitored grow box I'm building using the Arduino microcontroller platform. I've never developed anything with an Ardino or C++ before, but I'm a software developer 9-5 and so far I'm reasonably confident that a quality (and FREE! Open Source or Bust!) product will come from this that will hopefully be useful for other people's needs.
Biodome Software Overview - It's just Devices & Sensors
- Lights, fans, pumps, heat mats, whatever are treated as "Devices".
- Each Device can be scheduled to be on or off for every hour in a 24 hour period. This schedule is stored in a very simply formatted TXT file on an SDCard for easy adjustments during a monitored grow.
- Every X minutes, all Sensor outputs and Device statuses are logged to a CSV file on the SDCard. I'm going by the Schrödinger's Crop theory; if you open the box to take readings you're changing those readings. Besides, who wouldn't like to easily generate graphs showing the temperature and humidity in your grow space throughout the entirety of a grow.
- Each device can be set to respond to different temperature and/or humidity events, either turning on or off depending on the environment. These sensor-enacted statuses override the scheduled status of the Device.
- Sensor-enacted override events are logged to a separate CSV file to allow the gardener to easily review environmental abnormalities and extremes and adjust the grow space accordingly.
- Plugging a Serial-capable device into the USB port and pressing a button will push a full system status report to the connected device, allowing the gardener to know exactly what's going on without opening the box.
- "Re-entrant" -- the SDCard board has a RealTimeClock chip along with a separate battery to ensure accurate time keeping regardless of power source. If you unplug the box at 9am, drive it somewhere and plug it back in at 10am it knows what time it is and gets straight back to the schedule
- Easily configured for different setups! What's the point of building something like this if I'm the only person who can use it, or if I have to hack the crap outta it when I move it to my greenhouse?! As a brief example, below is the core configuration used in my prototype:
Device Light("Lights", 8);
Device CirculationFan("Circulation Fan", 9);
Device ExhaustFan("Extra Exhaust Fan", 10);
Device Devices[COUNT_DEVICES] = {Light, CirculationFan, ExhaustFan};
TemperatureSensor IntakeTemp("Intake Temp", 1);
TemperatureSensor ExhaustTemp("Exhaust Temp", 1);
SensitronSensor InternalTemp("Internal Temp", 2, 3);
Sensor Sensors[COUNT_SENSORS] = {InternalTemp, IntakeTemp, ExhaustTemp};
...
//---------------------
// DEVICES
//---------------------
// CFL Light Setup
Light.tempMax = 45; // ºC
Light.ignoreHighTemp = false;
Light.thermInvert = true; // turn off when hot
// Circulation fan
CirculationFan.tempMin = 22; // ºC
CirculationFan.tempMax = 30; // ºC
CirculationFan.ignoreLowTemp = false;
CirculationFan.ignoreHighTemp = false;
// Supplimentary exhaust fan
// powers up relative to temps of exhaust air coming out of carbon filter
ExhaustFan.tempMin = 30; // ºC
ExhaustFan.tempMax = 35; // ºC
ExhaustFan.ignoreLowTemp = false;
ExhaustFan.ignoreHighTemp = false;
...
// Lights turn off if grow space gets too hot
temperatureOverride(Light, InternalTemp.read());
// Exhaust fan turns on if exhaust temps get too hot
temperatureOverride(ExhaustFan, ExhaustTemp.read());
// Circulation fan turns on if intake temps are too hot
temperatureOverride(CirculationFan, IntakeTemp.read());
The goal is that anyone who has basic electronics skills and basic experience with any C-based programming language will be able to construct, configure and maintain their own Biodome
All of the above features are fully implemented and tested
That's pretty much it for software. It's easily extended to work with other sensors such as pH or moisture sensors, but they're either too expensive or too inaccurate for me to bother with at the moment. Adding the ability to report to a website or even send an SMS is verging on trivial, but again is not something I'll be looking at in the near future. Right now it's all about the primary goals of the system, to help a gardener grow healthy plants.
The entire codebase and circuitry will be released as Open Source once I'm a little more confident in it (hence the reason for this prototype implementation -- to see how it goes in reality).
On to the micro grow box...
- Recycled PC case
- 2-4x 25W CFL lights
- 4 DIY LED panels. 2 panels are primarily red (620-660nm) with some warm white and cool white, 2 panels are primarily blue with some red. LED will be run from constant-current sources, one per panel. Each string of LEDs is running at 18mA rather than the 20mA to avoid cascade failure. If one string on a panel dies, the other strings will only have to dissipate 21mA each.
- 3 temperature sensors: one in the light trap measuring intake air; one in the main grow space; one in the "control room" behind the carbon filter to measure exhaust temperatures.
- 1 humidity sensor in the main grow space
The grow box build is about 50% complete.
Case layout:
LED driver board and relay board plans
**note: The pic above states the LED panels are running at 12V, it's actually 10.5V due to the drop of the LM317.
Microcontroller, SDCard expansion board, one of the two power supplies, relay board 1/4 complete and a couple of LED panels
Two of the LED panels running at about 1/4 power:
Well that's it for the (lengthy!) intro. Any questions please ask. I'm really hoping people are willing to offer experienced advice as this thing progresses so that it can be a cheap and useful grow assistant.
Last edited: