Converting voltage from TMP36 to degrees F

Assistance is appreciated,

I'm having trouble with my math in converting the sensor voltage value to degrees F.
My readings are coming way out of range......like 2500F at room temp. on the Serial.print

Here is what I have. Please help.

voltageLevel = analogRead(tempPin);
voltageLevel =(degreesC * 0.004882814);
degreesC = (voltageLevel - 0.5) * 100.0;
degreesF = (degreesC * (9.0/5.0)) + 32.0;

Hi, can you post your complete sketch please, we need to see how you have declared your variables.
Also your method of calculating DegF is not correct.

Tom...... :slight_smile:

one formula is wrong - // I put the range behind the formulas

voltageLevel = analogRead(tempPin); // 0 .. 1023

voltageLevel =voltageLevel * 0.004882814; // 0 .. 5.000

degreesC = (voltageLevel - 0.5) * 100.0; // - 500 .. 4500 <<<<<<<< that one is wrong (check datasheet)

degreesF = (degreesC * (9.0/5.0)) + 32.0;

Here is my entire sketch.....

The formulas I'm using are from the Arduino trainer......

Thanks.

// Yellow, Green, Red LED's
const int yellowPin = 4;
const int grnPin = 3;
const int redPin = 2;
// RGB Pins
const int gPin = 9;
const int bPin = 10;
const int rPin = 8;

// Light Sensor, Temp Sensor
const int lightPin = 0;
const int tempPin = 3;

int lightLevel;

float voltageLevel, degreesC, degreesF;

void setup()
{
pinMode(yellowPin, OUTPUT);
pinMode(grnPin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(rPin, OUTPUT);

Serial.begin(9600);
}

void loop()
{
lightLevel = analogRead(lightPin);
//Serial.println(lightLevel);
//Serial.println("lightLevel raw data ");
delay(1000);

//voltageLevel = analogRead(tempPin);
//Serial.print("tempLevel raw data ");
//Serial.println(voltageLevel);

delay(1000);

lightMonitor();

tempMonitor();
}

void lightMonitor()
{
if ((lightLevel <= 880) && (lightLevel >= 800))
{
Serial.print("Light Level OK ");
Serial.println(lightLevel);
digitalWrite(grnPin, HIGH);
digitalWrite(yellowPin, LOW);
digitalWrite(redPin, LOW);
delay(1000);
}
else if (((lightLevel <= 799) && (lightLevel >= 600)) || ((lightLevel <= 881) && (lightLevel >=900)))
{
Serial.print("Light Level Warning ");
Serial.println(lightLevel);
digitalWrite(yellowPin, HIGH);
digitalWrite(grnPin, LOW);
digitalWrite(redPin, LOW);
delay(1000);
}
else
{
Serial.print("Light Level Out Of Spec ");
Serial.println(lightLevel);
digitalWrite(redPin, HIGH);
digitalWrite(yellowPin, LOW);
digitalWrite(grnPin, LOW);
delay(1000);
}
}

void tempMonitor()

{
voltageLevel = analogRead(tempPin);
voltageLevel =(degreesC * 0.004882814);
degreesC = (voltageLevel - 0.5) * 100.0;
Serial.println(degreesC);
degreesF = ((degreesC * (9.0/5.0)) + 32.0);

if ((degreesF <= 72) && (degreesF >= 68))
{
Serial.print("Temp Level OK ");
Serial.println(degreesF);
digitalWrite(gPin, HIGH);
digitalWrite(bPin, LOW);
digitalWrite(rPin, LOW);
delay(1000);
}
else if (((degreesF <= 65) && (degreesF >= 62)) || ((degreesF <= 78) && (degreesF <= 75)))
{
Serial.print("Temp Level Warning ");
Serial.println(degreesF);
digitalWrite(gPin, HIGH);
digitalWrite(bPin, HIGH);
digitalWrite(rPin, LOW);
delay(1000);
}
else
{
//Serial.print("Temp Level Out Of Spec ");
//Serial.println(degreesF);
digitalWrite(gPin, LOW);
digitalWrite(bPin, LOW);
digitalWrite(rPin, HIGH);
delay(1000);
}
}

Read How to post code properly and then fix up your message with tags.

Pete

Hi,

The formulas I'm using are from the Arduino trainer......

what trainer, can you post a link to it?

  voltageLevel = analogRead(tempPin);
  voltageLevel =(degreesC * 0.004882814);
  degreesC = (voltageLevel - 0.5) * 100.0;

The above is a code box, this bit of code makes no sense.

Tom..... :slight_smile: