I used the Dallas Semiconductor (Now Maxim) DS1280B sensor. This is a great little device that is digital, and so it will withstand long runs. Each chip is serialized with a unique identifier so the software can discern each one individually no matter where it is on the line. Plus, it uses the one-wire protocol so any reasonable number of sensors can be connected in parallel using only one digital pin on the microcontroller. There is a very good library for Arduino so writing the software was a trivial task.
The most challenging part was figuring out the topology for a relatively large number of sensors (13) over a relatively long run (about 50 feet). Turns out that a bus topology works the best. I can go into detail later if anyone is interested.
I decided not to embed the sensor directly into the concrete. If I did that, then a failed sensor would be impossible to replace. Rather, I put copper tubes in the concrete that wrapped around the vent without touching it. I then filled the tubes with oil and slipped the sensors into that. That way, there would be no air to insulate and the temperature sensor would be able to assume the temperature of the surrounding concrete.
I scored some sweet industrial connectors from the local surplus store. They already had serial numbers on each plug, so I was able to add that to my database and associate the plug number with the DS1280 serial number.
I have lots more pictures, but I'm limited to three per post, so I'll post some more later.
posted 7 years ago
More pictures. I didn't want the tube coming out of the top of the bench because I was planning to put shelves there. So I drilled a hole in the top form board and stuck the tube in it. That served two purposes. First, it held the tube where I wanted it during the concrete pour, and second, it assured that I wouldn't get any concrete or other debris in the tube. But it made stripping the form a bit more tricky.
Notice the mark on the wire as it sits in the tube. I marked each sensor 12 inches from the sensor. This is so I know that each sensor is approximately in the same position. By making other marks, I can test the temperature higher or lower in the bench if I need to.
posted 7 years ago
The Arduino. As you can see, it's still in a prototype state. You can see the LCD shield on top of the Arduino Uno R2. Shields are nice for learning, but if I were to do it again (and I will!) I would use wired components. That gives more flexibility in the pin connections and allows you to get exactly what you want. The LCD shield also has five push buttons that I have programmed to scroll through the display and to mark events. Two events are "start fire" and "feed fire".
The microcontroller code reads one sensor per second through an interrupt. At first the code read all sensors at once, but this led to timing problems with the digital sensors and locked up the controller so I it wouldn't read key presses. The interrupt wakes up every second and reads the next sensor. This results in very minimal overhead, and keeps the push buttons responsive.
You can see the Ethernet module at the top of the picture. Every minute, temperature information is sent to a site. It's just a simple HTTP GET that looks like this:
Except that there are 15 sensor pairs. The hex to the left of the colon is the id of the sensor and the rest is the temperature in Fahrenheit. If there's been an event within the past minute, it will be appended to the query string:
A simple PHP program connects to the database and inserts the temperature readings and, optionally, the event.
The MySQL database has a table that maps the sensor ids to the cable tag.
There's no security on that site right now, but that'll change soon. Too many script kiddies with nothing better to do. I'll probably use a REST interface with a POST and some kind of authentication key depending on how much I want to protect the site.
posted 7 years ago
The last two sensors are infrared. The DS1820's max out around 257 degrees Fahrenheit. That's what the spec sheet says, but it seems to me that the plastic TO-92 body would melt before it got that hot. Either way, the top of the drum will mostly likely exceed that temperature. So I wired up two infrared sensors. These are MLX90614 devices, usually used in handheld IR thermometers. They use the I2C interface, and so you can have any reasonable number of these hooked to your microcontroller using only two pins.
The sensors read an average in a cone shape from the face of the sensor, so I made sure that they were close enough to the heat source to see only what's hot. But not too close to melt. There's one suspended above the drum and another pointing to the bottom of the feed tube where the combustion chamber starts.
Once all the sensors have been read for a while, there's a PHP program that uses the excellent pChart charting library to display a nice chart of the history. Bear in mind that the chart shown here was made during a burn when only the first few feet of bench were finished in concrete. The rest of the bench sensors were just lying around, so they showed pretty much the same temperature. But the outside and chimney sensors are accurate. More information on the other thread.
Baxter, thanks for the very nice post. I am all on fire again to dust off that Arduino of mine and get monitoring! Planning to use a site like cosm.com to publish the data realtime. I stated covering my exhaust with mass this past weekend and man am I sore! But non the less, feels good to do something!
The longest recorded flight time of a chicken is 13 seconds. But that was done without this tiny ad: