Sensor de temperatura TMP36 y Arduino UNO.

Para esta práctica, lo que vamos a necesitar son los siguiente elementos.

● 1 TMP36
● 3 resistencias de 330 Ω
● 3 diodos Led Rojo, amarillo y verde de 5mm

componentes del circuito

Por supuesto, también necesitarás tu Arduino UNO para realizar la conexión.

El circuito a montar lo puedes ver en la siguiente imagen.

circuito sensor conectado

Como puedes ver en la imagen, el circuito es muy sencillo de montar y no necesitas tener un master de la universidad Juan Carlos I para montarlo. Eso si, tienes que tener cuidado al montar el TMP36 ya que si lo montas al revés, podrá calentarse mucho e incluso romperse (y tú podrías quemarte al manipularlo).

Y como siempre me gusta empezar con un programa sencillo voy a programar el encendido y apagado sincronozado de los Led. recuerda que los Led se conectan el cátodo al negativo y el ánodo a positivo.

intermitencia secuencial

Intermitencia alternativa con Arduino UNO.

Y el código que ha creado la intermitencia es muy simple a estas alturas.

// Led_intermitente.ino // Se encienden los LED secuencialmente void setup() { int varTemp = A0; pinMode (4, OUTPUT) pinMode (3, OUTPUT) pinMode (2, OUTPUT) } void loop() { // Led Verde digitalWrite (2, HIGH); delay (1000); digitalWrite (2, LOW); delay (1000); // Led Amarillo digitalWrite (3, HIGH); delay (1000); digitalWrite (3, LOW); delay (1000); // Led Rojo digitalWrite (4, HIGH); delay (1000); digitalWrite (4, LOW); delay (1000); } Arduino UNO

En el circuito anterior no hemos utilizado el TMP36 todavía, sino que hemos hecho que se alterne la alimentación de los diodos LED pasando de su estado de HIGH a LOW y esperando un segundo por cada LED. A continuacion vamos a usar el TMP36 y modificar el .ino para que por cada rango de temperatura se encienda un LED hasta llegar a una temperatura máxima en que estarán encendidos todos los LEDs.

Prueba y código del circuito

Un dato curioso del TMP36, es que es sensible a radiaciones asociadas a la luz del diodo LED y por tanto la temperatura del propio TMP36 aumenta debido a la luz del propio LED.

El código siguiente muestra el proceso de creación de temperatura. El setup(), va a ser igual que en el anterior ejercicio, pero el loop() va a variar en cuanto que necesitamos la temperatura del dispositivo TMP36 a través del pin A0. Por eso aplicaremos esta corrección:

// Sensor_TMP36.ino // Se encienden los LED según la temperatura void setup() { Serial.begin(9600); pinMode(4, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); } void loop() { int lectura = analogRead(0); // Apunto al pin 0 analógico float voltaje = 5.0 / 1024 * lectura; // Si usáis el LM35DZ, la fórmula será: float temp = voltaje * 100; float temp = voltaje * 100 - 50; // Solo para el TMP36 Serial.println(temp); delay(1000); // Vamos a hacer un tope para cada rango de temperatura if (temp <= 10) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); } else if ((temp >= 11) && (temp <= 25)) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); } else { // para temperatura mayor de 25 ºC digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } } Arduino UNO

De ahí la necesidad de controlar la corriente máxima que circula por los LEDs ya que si no se pusiera dicha resistencias, la temperatura de irradiación sería elevada y afectaría al circuito.

Claro que se pueden separar los LED del sistema de control de temperatura o aislar al TMP36 para que la radiación sea mínima.

Puedes observar tu mismo que si desconectas las resistencias de los LEDs y subes de nuevo el Sketch, verás que la temperatura aumenta aproximadamente diez grados respecto a la temperatura con los LEDs encendidos, pero no te lo recomiendo aunque esta técnica no destruya los LEDs porque la corriente máxima de salida de los puertos digitales de Arduino UNO no es suficiente como para destrozarlos.

variación de la temperatura con los LEDs

Variación de la temperatura aumenta si quitas las resistencias.

Ahora si podemos bajar la temperatura tope a 30 y podemos modificar el circuito para hacerlo más preciso. Pero antes, repasaremos el código para entenderlo.

void setup() { Serial.begin(9600); pinMode(4, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); } Arduino UNO

En el setup() se establecen los puertos digitales como salida y se asigna la comunicación con el serial. Utilizamos los pines 2, 3 y 4 del Arduino que serán los que conectemos a los ánodos de los LED correspondientes (verde, amarillo y rojo).

El loop nos servirá para crear la acción deseada. la variable lectura acumulará el valor del TMP36. Mientras que la variable voltaje, nos convertirá el valor del TMP a un valor digital para usarlo, teniendo en cuenta que alimentamos el circuito con los 5V de los pines de Arduino UNO. De ahí la variable temp cogerá el valor actual del TMP36 con la conversión realizada. A continuación en el monitor serie, muestro el valor actual de la temperatura.

void loop() { int lectura = analogRead(0); // Apunto al pin 0 analógico float voltaje = 5.0 / 1024 * lectura; // Si usáis el LM35DZ, la fórmula será: float temp = voltaje * 100; float temp = voltaje * 100 - 50; // Solo para el TMP36 Serial.println(temp); delay(1000); } Arduino UNO

Conversión:
El fabricante del TMP36 nos dice en la hoja de características que el 0V no es cero grados centígrados, sino que 0V significa -50ºC. Además también ha especificado que por cada 10mV de tensión de salida hay que sumar un grado centígrado.

Como el TMP36 se conecta al puerto analógico, el cual mide 1024 para un máximo de 5V, la lectura estará dada según la formula siguiente:

formula de transformación

Fórmula de transformación digital del TMP36.

De ahí utilizo la variable tipo float para establecer el voltaje del pinA0. Y como he especificado que existe un desfase entre la temperatura mínima y máxima, la variable temp se encarga de restar 50 para que se exprese correctamente el valor de la temperatura.

void loop() { // Vamos a hacer un tope para cada rango de temperatura if (temp <= 10) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); } else if ((temp >= 11) && (temp <= 25)) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); } else { // para temperatura mayor de 25 ºC digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } } Arduino UNO

Para terminar, un condicional indica la condición necesaria para que se enciendan los led. Por defecto los dos LEDs verde y amarillo están encendidos porque la temperatura de la sala está entre los 11ººC y 24ºC. Pero si la temperatura superara este valor, se encenderá también el rojo. Cuando vuelva a bajar la temperatura se volverán a encender los led verdes y amarillos en función de la temperatura.

funcionamiento

Funcionamiento del circuito de control de temperatura.

Mostrar temperatura en display LCD 16x2.

Sin duda, el montaje de un display LCD nos permitirá mostrar la temperatura en una pantalla LCD aparte del monitor serial. Para esta parte del proyecto necesitarás un display LCD 16x2 que suelen incluirse en el kit starter de Arduino UNO. Además existen multitudes de páginas en Internet en donde poder comprar dicho display. El circuito que vamos a montar es el siguiente:

Montaje del circuito con control de temperatura

Montaje del circuito con control de temperatura.

Para empezar con el proyecto primero montaremos el hardware del circuito y después descargaremos la librería necesaria para tal fin.

Conexiones del display 16x2.
En la siguiente imagen puedes ver el esquema de conexiones del display 16x2.

conexionado del LCD

Esquema de conexión de la pantalla LCD 16x2.

Las conexiones que utilizaremos son los siguientes:

● GND y VCC son respectivamente positivo y negativo. Lo conectaremos a 5V.
● Contrans. Conectando un potenciómetro de 10KΩ podremos regular el contraste de la pantalla LCD. Si no conectamos este pin directamente no veríamos nada.
● RS el selector del registro. Es para mandarle información al LCD de lo que se quiere hacer. Si deseamos mandarles comandos de control o mostrar caracteres en la pantalla.
● RW lo tendremos conectado a GND para indicarle en todo momento que queremos escribir.
● EN es enable. Es para activar que la pantalla reciba información.
● D0 a D7. Es un bus de datos de 8 bit pero nosotros solamente necesitamos 4 bits. Del D4 al D7. Por este bus enviaremos los datos a la pantalla.
● Blacklight son para la luz de fondo del LCD. Los conectaremos igual que GND y VCC.

Adicionalmente añadiremos una resistencia de 1Kω u 510Ω que interpondremos entre el positivo de alimentación y VCC, con el fin de proteger al display LCD.

Aunque parezca muy complicado, solo tiene cableado. Asegurate de conectarlo como puedes ver en la imagen, ya que una equivocación puede hacer que no se reproduzca correctamente.

Código

Como puedes ver, el código es bastante sencillo. Fíjate que llamamos a la librería LiquidCristal.h que contiene todo lo necesario para gestionar un display LCD (Cristal Líquido) con Arduino. Podrás descargar la librería desde el propio IDE de Arduino en su sección de descargas.
// Muestra la temperatura en grados centígrados en una pantalla LCD #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 9, 8, 7); int sensorPin = 0; void setup() { lcd.begin(16, 2); } void loop() { lcd.clear(); int reading = analogRead(sensorPin); float voltage = reading * 5.0; voltage /= 1024.0; float temperatureC = (voltage - 0.5) * 100; float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0; // temperatura en fahrenheit lcd.print(temperatureC); lcd.println(" Grados Centigrados "); delay(1000); } Arduino UNO

La librería LiquidCristal.h, nos permite crear un objeto que representa al display LCD y que contiene todas las operaciones "de bajo nivel" para que a nosotros nos resulte fácil la programación de este dispositivo. Puedes ver en el constructor de la clase LiquidCristal, que permite crear un objeto de esta clase para poder usarlo en la pantalla. Como argumento recibe una serie de parámetros que son los puertos usados en nuestra placa Arduino.

// Muestra la temperatura en grados centígrados en una pantalla LCD #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 9, 8, 7); int sensorPin = 0 Arduino UNO

Una configuración básica puede indicar que los parámetros pasados en el constructor son los pines utilizados en la placa Arduino. Sin embargo, los dos primeros números (el 12 y el 11) se refieren a los pines conectado a los puntos RS y E del display. Los cuatro últimos números se refieren a los pines de D4 a D7 del bus de datos del display. En general, esta configuración es la más simple y típica. No obstante, este constructor admite otras listas de argumentos, que no repasaremos en este tutorial.

La variable SensorPin, nos indicará el pin analógico que utilizaremos para conectar el TMP36.

En el setup(), el método begin() recibe dos parámetros que son, el primero la anchura de carácteres y el segundo la altura (número de filas), del display. Además posiciona el cursor en el primer carácter de la primera fila.

// Muestra la temperatura en grados centígrados en una pantalla LCD #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 9, 8, 7); int sensorPin = 0; void setup() { lcd.begin(16, 2); } Arduino UNO

Y por último en el loop, se realiza, primero la limpieza de la pantalla mediante el método clear(), limpiándo la pantalla del display y posicionándo el cursor en el primer carácter en la fila primera.

void loop() { lcd.clear(); int reading = analogRead(sensorPin); float voltage = reading * 5.0; voltage /= 1024.0; float temperatureC = (voltage - 0.5) * 100; float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0; // temperatura en fahrenheit lcd.print(temperatureC); lcd.println(" Grados Centigrados "); delay(1000); } Arduino UNO

A continuación el código anterior para calcular y expresar el valor de la temperatura. Pero para terminar y que se muestre en pantalla el mensaje requerido, se utiliza el método print(), para mandar valores numéricos formateados, aparte de mostrar el mensaje establecido en código.

Así que cuando ejecutas, se muestra el mensaje y la temperatura en grados centígrados (o Farenheit), según lo tengas establecido.

Bueno, creo que puedo dar por finalizado ésta practica completa del sensor de temperatura con Arduino y el TMP36. En el siguiente capítulo empezaremos a trastear con motores eléctricos y nuestra placa Arduino UNO. Gracias por tu visita y recuerda que me ayudas enormemente si comparte esta práctica en tus redes sociales.

Comparte este conocimiento en redes sociales