Friday, July 17, 2009

Germination Station Part II

Electronics and Arduino Programming
I had fun naming my control variables. Earth = temperature of the soil, wind = temperature of the air, water = moisture, and fire = light.
The sensor stalk
I needed a way to connect all the sensors into the Arduino. I made my own shield and used a motherboard firewire cable. I used the heating pad (earth) from the previous project, a hair dryer, and a 12 DC fan (wind) and the two fluorescent lights (fire).
Finding the right layout was kind of a pain using a cheap board from radio shack (not so cheap).
Firewire cable had just the right amount of wires.
Three sensors: two thermistors and a photocell. This is the first version. The original plan was to be able to differentiate between daylight (higher) and the artificial lights (lower), but the photocell would get saturated and keep rising. I had to put an extension on it so that it was above the lights. I did not implement the water sensor because I did not have a pump.
Testing out the fan circuit. Used a TIP120.
Sensor Stalk header: I/O for the open squid, 2 pins for the the 12VDC, and 2 pins for the fan.
A little bit fuzzy, but everything hooked up.
The goal of the Fire (light) control was to turn on the lights at 6am and then turn the lights off when the sensor (sunlight) reached a specific point. The lights would turn on again if the sensor value dropped below the determined value and stay on until 8pm. As summer approached, the light would be used less and less.
I used the DateTime library. Syncing up the time with a pc and adjusting for a timezone were a pain.
I got the fire variable to work sporadically, but it never worked longer than a period of a couple days.
The lights are on!!! Having to haul my work laptop onto the porch did not help with debugging, especially when it is all software. I have really old Arduinos that still require the manual reset so that did not help either. I have not gotten around to modding them.

Here is a little clip from testing the photocell circuit. I sound ridiculous. That is Noelle's beautiful thumb at the end.

I used the FrequencyTimer2 library. Something wasn't running 100% correctly because the calculated overflow did not come out right, and I had to tweak it until it was approximately 1ms. I created an earth and wind PWM timer based off of the 1 ms tick. The wind period was 100sec, and the earth period was10sec broken into 100 increments with a divisor. This strategy needs to be evaluated because I was constantly troubleshooting the timers to see if they were correct.

Earth was almost the exact same algorithm that I used with the original PID controller. I cleaned up some of the calculations and added a larger range to the thermistor formula for both thermistors. The PID function producted a value from 0-100, which was used as the duty cycle of the earth PWM.

Wind was a bit more complicated. I designed the algorithm to turn off the hairdryer and turn on the 12VDC fan. The wind PID algorithm was allowed to go negative. The negative state would mean that the station had gotten too hot, and the fan needed to turn on. I think I got this working right at the end of the project, but I figured out that the fan did not have the CFM to cool down the germination station as the days got warmer. My original idea was to have one fan and a large heat sink with a film heater attached. I think that would have been a little neater, but the control algorithm would have been a little more complex.

In the end, I did not feel confident enough to leave some plants in the germination station. Whenever it rained hard, the plastic concaved a little and caught some water. I did not frame out the entire base of the station so the water leaked back inside. Thank goodness nothing got fried!

Here is some analysis of what problems I ran into and what I can do better next time. If anyone has additional input, I would be grateful.

Scope - I really wanted to have a GUI and a solid communications protocol so that I could read the data live. I hacked together a serial protocol, but it was not robust enough, and the fact that I had to sit outside on the deck did not help the whole development process.

One of the interesting philosophies that my boss has mentioned when developing our products (embedded systems) at work is to take a single slice of the project and make it work top to bottom. One of my goals going forward is to get a single element working (i.e. thermistor) and have it communicating with my new laptop (birthday present!!!!) with a pyQT UI. If I can get that to work, then I can slowly add the other variables.

I am going to have to adjust the Frame structure so that it is more stable. I plan on getting a sheet of lexan for the room. I would like to make the whole structure out of lexan but that might be cost prohibitive.

I have some really good ideas for the water sensor and pump. I am currently trying to figure out what method would be the cheapest and easiest to control (ac pump vs. dc pump).

The end game of this project is to have a system that will transmit the control data to a web server so that the station can be monitored remotely. Tweaking the PID values online would be kind of neat, but I don't think that is necessary.

Next post, whenever I get around to it, will be about the raised bed and garden that Noelle and I created this summer.

Germination Station Part I

I have been working on this project all spring, and I am finally getting around to posting about it.  Unfortunately, it did not turn out to be as successful as I would have liked it to be.  A couple of  years ago, I created a PID controller that controlled the soil temperature of a Biodome.  Now that we own a home, I was hoping to be able to add a bunch of other variables.  The variables were the following: soil temperature, air temperature, light, and moisture.  I also wanted to have Xbee units to relay the information back to a Webserver so that I could view the system's status from the web.

The  Xbee idea had to be postponed because 1 of my Xbee units got toasted.  As a result, I had to be tethered to the project via a USB cable, and that caused some technical and logistical problems.  I still got a lot done, but in the end, the entire system did not work.
The Structure:
The base: I wanted to see how much of the deck it took up.
The side supports. I will expand upon my rationale for this shape later.
I attached two fluorescent lights as part of the support structure. They were also the most costly part of the project.
Additional supports and hinges so that I would be able to easily lift the cover.
Cover attached to the base
You can see that I did not line up the cross supports. The whole structure was not as stable as I wanted it to be, which may have been responsible for water flow issues.
Plastic covering
I took a 4" by 4' PVC pipe and cut it in half(horribly) and glued it together. Attaching it to the structure was very precarious, and I will need to think this out better the next time around. The pipe was to funnel water into the trash can. The plastic that was connected to the "roof" of the pipe was very leaky, so it did not work as efficiently as it could have.
Electrical Systems
Wiring the Lights
I took a basic extension cord and cut the end off, then wired the lights in parallel together.
Electronics (Arduino and Open Squid)
I planned on using the Arduino again. I had an extra one on hand, but I didn't need to use it for the system. It was useful for debugging basic code at lunch, though.
Open Squid
I needed to control multiple AC devices (hair dryer, heating pad, and lights).  Last time, I hacked a digital AC timer.  That would have been a little too costly this time.  I found the relay squid by Liquidware, but it was a little out of my price range, and I figured I could build one cheaper.
Got these from Mouser.  Really cheap.  Just cut the ends off of them.  Time for some soldering!!!
I spent a good 2 hours working on the circuit in the top left corner, and it just would not work.  I found out that the relays that I had picked could be driven with just the output current of the Arduino. (After examining the Atmega and relay documentation, the relays should have blown out the IO on the board, but for some reason that did not happen)  I am working on redesigning the circuit now.
I wired the ground and neutral straight through to all the plugs and switched the hot.
Soldering the AC lines on the board was tedious. I am surprised it all worked.  I put some hot glue down to protect the connections and keep everything in place.
All done! Time to get it in the box (project box from radio shack).
Everything hooked up to the Open Squid.
I have created a schematic in Eagle with the correct transistor switching circuit.  I have laid out the PCB, but I want to do some testing of the circuit before I ordered the PCBs.  All the schematics and gerbers will be available after I do a system test.
Next time, I will go into the Sensor Stalk and the Arduino program and the problems that I ran into while working on this project.