Estación de Temperatura con Arduino

Autores (Grupo 4)

  • Marta Muñoz Alonso (Grado en Ingeniería Informática)
  • Alexandre Ortiz Pérez (Grado en Ingeniería Informática)
  • Juan Rodríguez Alonso (Grado en Ingeniería Informática)

Introducción

Tras haber buscado diferentes opciones para nuestro Proyecto Final, nos llamó la atención el hecho de poder realizar un Termómetro Infrarrojos controlado a través de nuestra placa Arduino.

Pese a que en un principio pensamos en diseñarlo como los termómetros infrarrojos que se utilizan habitualmente (debido a la situación actual con la COVID-19), finalmente decidimos diseñarlo en forma de caja.

Por lo tanto, nuestro proyecto está diseñado con el fin de ser utilizado como una estación de temperatura, de tal forma que cualquier persona pueda medir su temperatura corporal de forma más cómoda y segura.

Materiales Utilizados

En esta sección se incluyen todos los materiales utilizados para el desarrollo de nuestro proyecto (incluyendo los precios de cada uno):

MaterialPrecio
Placa Arduino UnoAportado por la URJC
Placa ProtoboardAportado por la URJC
Buzzer o Zumbador0,00 €
Dos Diodos LED (Rojo y Verde)Aportados por la URJC
Módulo LCD1602 I2CAportado por la URJC
Sensor MLX9061411,99 €
Pila Cegasa 6LR61 Super Alcalina (9 V)3,99 €
Interruptor Q11 y Adaptador de Corriente0,00 €
Coste Total15,98 €

Diseño y Montaje del Circuito

Como bien hemos mencionado en la Introducción, nuestro principal propósito de cara al diseño era hacerlo en forma de caja. Por ello, escogimos una caja de zapatos para realizar nuestro Proyecto dentro de la misma.

Poco a poco, y tras las diferentes pruebas de código que fuimos haciendo de los componentes mencionados con anterioridad, el diseño de nuestra estación de temperatura quedó de la siguiente manera (visto frontal y lateralmente):

Con respecto al montaje del circuito que hace funcionar nuestro proyecto, mostramos en primer lugar una vista general de dicho montaje:

Visión General del Montaje del Circuito

Tras haber visto cómo están montados todos los componentes de nuestro proyecto dentro de la caja, vamos a ir desgranando (parte por parte) cómo están conectados dichos componentes: empezando con el montaje de los Diodos LED y el Buzzer, seguido por el montaje del módulo LCD, y por último, el montaje del sensor MLX90614 (todos ellos sobre plano).

Código Fuente del Proyecto

En esta parte del post se muestra el código fuente que hace que nuestro proyecto funcione de forma correcta, en el cual se indican todos los casos de uso a los que ha de reaccionar nuestro proyecto (dependiendo de la temperatura que nuestro sensor MLX90614 reciba):

/*
 =============================================================================================
    Nombre del proyecto : termometro.ino
    Autores             : Marta Muñoz Alonso, Alexandre Ortiz Pérez y Juan Rodríguez Alonso
 =============================================================================================
*/

// Librerías utilizadas
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <LiquidCrystal_I2C.h>

// Creamos el caracter 'º' para el módulo LCD
#define Circulo 0
byte caracterGrados[] = {
  B01110,
  B01010,
  B01110,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

// Creamos el objeto del tipo del sensor de temperatura (MLX90614)
Adafruit_MLX90614 sensor = Adafruit_MLX90614();

// Ajustamos la dirección del LCD a 0x27 para una pantalla de 16 caracteres y 2 líneas
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Definimos los pines a los que se conectan los LEDs y el Buzzer
int BUZZER = 7;       // El Buzzer se encuentra en el pin digital 7
int LED_ROJO = 10;    // El LED Rojo se encuentra en el pin digital 10
int LED_VERDE = 8;    // El LED Verde se encuentra en el pin digital 8

// Función que nos permite establecer la Configuración Predeterminada de la Placa
void setup() {
  
  // Inicializamos el LCD y el sensor MLX90614
  lcd.init();
  sensor.begin();

  // Establecemos los pines declarados anteriormente como Pines de Salida
  pinMode(BUZZER, OUTPUT);
  pinMode(LED_ROJO, OUTPUT);
  pinMode(LED_VERDE, OUTPUT);

  // Creamos el caracter 'º' para nuestro módulo LCD
  lcd.createChar(Circulo, caracterGrados);

  // Encendemos la retroiluminación de nuestra pantalla LCD
  lcd.backlight();
  
}

// Función para Encender la pantalla y mostrar la información
void encenderPantalla() {
  lcd.setCursor(0, 0);
  lcd.print(" - Termometro -");
  delay(800);
  lcd.setCursor(0, 1);
  lcd.print("  Midiendo...");
  delay(3000);
}

// Función para una Temperatura Normal
void temperaturaNormal() {
  lcd.setCursor(0, 1);
  lcd.print("Cuerpo: ");
  lcd.print(sensor.readObjectTempC());  // Mostramos la Temperatura
  lcd.write(Circulo); 
  lcd.print("C");
  digitalWrite(LED_VERDE, HIGH);        // Encendemos el LED Verde
  tone(BUZZER, 523, 500);               // Reproducimos la nota 'DO Agudo' durante 500 ms
  delay(5000);                          // Dejamos 5 segundos para poder ver nuestra Temperatura
  digitalWrite(LED_VERDE, LOW);         // Apagamos el LED Verde
}

// Función para una Temperatura Fuera de Rango
void temperaturaFueraDeRango() {
  lcd.setCursor(0, 1);
  lcd.print("Cuerpo: ");
  lcd.print(sensor.readObjectTempC());  // Mostramos la Temperatura
  lcd.write(Circulo); 
  lcd.print("C");
  digitalWrite(LED_ROJO, HIGH);         // Encendemos el LED Rojo
  tone(BUZZER, 494, 2000);              // Reproducimos la nota 'SI' durante 2 segundos
  delay(5000);                          // Dejamos 5 segundos para poder ver nuestra Temperatura
  digitalWrite(LED_ROJO, LOW);          // Apagamos el LED Rojo
}

// Función que realiza las acciones de la Placa en bucle
void loop() {

  encenderPantalla();   // Encendemos nuestro módulo LCD para poder mostrar la Información

  if ((sensor.readObjectTempC() &lt; 33) || (sensor.readObjectTempC() > 37.2)) {   // Temperatura Rara
    temperaturaFueraDeRango();
  } else {                                                                      // Temperatura Normal
    temperaturaNormal();
  }

  lcd.clear();          // Limpiamos el contenido del módulo LCD
  
}

Problemas Encontrados (con sus Soluciones)

En este caso, el único problema que hemos tenido a lo largo del todo el desarrollo de nuestro proyecto ha sido el Buzzer o Zumbador, puesto que nos costó hacer que reprodujera los sonidos en función de los rangos de temperatura establecidos.

Dicho problema se producía debido a que no teníamos actualizadas las librerías que estábamos utilizando y, por lo tanto, no se cargaba bien el programa a nuestra placa. Tras haberlas actualizado, todo funcionó sin problemas.

Material Extra

En esta parte final del post, adjuntamos una memoria explicativa con información más detallada de los pasos seguidos para elaborar este proyecto:

Por último, adjuntamos un breve vídeo como prueba de funcionamiento de nuestro proyecto con los dos casos de prueba fundamentales: en primer lugar, probamos el caso de una temperatura fuera de rango (no ponemos nada delante y coge la temperatura ambiente) ; tras ello, ponemos la mano delante del sensor MLX90614 para comprobar el caso de una temperatura normal, es decir, una temperatura adecuada con respecto a la temperatura corporal habitual.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *