(Reference) TMP36
TMP36 Analog Temperature Sensor
Wiring
Requires analog input pin
A0
A1
A2
A5
A3
(SDA
orD0
)A4
(SCL
orD1
)
Orientation
- Note that is BOTTOM VIEW
Operation
- Analog temperature sensor
- Measures environment temperature and returns a voltage
- Since this is an analog input, we use analog to digital conversion to read input
- Voltage on pin will varies 0v to 3.v, and Photon 2 will read 0 to 4095
Conversions
- 10 mV per deg C with a 0.5 v offset
voltage = ADC_val / 4095 * 3.3
tempCelsius = (voltage - 0.5) * (1 / 0.01)
tempFahrenheit = tempCelsius * (9/5) + 32
Important: C++ int
and float
- Division with
ints
in C++ truncates decimals
int x = 3;
int y = 6;
float result = x / y; // 0 since 3/6 is truncated`
- Instead, make sure to cast (convert) one of the
int
values to be afloat
int x = 3;
int y = 6;
float result = (float) x / y;
Code
const int PIN_TMP = A5;
void setup() {
Serial.begin(9600);
pinMode(PIN_TMP, INPUT);
}
void loop() {
// read ADC value
int val = analogRead(pin_temp); // range 0-4095 ADC
// calculate voltage from ADC
float voltage = (float)val / 4095 * 3.3;
// calculate celsius from voltage
float tempC = (voltage - 0.5) / 0.01;
//convert to fahrenheit
float tempF = tempC * (9.0 / 5) + 32;
}
Credit
- Analog datasheet
- Sparkfun
- Images created with Fritzing