Website in the process of migration. Original site located at https://sites.google.com/site/ryanpatricksnyder0
So for my supporting my aquaponics unit (fish tank and grow beds for plants) I just built a simple support box out of wood. It is basically just a wooden box to hold up the grow beds and fish tanks. Later I added some cross members because I found that it was swaying a little too much when force was applied from front to back.
In the picture on the left is my good friend Chris Cable who helped me build the support box, along with my other good friend Erik Bergquist.
In the aquaponics system plants are grown typically without soil. By providing them access to nutrient and oxygen rich water the plants are able to thrive without having to waste their own resources to obtain the nutrients. So by creating an auto-siphon made from PVC pipe in a plastic bin I made my first grow bed for the plants.
I got a female and male adapter fittings for PVC and attached an o-ring to the end to help create a nice seal. I cut a hole out of the plastic just slightly smaller than the fitting so that I could thread into the plastic to also help provide a good seal.
After I tightened down the adapters together through the plastic I added silicon glue around the seams just for some extra redundancy.
I tried very hard to ensure that it dried with the fittings positioned as vertical as possible. I just set it up real early one morning before work and so it would have all day to set, but it would have been better if I did it indoors where the humidity was lower. The silicon doesn't take to long to cure enough to be fairly rigid, but it would have done better without the humidity.
And here is the PVC that I used for the auto siphon and the largest piece was used for a "media-guard" which is just something to put in place to allow for easy access to the auto-siphon. It is not fun digging out all the media rocks just to clear out some roots, as I found out later when I made a grow bed without a media-guard.
The auto-siphon is a really nice solution for flooding and draining the grow bed. In order to provide the nutrient rich water that is highly oxygenated one much provide a fresh flow of water from the fish tank. Once the water rises to a certain point the auto-siphon drains the water out and is redirected back into the fish tank (at least in my setup).
The auto-siphon consists of really two main parts, a stand pipe and a "bell" shroud. The standpipe is a long tube that is surrounded by a shroud. The shroud has holes cut into it low (about 2'' from the bottom) and it is large enough to provide some room for water flow in between itself and the standpipe. Once the water fills high enough it creates a siphon and do to the pressure differences forces the water out of the grow bed. The water is pushed out until the water level reaches the holes at the bottom of the shroud which allows for air to refill in the auto-siphon and breaks the siphon effect.
It's a pretty simple idea, but it is satisfying to see in person. There is lots of troubleshooting with this system, especially if your pump does not always have the same rate of flow. You need to have enough flow to create the siphon, but if you have too much you the siphon will never break. There is lots of information available online of various methods of auto-siphoning water and plenty of guides if you're interested in building one of these systems.
Here is a diagram from http://affnan-aquaponics.blogspot.com to help visualize the auto-siphon.
Here is the completed setup with the grow bed on top and plastic bin on the bottom for the temporary fish tank. I filled a majority of the grow bed up with river rocks and the rest with lava rocks.
I then let the system run for a week or so before I added the fish and some plants. The plastic bin I used for the grow bed had been in an outdoor garage for 5-6 years and it developed a slow leak on a corner from the expanding and contracting of the water. I then decided that a circular bin would be better for the stresses. The $6 Walmart rope bin hasn't had a problem in the seven or so months that it has been used and I expect that it will last several years since I haven't seen any wear.
I really wanted to do this project because I was intrigued by the idea and I wanted an excuse to build an automated system. My hope was to get some experience with aquaponics because I wanted to really expand the hobby once I'm out of school and have a place of my own someday. I just kept thinking of all sorts of ideas that I could implement on a small system so I decided to do this after my summer classes. My apartment definitely did not have enough room for this so I set it up at my parent's house. I had barely thought much about what I wanted to grow in terms of plants so I just asked my mother if she had any ideas and she kept several plants in pots for me instead of planting them in a garden. So once I got everything set up I planted some strawberries and some bell, jalapeno, and sweet peppers.
My boss at work also had some tomatoes that had been kept for too long in a greenhouse that he gave to me. I ended up adding them in and adding some more grow beds as well, one that overhung the porch to catch rainwater so I never needed to add any water into the system.
I didn't get to check on the system for a week, but I came back and everything had just sprouted up real fast. The microbe colony in the rocks probably flourished with the added fish and the temperatures did drop slightly that week. After that I tried to get pictures as often as possible. I planted the plants in the beginning of August 2013 and these pictures were taken from August until the end of September.
Here is a video of me the feeding the 50 gold fish. I started off with 30 and then decided that I needed more ammonia in the system. The ammonia gets broken down into nitrites and nitrates by the microorganisms in the rocks which then the plants use as nutrients. You can briefly see the plants and at the end I record while the siphon kicks in and drains the grow bed. It takes about 6-7 minutes to fill and about 30 seconds to drain.
The first step towards automation that I wanted to incorporate was a temperature sensor. I bought some 10k ohm resistors and thermistors. Using a simple wiring schematic one can take an analog measurement through a micro-controller and determine the temperature in kelvin. Once you have that data value you can just convert it to your preferred unit, which I just converted to Celsius and then Fahrenheit for simplicity.
At first I wanted to use fancy display, or many LEDs to display the temperature but I realized that it would quickly use up too many pins on an Arduino. So instead I took the temperature and divided it by an integer of 10, which the number gets truncated after the decimal so you end up with the first (10's place) of a temperature. Then by subtracting the difference of the original by the new truncated number will return 1-9, or the second digit. It is probably easier to understand in code versus writing.
Here is a code snippet to help clarify:
double temp;
int temp10; // Value used to first digit of temperature (10s place, 10,20,30,etc.)
int temp1; // Value used for second digit of temperature (values 1-9)
void loop() {
temp=Thermistor(analogRead(ThermistorPIN)); // read ADC and convert it to Celsius
//Serial.print(", Celsius: "); printDouble(temp,3); // display Celsius
temp = (temp * 9.0)/ 5.0 + 32.0; // converts to Fahrenheit
//Serial.print(", Fahrenheit: "); printDouble(temp,3); // display Fahrenheit
//*By dividing the temp by an integer it will truncate the remaining numbers after a decimal point
//** so 62/10 would return 6
temp10 = temp/10;
//*Then to find the second digit we can subtract the difference
//** of the two so 62-60 = 2
temp1 = temp-temp10;
//*This method was useful to make a temperature display that does not
//** use up too many pins and it still easy to understand
//Now time to display the temperature through blinking LEDs
//First is the blue light for the first digit
for (int i=1; i<=temp10; i++) //Blink once for every int value, could have started at 0 and just used a
//less than (<)
{digitalWrite(led10, HIGH); // turn the LED on (HIGH is the voltage level)
delay(250); // wait for a 250ms, more than enough time to recognize a flash
digitalWrite(led10, LOW); // turn the LED off by making the voltage LOW
}
delay(800); // wait 800ms, can be adjusted however too slow is tedious and too fast is easy
// to miss a blink
And here is the complete code, which displays the schematic of the Arduino circuit with the thermistor.
#include <math.h>
//Schematic:
double Thermistor(int RawADC) {
// Inputs ADC Value from Thermistor and outputs Temperature in Celsius
// requires: include <math.h>
// Utilizes the Steinhart-Hart Thermistor Equation:
// Temperature in Kelvin = 1 / {A + B[ln(R)] + C[ln(R)]^3}
// where A = 0.001129148, B = 0.000234125 and C = 8.76741E-08
long Resistance;
double Temp; // Dual-Purpose variable to save space.
Resistance=((10240000/RawADC) - 10000);
// Assuming a 10k Thermistor. Calculation is actually:
// Resistance = (1024 * BalanceResistor/ADC) - BalanceResistor
Temp = log(Resistance); // Saving the Log(resistance) so not to calculate it 4 times later.
// "Temp" means "Temporary" on this line.
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
// Now it means both "Temporary" and "Temperature"
Temp = Temp - 273.15; // Convert Kelvin to Celsius
// Now it only means "Temperature"
// BEGIN- Remove these lines for the function not to display anything
Serial.print("ADC: ");
Serial.print(RawADC);
Serial.print("/1024"); // Print out RAW ADC Number
Serial.print(", Volts: ");
printDouble(((RawADC*4.860)/1024.0),3); // 4.860 volts is what my USB Port outputs.
Serial.print(", Resistance: ");
Serial.print(Resistance);
Serial.print("ohms");
// END- Remove these lines for the function not to display anything
// [Ground] ---- [10k-Resister] -------|------- [Thermistor] ---- [+5v]
// |
// Analog Pin 0
// Uncomment this line for the function to return Fahrenheit instead.
//Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert to Fahrenheit
return Temp; // Return the Temperature
}
void printDouble(double val, byte precision) {
// prints val with number of decimal places determine by precision
// precision is a number from 0 to 6 indicating the desired decimal places
// example: printDouble(3.1415, 2); // prints 3.14 (two decimal places)
Serial.print (int(val)); //prints the int part
if( precision > 0) {
Serial.print("."); // print the decimal point
unsigned long frac, mult = 1;
byte padding = precision -1;
while(precision--) mult *=10;
if(val >= 0) frac = (val - int(val)) * mult;
else frac = (int(val) - val) * mult;
unsigned long frac1 = frac;
while(frac1 /= 10) padding--;
while(padding--) Serial.print("0");
Serial.print(frac,DEC) ;
}
}
#define ThermistorPIN 0 // Analog Pin 0
//These pins are used for indicating the temperature, one counts how many times each
// color blinks with the blue one blinking first
//Ex: if blue blinks 6 times and UV twice, the temp=62
int led10 = 13; //blue led for giving first digit of water temperature by blinking x amount of times
int led1 = 12; //UV or purple LED for blinking x amount of times to display 2nd digit
void setup() {
Serial.begin(115200);
pinMode(led10, OUTPUT);
pinMode(led1, OUTPUT);
}
double temp;
int temp10; // Value used to first digit of temperature (10s place, 10,20,30,etc.)
int temp1; // Value used for second digit of temperature (values 1-9)
void loop() {
temp=Thermistor(analogRead(ThermistorPIN)); // read ADC and convert it to Celsius
//Serial.print(", Celsius: "); printDouble(temp,3); // display Celsius
temp = (temp * 9.0)/ 5.0 + 32.0; // converts to Fahrenheit
//Serial.print(", Fahrenheit: "); printDouble(temp,3); // display Fahrenheit
//*By dividing the temp by an integer it will truncate the remaining numbers after a decimal point
//** so 62/10 would return 6
temp10 = temp/10;
//*Then to find the second digit we can subtract the difference
//** of the two so 62-60 = 2
temp1 = temp-temp10;
//*This method was useful to make a temperature display that does not
//** use up too many pins and it still easy to understand
//Now time to display the temperature through blinking LEDs
//First is the blue light for the first digit
for (int i=1; i<=temp10; i++) //Blink once for every int value, could have started at 0 and just used a
//less than (<)
{
digitalWrite(led10, HIGH); // turn the LED on (HIGH is the voltage level)
delay(250); // wait for a 250ms, more than enough time to recognize a flash
digitalWrite(led10, LOW); // turn the LED off by making the voltage LOW
delay(800); // wait 800ms, can be adjusted however too slow is tedious and
//too fast is easy to miss a blink
}
//A delay here can be helpful for a gap between the two colors
//Second is the UV light for the second digit
for (int i=1; i<=temp1; i++) //Blink once for every int value, could have started at 0 and just
//used a less than (<)
{
digitalWrite(led1, HIGH); // turn the LED on (HIGH is the voltage level)
delay(250); // wait for a 250ms, more than enough time to recognize a flash
digitalWrite(led1, LOW); // turn the LED off by making the voltage LOW
delay(800); // wait 800ms, can be adjusted however too slow is tedious and too
//fast is easy to miss a blink
}
delay(2000);
}
A video showing how the sensor works running the two colors:
I found that because the unit was outdoors the temperature of the tank was almost always the same temperature as the air. It did have a bit of lag time but it wasn't too much. So I didn't keep that one until I stared heating the water.
Early one morning on the way to work I noticed quite a few bugs had accumulated in the tank throughout the night because of the porch light being lit all night. When I came home that afternoon the tank was clear of any bugs and the pump did not have any stuck to its filter. So my idea was to create some sort of bug-attracter to reel bugs towards a light under the water to inevitably get stuck and get eaten by my fish. It would cut down on the cost of feeding the fish, if I could run the light with some low energy-consuming LEDs. Using a bulb similar to the porch light would not be worth it due to costs of electricity. Here are some images of my "bug-attracter" contraption:
I built it around a plastic milk jug with a simple circuit consisting of 4 rechargeable AA batteries, a resistor, switch, and few UV LED bulbs. I cut that opening in the side to allow it to sink and provide a little hideaway spot for the fish. And it turns out that it was completely ineffective for attracting bugs. After doing some research I found that bugs are not attracted to that range of light in the color spectrum. While they are attracted to UV light, LED ultraviolet apparently does not have a high enough light intensity, or at least my setup did not through the plastic. At least it made a nice little hideaway for the fish.
Through the end of October to November of 2013 (about 3-4 months into the aquaponics project) I was trying to find easy/quick/cheap ways to keep everything warm since the temperatures were beginning to drop. The main objective was to move the system into an area that gets more sunlight throughout the day and to add an insulated cooler to retain heat. I painted the cooler black with spray paint which helped to keep things held over until I finally had a weekend available to move things into a greenhouse that my wonderful Girlfriend bought me as a surprise one day. When moving the fish to the cooler I managed to finally count how many fish that I had lost during the past few months. I had around 60 goldfish at the start and I counted 51 when I switched tanks. Since I took a couple out to live in a fish-tank at my apartment I had only lost 7 goldfish, which was almost unbelievable to me. Fortunately the goldfish are VERY resilient fish that didn't mind the few nights that the water temperature got down into the low 40s before the greenhouse was built around the aquaponics unit.
The greenhouse kit assembled pretty easily. I placed the frame around the aquaponics system and then put the plastic around the frame after everything was assembled. I did not put together the shelves that came with the greenhouse because there would not be enough room for everything. The greenhouse helped quite substantially to heat the unit and once I added a water heater the cooler kept things insulated while the greenhouse helped to cut down on convection cooling. The only problem that the greenhouse caused was high humidity that many of the plants did not enjoy aside from the strawberries. I probably could have found plants that were better suited for the changed environment but after a failed attempt at broccoli and cauliflower(cabbage worms really enjoyed the fresh produce) I was a little defeated and also distracted by adding more automation in hope of controlling airflow to decrease humidity.
Build-up of waste eventually accumulates in the grow beds so I ordered some Red-Wriggler worms off of eBay and just dropped them into the beds. Some how they manage to live even with the constant flooding and draining inside the grow-bed.
All winter I really wanted to build a solar collector to heat the tank or even a geothermal well but I never had the time or money to invest in that project. One day though if I have less financial obligations and some free time I won't hesitate to make either system because it has been one of my goals from the start of this project. I had planned on building a solar collector made of probably black-looping PVC inside of an insulated box with a glass cover. I would drill a hole and place a thermistor inside the black PVC that would allow me to measure the temperature of water inside the pipe and compare it to the fish tank temperature. If the temperature inside was warmer than that of the tank I could activate a pump to circulate water from the tank through the heating loop with a controllable relay. The code logic would be simple and quick to program and the circuit itself would be very cheap (a few pennies for the thermistor, less than $10 for the relay, and less than $15 for the micro-controller if needed).
Since I seem to have less and less time to visit my parents and check on my aquaponics system I wanted to automate some things so that I could remote into my greenhouse and check on the aquaponics system. Using an old desktop PC I rebuilt a computer system into a Tupperware box that could control humidity, temperature, and water level sensors. Using these sensors I developed code to control fans, the water heater, and an auto-feeder.
Through serial communication with an Arduino micro-controller I can control all my sensors and hardware like my fans and water heater. Using this $6 waterproof container from Walmart or Home Depot I built this control box to contain my control circuit.
This Arduino is setup to control a 4-Channel relay, read the temperature from 4 different thermisors, control a servo used for moving an auger in my auto-feeder, and lastly for reading data from a DHT11 (humidity and temperature) sensor. I left plenty of wires through the case for future upgrades if needed and each wire hole was just sealed up with some hot glue.
The 4-channel relay allows me to control the activation of a switch on a separate circuit from the Arduino. This allows easy control of my 12v fans, my 120vac box fan, and water heater.
Here is a video of the fan control being tested:
My code was initially setup to read the humidity value from the DHT11 sensor and if it was above 75% relative humidity it would activate the solenoid in the 4-channel relay to switch 'on' the fans. This seemed to work well enough to at least keep water from sitting on the leaves of the plants and to dry areas of the rocks that would otherwise sprout algae. It was very difficult to actually reduce the humidity of the air because there is really no where for the air to go so it just re-circulates around inside the greenhouse. Using the DHT11 sensor I was able to find a dew point temperature so a future project is to make a condensing unit to recycle some of that water and reduce the humidity. A very primitive idea was to run a PVC tube outside the greenhouse that I could circulate air through with long bolts running through the PVC. The bolts would theoretically act as heat sinks that could condense some water out of the greenhouse air, though I doubt it would be substantial and I haven't done any calculations.
And here is a picture of its output in the serial monitor built into the Arduino IDE:
And here is the code that I used to visually display the temperature and humidity values:
/*
______________________________________________________________________________________________ Relay 4 is pin 10 red/white Relay 1 is pin 11 blue/white Relay 2 is pin 12 green/white Relay 3 is pin 9 yellow/white Yellow/white is temp 2 on a1 Green/black is temp 1 on a0 Blue is temp 3 on a2 Temp 4 is the dht11 sensor _____________________________________________________________________________________________ * Inputs ADC Value from Thermistor and outputs * Temperature in Celsius * * requires: include <math.h> * *Utilizes the Steinhart-Hart Thermistor Equation: * Temperature in Kelvin = 1 / {A + B[ln(R)] + C[ln(R)]3} * where A = 0.001129148, B = 0.000234125 and C = 8.76741E-08 * * These coefficients seem to work fairly universally, which is a bit of a surprise. * * Schematic: * [Ground] -- [10k-pad-resistor] -- | -- [thermistor] --[Vcc (5 or 3.3v)] * | * Analog Pin 0 * * In case it isn't obvious (as it wasn't to me until I thought about it), the analog ports measure the voltage
between 0v -> Vc c which for an Arduino is a nominal 5v, but for (say) a JeeNode, is a nominal 3.3v. * * The resistance calculation uses the ratio of the two resistors, so the voltage specified above is really only required for
the debugging that is commented out below * * Resistance = (1024 * PadResistance/ADC) - PadResistor * *//******************************************************************************************* */
/******************************************************************************************* */
/******************************************************************************************* */
#include <math.h>#define ThermistorPIN0 0 // Analog Pin 0#define ThermistorPIN1 1#define ThermistorPIN2 2#define ThermistorPIN3 3float vcc = 4.91; // only used for display purposes, if used set to the measured Vcc.
float pad = 9850; // balance/pad resistor value, set this to the measured resistance of your pad resistor
float thermr = 10000; //thermistor nominal resistance/******************************************************************************************* */
/******************************************************************************************* */
/******************************************************************************************* */
#include <DHT11.h> //library found online, only slightly modifiedint DHT11pin = 2; //Digital pin for comunicationsint DHT11intNumber = 0; //Interupt #vo dht11_wrapper(); // must be declared before the library initialization
DHT11 DHT11(DHT11pin,DHT11intNumber,dht11_wrapper); // Library instantiate
/******************************************************************************************* */
/******************************************************************************************* */
/******************************************************************************************* */ float Thermistor(int RawADC) { long Resistance; float Temp; // Dual-Purpose variable to save space. Resistance=((1024 * pad / RawADC) - pad); Temp = log(Resistance); // Saving the Log(resistance) Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp)); Temp = Temp - 273.15; // Convert Kelvin to Celsius //temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert to F return Temp; // Return the Temperature}
/******************************************************************************************* */
/******************************************************************************************* */
/******************************************************************************************* */
vo setup() { Serial.begin(9600);}/******************************************************************************************* *//******************************************************************************************* */
/******************************************************************************************* */
// This wrapper is in charge of calling vo dht11_wrapper() { // must be defined like this for the library to work DHT11.isrCallback();}/******************************************************************************************* */
/******************************************************************************************* */
/******************************************************************************************* */
vo loop() { float temp0; temp0=Thermistor(analogRead(ThermistorPIN0)); // read ADC and convert it to Celsius float temp1; temp1=Thermistor(analogRead(ThermistorPIN1)); float temp2; temp2=Thermistor(analogRead(ThermistorPIN2)); float temp3; temp3=Thermistor(analogRead(ThermistorPIN3)); /******************************************************************************************* */
DHT11.acquire(); while (DHT11.acquiring()) ; int result = DHT11.getStatus(); switch (result) { case DHTLIB_OK: //Serial.println("OK"); break; case DHTLIB_ERROR_CHECKSUM: Serial.println("Error\n\r\tChecksum error"); break; case DHTLIB_ERROR_ISR_TIMEOUT: Serial.println("Error\n\r\tISR Time out error"); break; case DHTLIB_ERROR_RESPONSE_TIMEOUT: Serial.println("Error\n\r\tResponse time out error"); break; case DHTLIB_ERROR_DATA_TIMEOUT: Serial.println("Error\n\r\tData time out error"); break; case DHTLIB_ERROR_ACQUIRING: Serial.println("Error\n\r\tAcquiring"); break; case DHTLIB_ERROR_DELTA: Serial.println("Error\n\r\tDelta time to small"); break; case DHTLIB_ERROR_NOTSTARTED: Serial.println("Error\n\r\tNot started"); break; default: Serial.println("Unknown error"); break; }/******************************************************************************************* */
/******************************************************************************************* */
/******************************************************************************************* */
//print temperatures here delay(500); Serial.print("|==-==-==-==-==-==-==-==-==-==-==-==|"); Serial.println(""); Serial.println("");//print first temp, convert to Fahrenheit temp0 = (temp0 * 9.0)/ 5.0 + 32.0; Serial.print("Temperature: "); Serial.print(temp0,1); //print second temp, convert to Fahrenheit temp1 = (temp1 * 9.0)/ 5.0 + 32.0; Serial.print(" "); Serial.print(temp1,1); //print third temp, convert to Fahrenheit temp2 = (temp2 * 9.0)/ 5.0 + 32.0; Serial.print(" "); Serial.print(temp2,1); //print fourth temp actually found from DHT11 sensor Serial.print(" "); Serial.print(DHT11.getFahrenheit(), 2); Serial.println("");//print humity Serial.print("Humity: "); Serial.print(DHT11.getHumity(), 2); Serial.println(" %");//print dew point Serial.print("Dew Point: "); Serial.println(DHT11.getDewPointSlowF()); Serial.println(""); delay(500); /******************************************************************************************* */
/******************************************************************************************* */
/******************************************************************************************* */
}
The computer system in the Tupperware box was an old HP PC from 2003. It had climbed up to 120C the first day I checked its temperatures which surprised me because I thought that it would shut itself off long before those high of temperatures. After cleaning out over a decade of dust I applied some new thermal paste to the CPU to drop the temperature into a decent range. After the cleaning and thermal paste the computer sat around 55C with little variation and the CPU fan actually spit out warm air as opposed to near room temperature air. An modification to the computer was a simple switch out of the "pc-computing" blinking LED that was orange with another LED that was blue to keep with the blue light theme I had unintentionally created when I bought a USB-hub that lit up blue.
I wanted to install and run a Linux Mint distro but unfortunately my USB wireless adapter was not compatible with Linux (Cisco please work on that) and I had to install Windows XP. In order to remote into the computer I used TeamViewer which is my favorite free for personal use remote desktop program that I can use with both my computers and phone. To store and share data I used Google Drive. Every file that saved like my pictures, videos, and data text files were near immediately uploaded to my cloud storage that I could also access from all my computers and phone. Since the greenhouse computer is connected via WIFI to my parents router I can connect at any time (if bandwidth permits) and view what is going on inside the greenhouse or I can browse through my Google Drive folder to get an update on the greenhouse through its logged temperatures, humidity values, pictures, and videos.
I set up two video cameras, one that I had which was very old and cheap, and another that I bought off eBay for $2.50. The eBay camera was originally a HP webcam for a DV5 computer. Using some information from a friend I learned that the webcameras in these computers are just USB-connected cameras with strange connectors and pin-outs. Using a voltmeter one can find the GND and VCC wires, while the data wires are usually a twisted pair. As long as you splice the wire into a spare USB with the GND and VCC correctly matched you can guess which color wire is what data line. Once figured out you have a $2.50 video camera and whatever a spare USB connector cost (I had plenty lying around from years of hoarding broken wires). To my surprise Windows 7 immediately recognized the device and installed the necessary drivers. Even more to my surprise Windows XP recognized and installed drivers for the spliced up webcam.
I used the cameras to take pictures of the plant growth and had it set to take pictures whenever it detected motion. I was noticing that the fish weren't as friendly when I visited in December and that the plants were malnourished so I assumed that the fish weren't being fed enough so I wanted to ensure that someone was feeding the fish while I was away, which is why I used the motion detection temporarily until I made an auto-feeder. I'm very grateful that I have family who can take care of some things while I was gone so I was reluctant to "spy" in order to see if my fish were being fed but I wanted to ensure that the poor health of my plants was not caused by any other variable because there are lots of variables in an aquaponics system that can cause poor plant health. One problem with the auto-detect was that running the software at all times ate up a lot of processing. I also would get some false alert pictures and videos caused by high winds shaking everything around in the inside of the greenhouse.
Here are some pictures of all the components I brought home to install inside the Greenhouse. The greenhouse seemed larger in my memory than in real-life but I did manage to fit everything in there but due to a perfectly timed rainstorm once I started I rushed and created a horrible mess of wires inside the greenhouse.
And here is a couple videos showing the fan control:
Unfortunately the computer started to get uncomfortably hot towards the middle of March. I thought abut adding vents for cooling, or a radiator to exchange heat from the computer into the fish-tank but I found a USB wireless adapter that was supported by Linux drivers so I removed the computer with the intention of replacing it with a Raspberry-Pi. The Pi has enough processing for my needs while using very little power and helps to keep everything smaller and more simple.
The Raspberry-Pi still needs some accessories, but I was able to get away with just an external USB powered hub and a wireless USB adapter.