En la siguiente práctica vamos a aprender a utilizar el sensor de temperatura TMP36. Este sensor es un elemento que nos permite medir la temperatura con precisión y bajo voltaje. Proporciona una salida de voltaje que es linealmente proporcional a la temperatura Celsius (ºC). Se suele utilizar el sensor TMP36 para medir la temperatura de los sistemas de control ambiental, protección térmica, control de procesos industriales, alarmas contra incendios, monitores de sistemas de potencia y gestión térmica de la CPU. Como se observa en la imagen el TMP36 tiene tres patillas que se deben conectar tal como se muestra, la patilla izquierda a 5V, la derecha a GND, siendo la patilla central la salida para conectar a la entrada analógica de Arduino.
Las características del sensor TMP36 se exponen en la imagen de la izquierda. Nos muestra el rango de temperaturas física que mide (-40ºC<T<125ºC) y la precisión del sensor, siendo esta de ±1ºC a 25ºC. Este dispositivo tiene un comportamiento lineal en cuanto a la presentación de los valores de tensión con respecto a la temperatura, siendo la variación de 1 mV de tensión la respuesta del sensor al aumento de 1ºC de temperatura.
Establecer el rango de equivalencias entre el valor suministrado por el sensor y el valor equivalente de la temperatura se puede hacer de forma "manual" como se muestra en la primera línea de la imagen de más abajo o bien utilizando en el código la función map(). En el caso de hacer la programación mediante la primera fórmula, tal como se explica en el vídeo explicativo de más abajo, es necesario llamar la atención sobre la necesidad de que en la expresión ((valorEntrada*5.0/1024), el valor 5.0 marcado en rojo se deje así en lugar de simplificarlo y poner ((valorEntrada*5/1024) ya que si lo hacemos así (matemáticamente sería lo mismo, pero a nivel de programación no) no podremos obtener valores decimales aunque el uso de la variable float (esto se explica más abajo) nos lo permita. Como digo todo esto está explicado en el vídeo a partir del minuto 24:05.
Vamos a montar en TinkerCad el circuito de la imagen inferior. En dicho circuito tenemos (además de la placa de Arduino y de la protoboard) el sensor de temperatura TMP36 y un LED. El sensor recogerá la información térmica del ambiente que lo rodea enviándo la señal registrada a la entrada analógica A0 de Arduino y, tras ejecutar el código, un diodo LED se activará cuando la temperatura supere un determinado umbral establecido. Por ejemplo en este caso 25ºC.
El programa sería:
Vamos a comentar las nuevas funciones de código que aparecen en el programa. Lo primero que se introduce es la función const.
Esta función un calificador de variable que modifica el comportamiento de la variable, haciendo que una variable sea de "solo lectura ". Esto significa que la variable se puede usar como cualquier otra variable de su tipo, pero su valor no se puede cambiar. En el programa usamos const int pinLed=2; lo que hacemos es declarar una variable (pinLed) de valor entero (int) que es constante (const). El valor de asignación que es el pin 2 de Arduino no podrá cambiarse durante la ejecución del programa.
La segunda función que se introduce es la función float. Es una función tipo dato (como int) El formato de dato es del tipo “coma flotante” se aplica a los números con decimales. Los números de coma flotante tienen una mayor resolución que los de 32 bits que ocupa con un rango comprendido 3.4028235E+38 a -3.4028235E+38. En el programa lo usaremos para las lecturas decimales de temperatura (tipo 25.8ºC) más adelante.
La tercera función nueva que nos aparece, es la función map(). Esta función nos permite «hacer equivalencias» entre diferentes rangos. Analicemos el ejemplo de nuestro programa: (Vídeo explicativo función map())
temperatura = map(analogRead(pinSensorTemp), 0,1023,-50,450)
Estamos asignado a la variable "temperatura" el valor de la función map que venia definida por cinco parámetros que establecían el rango de equivalencias entre las lecturas y las temperaturas. El primero la lectura analógica de la entrada (niveles de tensión entrando por A0 en nuestro caso), la escala en la que se mueve esta entrada que es entre 0 y 1023 (son los 1024 valores posibles) y la escala de salida de la función que ya vimos que se movía entre -50ºC y 450ºC. El problema de hacerlo así, es que únicamente nos dará valores enteros de medida de temperatura, posteriormente lo arreglaremos.
VÍDEO DE LA PRÁCTICA
Práctica resuelta. Las explicaciones a las tres variaciones del programa que se ven en esta práctica están en esos rangos de tiempo.
Min 0< Prac9.1 < Min13:15
Min 13:15 < Prac9.2 < Min17
Min 17 <Prac9.3 < final
Incorporamos al circuito un diodo LED (con su resistencia limitadora) para tener una señal luminosa de paso de umbral sobre un nivel de temperatura.
A continuación vamos a corregir el código para poder obtener valores decimales de medida de temperatura y también indicar hacer que el led se encienda si la temperatura que detecta el sensor es igual o mayor que 25ºC y permanezca apagado si es menor. Esto se explica en el vídeo anterior entre el minuto 13 y el 17.
Podemos perfeccionar nuestro sistema de control de temperatura haciendo variable el control de la temperatura (antes lo pusimos a 25ºC) sin necesidad de cambiar el código y volver a programar el Arduino. Esto lo vamos a hacer con el siguiente circuito.
El programa sería: