Saturday, May 30, 2009

Software Enhancements

I've made a lot of changes to the software during the last week. For starters, I cleaned up the web server implementation and turned it into a general-purpose Arduino library named WiServer; I posted it as open source on the Async Labs website forum so that others can use it.

The code has also been optimized for RAM usage by placing lots of the web page strings in program memory. This means they do require special treatment to use them, but since that capability has been added to the WiServer's print and println methods, it's not a big deal.

I've also added new web features. You can now set the smoker target temperature via the web; I'm using GET to post the data as part of the URL, though I may add POST support to the server in the future. I've also added code to store the target temperature in EEPROM, that way it'll pick up right where it left off if board is reset. I'll probably move all of the configuration data to EEPROM, that way the code doesn't need to be updated just to change the IP address or Wifi SSID.

There's also support for a raw data URL that returns a comma-delimited line of text containing the current time and basic operational data of the unit. A simple bash script on my PC uses CURL to retrieve the raw data and append it to a file every 15 seconds:

for (( ; ; ))
do
curl qpid.webhop.org/data >>data.txt
sleep 15
done

I can then import the resulting text file into Excel and plot the data over time, which will be very useful for evaluating and tuning the PID algorithm.

Sunday, May 24, 2009

First Smoke

Last night my neighbor called and informed me that we'd have an impromptu BBQ today. He would smoke a brisket, and I'd smoke 3 slabs of baby-back ribs. So I stayed up till 11pm adding a PID algorithm to the control software in preparation for today's smoke.

Today's weather conditions were very challenging for smoking. It was sunny, but cold gusty winds off Lake Michigan cooled the temperature down to around 60 and played havoc with the smoker temperature. My neighbor was fighting with his all day, but the PID algorithm worked like a charm and kept the temperature within 10 degrees of 225. I did notice quite a bit of overshoot occurring, so I'll need to run a test and log the system's impulse response to fine tune the algorithm parameters.

It was great being able to wander around and go about my business while QPID did it's thing. And the ability to check on it from my phone was really nice; for now I only have the web page implemented, but I'll add the notification feature once Async Labs adds a client mode to the WiShield's TCP stack.



And as for the ribs? They were awesome! :-)

Saturday, May 23, 2009

Test Firing

Today I hooked everything up, and fired up to smoker to see how things worked.



Everything worked well and I was able to pull up the web page and monitor the smoker.



Even with a very simple on/off control algorithm, the smoker stayed within 5 degrees of the target temperature, but I'll add a PID algorithm to improve accuracy and stability.

Friday, May 22, 2009

Smoker Hardware

A big challenge for this project is building the hardware for the smoker firebox. I needs to be easy to attach and remove, have a tight fit to avoid air leaks, and it needs to withstand high temperatures. At Home Depot I found Type B Gas vent fittings that fit the bill perfectly. Unlike regular duct fittings, these parts are tightly constructed and are double-walled. I also picked up an end cap for mounting the fan that fits snugly into the elbow.



To mount the unit to the grill, I made use of the handle just above the damper opening. A modified conduit clip hooks over the handle and is clamped down with a wing nut. Since the clip is on the top of the unit, it's weight naturally presses against the firebox to form a good seal.



The fan unit was bolted to the end cap above a 2" hole, and I added a barrel-type power connector for connecting it to the controller.



On hot, calm days, the smoker can easily maintain temperature with the damper fully closed, so I also made a simple damper for the fan. It opens to allow air flow when the fan is running, and closes when the fan is off to limit air to the fire.





The fan assembly is mounted in the bottom of the elbow to keep it far away from the intense heat of the firebox.

Monday, May 4, 2009

Arduino Wifi Shield

My original plan was to use a Wifi bridge in conjunction with the Arduino Ethernet shield, or perhaps hack a Wifi unit and connect to it via a serial link, but Async Labs has just released a much cleaner solution. Their WiShield mates a ZeroG wifi module to an Arduino board, and it's exactly what I need for this project.