Can it be done?

Hi newbie here with a question. I have a wood boiler at home that I’d like to install controls on. It has a combustion fan on it and I’d like to install a Johnson Controls s66 speed control. 1)Is the Ardunio capable of a 0-10v output, so the johnson can ramp the combustion fan up and down based on stack temp. 2) Can the Ardunio accept a type K thermocouple?

I’d like to have the fan speed up as the stack temp starts to drop and slow down as the stack temp rises.

I’d also like to shut the fan down when the stack drops below 190-200.

Plus it would be nice to monitor temps in/out of boiler, storage tank temps.

Would this even be possible? Thanks for any help. Brian

The Arduino is only capable of TTL level output voltages (+5V max), but with some level conversion circuitry, it can be done.

It can accept a type K thermocouple, but you’ll need some sort of driver circuit, probably based around an operational amplifier. Type K thermocouples (at least according to wikipedia) develop a potential difference of about 41uV/degree Celsius. This means at 200C, the voltage across it would be ~8mV. The ADC of most Arduino boards either uses +5V or +1.1V references. Directly connecting the thermocouple is impossible as your resolution would be worthless. I’m sure some nice fellows will point you to some other posts/documents to help.

Directly connecting the thermocouple would have the following results for example (assuming the BEST case you are using a 1.1V reference):

Temperature = 200C
Voltage across the thermocouple = 8mV = 41(uV/C) * 200C
0.008V/1.1V = 0.0073
0.0073 * 1023 (the number of steps the ATMEGA’s 10-bit ADC is capable of) ~= 7.5, it would probably hover between 7 and 8.

If the temperature was instead 300C…
Voltage = 12mV
0.012V/1.1V = 0.011
0.011 * 1023 ~= 11

So with the ADC capable of 1023 different values, a spread of 100C would only change the output of the ADC from 7 to 11, which is absolutely awful resolution.
I went through this to show you why you cannot directly connect the thermocouple.

Connection to an mc3304 is pretty easy. And it’s pretty cheap. That’s a 13 bit A/D. Getting you about 1 ADC unit per 4 degrees. I suggest this only cause I’ve never used an opamp. That may be better, but I wouldn’t know ;->

This is how I’d go about doing it:

It’s fairly straightforward to get a dual op-amp chip (one chip with two OPAMPS in it sharing the same voltage supply rails) and wire the first one up as an inverting amplifier with some gain to make the numbers easy to deal with. It’d take me some time to think of something practical but you could set it up to have a closed loop gain of -250 so 41 microvolts becomes roughly 10 millivolts (this would make it just about equivalent to an LM34/LM35 sensor). After that amplifier you would need a unity gain inverting amplifier to make -250 into +250. The only problem with this approach being that most opamps need dual supplies (+/- 12V for example) and the output would have to be limited to something the arduino could handle.
You can run opamps off of a 0-5V supply, and some rare ones even allow you to get an output swing between 0 and 5 volts (the full supply swing, this is special because the popular 741 opamp only lets you get within 2V of the supply voltages), I haven’t used them though. Someone will come along and take what I’ve said and make it practical.

That gain number I chose of +250 would not make sense for high temperature as you might only be able to have a temperature swing of 0 to 500F. It was just a convenient example.

EDIT: Heres some more information about how to use opamps. Schools dedicate entire courses to these things, so don’t fret if you don’t understand. I’m an EE student and my understanding is limited.

The first stage is an inverting amplifier, and heres is a picture from wikipedia.

The voltage gain of the stage is determined by Av = - ( Rfeedback / Rinput ) For example, for -250 gain you could use a 1k for Rinput and a 250k for Rfeedback.

The second stage is a unity gain inverting amplifier (Av = -1) so you would just replace Rfeedback with a short and omit Rinput. I would then capacitively couple the two stages.

Again this is just a framework for an option you have. Someone else might have a more elegant solution.

Thanks for the replys. I have been doing a bunch of reading and my head now hurts. I’ve been doing some thinking and this is how I’d like it to work. At 200 degrees fan would be at 100% As temp rises I’d like the fan to slow down At 700 degrees fan is at 0% My main goal is to try and maintain 500-550 degrees. The Freq. drive that I’m looking at can accept 0-10v or 4-20ma but I’ve got to figure out if I can invert the signal so the fan is at 100% at 0/4ma and 0% at 10/20ma. Thanks for the help.

Inverting the the behavior of the fan will be easily handled in the code, as long as you can get a predictable signal into the Arduino’s analog input pin. I found a thermocouple amplifier example circuit from Maxim that looks pretty simple (to me ;)) It’s for a Type J or Type K thermocouple.

http://www.maxim-ic.com/appnotes.cfm/an_pk/3

EDIT: That link was in the results of a Google search for “type k thermocouple amplifier”.

http://www.nutsvolts.com/index.php?/magazine/article/microprocessor_controlled_wood_stove_part_1 Nuts and Volts article might help.

Wow, Franklin, good find!

http://datasheets.maxim-ic.com/en/ds/MAX6675.pdf

I can’t think of a better/more accurate solution.

Wow thanks guys, good find. I’ve got a sample coming. I’ll let you know how it works. Thanks again. Brian