Uno de los sensores que el Shield de Prácticas incorpora es un sensor de temperatura LM35D que puede medir la temperatura ambiente en un rango de entre los 0ºC y los 100ºC con una precisión de medio grado. Este sensor está conectado a la entrada analógica A2 por que su salida es de este tipo, en realidad obtenemos un voltaje proporcional a la temperatura medida y con unas operaciones matemáticas obtenemos la temperatura.

Este ejemplo nos permitirá ver cómo captamos datos, hacemos operaciones con ellos y obtenemos resultados que luego podemos enviar a un dispositivo de salida, que al igual que en el ejemplo anterior será el monitor serie por ser el más sencillo.

Como comando nuevo vamos a ver la función map() que sirve para convertir el valor contenido en una variable de un rango de valores a otro …básicamente hace una regla de tres pero con la potencia y flexibilidad de que si introducimos rangos de valores invertidos nos calcula automáticamente reglas de tres inversamente proporcionales.

Sin más vamos al código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
int analogPin = A2; // Pin al que esta conectado el
                    // sensor LM35D
int grados, decimas;
int lm35read;
int temperatura;


void setup()
{
  // Iniciamos comunicacion serie  
  Serial.begin(9600);
}

void loop()
{
    // tomamos la medida en bruto
    lm35read = analogRead(analogPin);

    // mapeamos el valor temperatura para que nos de
    // la temperatura en decimas de grado
    temperatura = map(lm35read,0,1023,0,4990);
   
    // ahora los grados los obtenemos dividiendo por 10
    grados=temperatura/10;
   
    // y las decimas de grado son el resto de la division
    // por 10
    decimas=temperatura%10;
   
       
    // Sacamos los datos por el puerto serie  
    Serial.print("Lectura en bruto ");
    Serial.print(lm35read);
    Serial.print("  temperatura  ");
    Serial.print(grados);
    Serial.print(".");
    Serial.println(decimas);
   
    // añadimos una pausa para no saturar el
    // puerto Serie
    delay(1000);
}

Si analizáis el código con cuidado encontrareis 1 línea clave:

1
temperatura = map(lm35read,0,1023,0,4990);

Esta línea es la que contiene el comando map() que mencioné al principio, en la cual hacemos que en la variable temperatura se almacene el resultado de una conversión, toma el contenido de la variable lm35read, un valor entre 0 y 1023, y lo convierte a un rango de entre 0 y 4990 …como ya os dije una función muy útil y versátil.

Si cargáis el código en la placa y abrís el puerto Serie veréis la temperatura aproximada que hace en vuestra habitación (no olvidemos que la precisión es de medio grado) y si ponéis dos dedos en el sensor podréis ver como la temperatura asciende rápidamente.

Hasta aquí el ejercicio de hoy, como habéis seguido este curso y ya tenéis unos conocimientos de programación ¿que tal si probáis a hacer que los decimales sean .0 ó .5? es fácil, venga probad.


Si este tutorial te ha sido de utilidad puedes considerar hacerme un donativo, por pequeño que sea estarás contribuyendo a que siga con esta labor.