Sensor LM35: medir temperaturas con Arduino

¿Cómo usar un sensor LM35 (sensor de temperatura) con Arduino?
En este tutorial vamos a aprender como utilizar un sensor de temperatura LM35 con Arduino. Este sensor es particularmente sencillo de utilizar, y al final de la publicación habremos construido con un termómetro casero.
El sensor LM35 varia su resistencia eléctrica en base a la temperatura ambiente. Tiene un rango operativo desde los -55°C hasta los 150°C, con una precisión de 1/4°C a temperaturas cercanas a los 25°C, y 3/4°C en su rango completo. A quienes les interese conocer un poco más en detalle este sensor.


Sensor LM35

El sensor LM35 que utilizaremos consta de tres patas en un encapsulado similar al de un transistor. La primera pata (número 1 en la imagen), se conectará a VCC (+5V), la pata central (número 2) será la salida del sensor, la cual conectaremos a uno de los pines analógicos de nuestro Arduino, y finalmente la tercera pata (número 3) se conectará a GND (ground).

Durante el desarrollo utilizaremos los siguientes componentes:
1.       Placa Arduino UNO
2.       Sensor LM35
3.       Breadboard

4.       Jumper cables

Componentes tutorial Sensor de Temperatura LM35 Arduino


Esquema de conexión - Tutorial LM35
A continuación podremos observar el esquema de conexión del circuito. Como podrán ver es extremadamente sencillo de conectar. Al igual que en el tutorial anterior (Cómo utilizar un sensor LDR con Arduino) utilizaremos para sensar la temperatura, uno de los <strong>pines analógicos</strong> de nuestro Arduino, en nuestro caso, elegimos el pin A1.

Esquema Conexión LM35 - Arduino

Código fuente - Tutorial LM35
El código fuente, al igual que el circuito es muy sencillo de realizar. Si sabes como hacer una regla de tres simple, podrás entender el código 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Pin analógico asignado al Sensor de Temperatura LM35
int LM35_PIN = 2;
 
void setup() {
   Serial.begin(9600);
}
 
void loop() {
  int input = analogRead(LM35_PIN);    // Obtengo el valor sensado por el LM35
  float mv  = (5000 / 1024.0) * input; // Convierto el valor leido a mV
  float cel = mv / 10;                 // Convierto los mV leidos a grados celsius
  
  Serial.println(cel);
  delay(1000);
}

Como pudieron ver, el código es extremadamente sencillo. Pero... de donde salió esa fórmula? Vamos a explicarlo rápidamente y tratar de mejorar las lecturas utilizando un tip obtenido en la página de Arduino.
Los pines analógicos entregan como lectura un valor entre 0 y 1023, de acuerdo al voltaje de lectura. Es decir, el valor obtenido utilizando analogRead, será proporcional al voltaje recibido en el pin. El valor del pin fluctúa entre 0v y 5v, por ende, podemos decir que el valor 0 de analogRead corresponderá a 0v y el valor 1023 a +5v. De esta forma podemos calcular aproximadamente el valor en volts de cada unidad entregada por el analogRead:





Conocido este valor, podremos calcular los mV de lectura entregados por el sensor LM35. Por ejemplo,
 si analogRead entrega un valor sensado de 70, podemos multiplicar este valor para obtener los mV aproximados lectura:




Acudiendo al datasheet, podremos ver que cada grado celsius corresponde a una variación de 10mV. Es decir, si nuestra lectura es de 20mV, equivale a 2°C. Entonces:




Esta fórmula puede ser acortada de la siguiente forma, entregando el mismo resultado:



5.0 * analogRead(PIN) * 100.0) / 1024;

¿Es posible mejorar las lecturas? Si: en el siguiente link podrán ver como mejorar las lecturas realizadas desde el sensor LM35, cambiando el aRef. Por default, Arduino utiliza como "tope" para repartir las 1024 unidades 5v de lectura en los pines analógicos. Este valor puede ser modificando utilizando la función analogReference (https://www.arduino.cc/en/Reference/AnalogReference). El sensor LM35 entrega como máximo 1V de salida, por lo que estamos desaprovechando el 80% de la precisión que posee nuestra placa. Para mejorar las lecturas, vamos a modificar este valor a INTERNAL, cambiando el tope de 5V a 1.1V, aprovechando prácticamente toda la precisión que nuestro sensor ofrece.
El cambio en el código es muy pequeño, quedando de la siguiente forma:





Comentarios