Meat Temp probe to Arduino

So I bought a new Smoke Hollow smoker, I switched from the Bradley to this smoker, since my Bradley quit working, and it was quite a bit of $$ to replace it, Also the Bradley required custom bisquettes, and I was ready to try some different woods (like Jack Daniels)!

I like everything about my new smoker, except it doesn’t have a set it and forget it, like the bradley did, So I plan on temperature automating it, with a servo and an ignitor (more on that in a different post), I thought since I am automating the gas/temperature I might as well fix the meat thermometer too, so instead of having to carry around my secondary probe reader that has a limited range, I could maybe write an iPhone app to monitor the temp. I found some good Arduino code to use the analog on a probe, over here: http://learn.adafruit.com/thermistor It almost was perfect except it wasn’t a meat thermometer. So I pulled out my trusty multimeter and went to work.

The circuit is simple.

                                         |-----------------------Arduino A0
             Probe                       |
GND -------- | |           5Volt ----- 10k Ohm Resistor
               |                         |
               |-------------------------|-----------------------Probe Positive

You can see the attached picture below to see how I put it in the breadboard.

In the code you can see in the code I put //PLAY WITH THIS SETTING, on my temp probe I had to use 500 OHM (I still used 10K on the breadboard, that is just standard) resistance in the probe itself. You will need someway to get the temperature in the current room you are working, in order to “Calibrate it”.

// which analog pin to connect
#define THERMISTORPIN A0         
// resistance at 25 degrees C
#define THERMISTORNOMINAL 10000      
// temp. for nominal resistance (almost always 25 C)
#define TEMPERATURENOMINAL 25   
// how many samples to take and average, more takes longer
// but is more 'smooth'
#define NUMSAMPLES 5
// The beta coefficient of the thermistor (usually 3000-4000)
#define BCOEFFICIENT 3950
// the value of the 'other' resistor
#define SERIESRESISTOR 500 //PLAY WITH THIS SETTING
int samples[NUMSAMPLES];
 
void setup(void) {
  Serial.begin(9600);
}
 
void loop(void) {
  uint8_t i;
  float average;
 
  // take N samples in a row, with a slight delay
  for (i=0; i< NUMSAMPLES; i++) {
   samples[i] = analogRead(THERMISTORPIN);
   delay(10);
  }
 
  // average all the samples out
  average = 0;
  for (i=0; i< NUMSAMPLES; i++) {
     average += samples[i];
  }
  average /= NUMSAMPLES;
 
  //reading = analogRead(THERMISTORPIN);
 
  Serial.print("Analog reading "); 
  Serial.println(average);
 
  // convert the value to resistance
  average = 1023 / average - 1;
  average = SERIESRESISTOR / average;
  Serial.print("Thermistor resistance "); 
  Serial.println(average);
 
float steinhart;
  steinhart = average / THERMISTORNOMINAL;     // (R/Ro)
  steinhart = log(steinhart);                  // ln(R/Ro)
  steinhart /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  steinhart = 1.0 / steinhart;                 // Invert
  steinhart -= 273.15;                         // convert to C
 
  /*Serial.print("Temperature "); 
  Serial.print(steinhart);
  Serial.println(" *C"); 
  */
  float f = steinhart * 1.8000 + 32.00;
  Serial.print(f);
  Serial.println(" *F");   
  delay(1000);
}

IMG_1045

IMG_1044

IMG_1043

IMG_1046

IMG_1047

Happy Smoking!

–John

Leave a Reply

Your email address will not be published. Required fields are marked *