Entonces, en este tutorial, vamos a construir un sistema de monitoreo de temperatura sin contacto basado en RFID usando un sensor de temperatura sin contacto con Arduino. Cuando los empleados escanean la tarjeta RFID, medirá la temperatura corporal de los empleados con un termómetro infrarrojo sin contacto y registrará el nombre y la temperatura de ese empleado directamente en la hoja de Excel. Utilizaremos Arduino Nano, MLX90614, EM18 RFID Reader y Sensor ultrasónico para construir este proyecto. El sensor ultrasónico se usa para calcular la distancia entre el termómetro y la persona. El termómetro solo medirá la temperatura cuando la distancia sea inferior a 25 cm. Es algo así como un sistema de asistencia basado en RFID , que también registra la temperatura corporal de cada persona.

Componentes requeridos:

  • Arduino Nano
  • Módulo RFID EM-18
  • Sensor de temperatura sin contacto MLX90614
  • Sensor ultrasónico
  • Tablero de circuitos
  • Cables de puente

Módulo Lector RFID EM18.

Uno de los lectores RFID ampliamente utilizados para leer etiquetas de 125 kHz es el lector RFID EM-18. Este módulo lector RFID de bajo costo presenta bajo consumo de energía, bajo factor de forma y fácil de usar. El módulo lector EM-18 puede proporcionar salida a través de dos interfaces de comunicación, es decir, RS232 y WEIGAND26.

EM18 RFID Reader presenta un transceptor que transmite una señal de radio. Cuando la etiqueta RFID entra en el rango de señal del transmisor, esta señal golpea el transpondedor que está dentro de la tarjeta. La etiqueta extrae energía del campo del electroimán generado por el módulo lector. El transpondedor luego transforma la señal de radio en la forma de energía utilizable. Al recibir energía, el transpondedor transfiere toda la información, como una ID específica, en forma de señal de RF al Módulo RFID. Luego, estos datos se envían al microcontrolador mediante la comunicación UART.

Termómetro infrarrojo MLX90614

Antes de continuar con el tutorial, es importante saber cómo funciona el sensor MLX90614. Hay muchos sensores de temperatura disponibles en el mercado y hemos estado utilizando el  sensor DHT11  y el  LM35  ampliamente para muchas aplicaciones en las que se debe medir la temperatura o la humedad atmosférica.

El sensor MLX90614  está fabricado por el sistema integrado Melexis Microelectronics, tiene dos dispositivos integrados, uno es el detector de termopila infrarrojo (unidad de detección) y el otro es un dispositivo DSP de acondicionamiento de señal (unidad computacional). Funciona según la  ley de Stefan-Boltzmann,  que establece que todos los objetos emiten energía IR y la intensidad de esta energía será directamente proporcional a la temperatura de ese objeto. La unidad de detección en el sensor mide la cantidad de energía IR emitida por un objeto objetivo y la unidad computacional la convierte en valor de temperatura utilizando un ADC incorporado de 17 bits y emite los datos a través de la comunicación I2C protocolo. El sensor mide tanto la temperatura del objeto como la temperatura ambiente para calibrar el valor de la temperatura del objeto.

Diagrama de circuito:

Como se muestra en el diagrama del circuito, las conexiones son muy simples, ya que las hemos usado como módulos, podemos construirlas directamente en una placa de pruebas. El LED conectado al pin BUZ del módulo EM18 Reader se enciende cuando alguien escanea la etiqueta. El módulo RFID envía datos al controlador en serie; por lo tanto, el pin del transmisor del módulo RFID está conectado al pin del receptor de Arduino. Las conexiones se clasifican en la siguiente tabla:

o NanoMódulo RFID EM18
5VVcc
GNDGND
5VSEL
RxTx
Arduino NanoMLX90614
5VVcc
GNDGND
A5SCL
A4SDA
Arduino NanoSensor ultrasónico (HCSR-04)
5VVcc
GNDGND
D5Trigonometría
D6Eco

Explicación del Código:

Tenemos que escribir un código Arduino que pueda leer datos del sensor ultrasónico, MLX90614, EM18 RFID Reader Module, y enviar el nombre y la temperatura de una persona a una hoja de Excel.

#include <Wire.h>
#include <Adafruit_MLX90614.h>

Luego definimos los pines del sensor ultrasónico al que hemos realizado la conexión.

const int trigPin = 5;
const int echoPin = 6;

Después de eso, defina las variables para almacenar el módulo RFID, el sensor ultrasónico y los datos del sensor MLX90614.

Larga duración;
int distancia;
String RfidReading;
flotante TempReading;

Dentro de la función void setup () , inicializamos el monitor en serie para la depuración y el sensor de temperatura MLX90614. Además, configure los pines Trig y Echo como pines de salida y entrada.

configuración nula ()
{
  Serial.begin (9600); // Inicializar la comunicación en serie con el monitor en serie
  pinMode (trigPin, OUTPUT);
  pinMode (echoPin, INPUT);
  mlx.begin ();
  Initialize_streamer ();
} 

Dentro de la función void loop () , calcule la distancia entre la persona y el sensor y, si la distancia es menor o igual a 25 cm, llame a la función reader () para escanear la etiqueta.

bucle vacío ()
{
  digitalWrite (trigPin, LOW);
  delayMicroseconds (2);
  digitalWrite (trigPin, HIGH);
  delayMicroseconds (10);
  digitalWrite (trigPin, LOW);
  duración = pulseIn (echoPin, HIGH);
  distancia = duración * 0.0340 / 2;
  si (distancia <= 25) {
  lector(); }

La función de lector vacío () se utiliza para leer la tarjeta de etiqueta RFID. Una vez que la tarjeta se acerca al módulo lector, el módulo lector lee los datos en serie y los almacena en la variable de entrada.

lector nulo ()
{
if (Serial.available ())
  {
    cuenta = 0;
    while (Serial.available () && count <12)
    {
      input [cuenta] = Serial.read ();
      recuento ++;
      retraso (5);

En las siguientes líneas, compare los datos de la tarjeta escaneada con la ID de etiqueta predefinida. Si la identificación de la etiqueta coincide con la tarjeta escaneada, lea la temperatura de la persona y envíe la temperatura y el nombre de la persona a la hoja de Excel.

if (entrada [cuenta] == etiqueta [cuenta])
bandera = 1; más
bandera = 0;
recuento ++;        
RfidReading = "Ashish";
      }
    }
    si (bandera == 1)
    {
      temp_read ();
      Write_streamer ();
      }

Dentro de la función temp_read () , lea los datos del sensor MLX90614 en grados Celsius y guárdelos en la variable ‘TempReading’ . 

void temp_read ()
{
   TempReading = mlx.readObjectTempC ();}

Una vez que el hardware y el software estén listos, es hora de cargar el programa en su Arduino Nano Board. Tan pronto como su programa se carga, el sensor ultrasónico comienza a calcular la distancia. Cuando la distancia calculada es inferior a 40 cm, lee la temperatura y la tarjeta.

Almacenamiento de datos del sensor en la hoja de Excel desde el controlador Arduino.

Ahora para enviar datos a la hoja de Excel, vamos a utilizar PLX-DAQ . Es un software de complemento de Excel que le ayuda a escribir valores de Arduino para directamente en una hoja de Excel en su computadora portátil o PC. Use el enlace para descargar el archivo. Después de la descarga, extraiga el archivo y haga clic en el archivo .exe para instalarlo. Creará una carpeta llamada PLS-DAQ en su escritorio.

Ahora abra el archivo ‘PLX-DAQ spreadsheet’ desde la carpeta del escritorio. Si las macros están deshabilitadas en su Excel, verá un bloqueo de seguridad como se muestra en la imagen a continuación:

Haga clic en Opciones-> Habilitar el contenido -> Finalizar -> Aceptar para habilitar las macros. Después de esto, obtendrá la siguiente pantalla:

Ahora seleccione la velocidad en baudios como «9600» y el puerto al que está conectado su Arduino y luego haga clic en Conectar para iniciar la transmisión de datos. Sus valores deberían comenzar a registrarse como se muestra en la imagen a continuación.

Así es como puede construir un dispositivo de detección de temperatura sin contacto y almacenar los datos en la hoja de Excel .

Código:

#include <Wire.h>
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
char tag[] ="180088FECCA2"; // Replace with your own Tag ID
char input[12];        // A variable to store the Tag ID being presented
int count = 0;        // A counter variable to navigate through the input[] character array
boolean flag = 0;     // A variable to store the Tag match status
const int trigPin = 5;
const int echoPin = 6;
long duration;
int distance; 
String RfidReading;
float TempReading;
void setup()
{
  Serial.begin(9600);   // Initialise Serial Communication with the Serial Monitor
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  mlx.begin();
  Initialize_streamer();
}
void loop()
{ 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.0340 / 2;
 // Serial.println("Distance");
  //Serial.println(distance);
  if (distance <= 40){
  reader();
  }
  delay(1000);
}
void reader()
{
if(Serial.available())// Check if there is incoming data in the RFID Reader Serial Buffer.
  {
    count = 0; // Reset the counter to zero
    while(Serial.available() && count < 12) 
    {
      input[count] = Serial.read(); // Read 1 Byte of data and store it in the input[] variable
      count++; // increment counter
      delay(5);
    }
    if(count == 12) // 
    {
      count =0; // reset counter varibale to 0
      flag = 1;
      while(count<12 && flag !=0)  
      {
        if(input[count]==tag[count])
        flag = 1; // everytime the values match, we set the flag variable to 1
        else
        flag= 0; 
        count++; // increment i
        RfidReading = "Ashish";
      }
    }
    if(flag == 1) // If flag variable is 1, then it means the tags match
    {
      //Serial.println("Access Allowed!");
      temp_read();
      Write_streamer();
      }
    else
    {
     // Serial.println("Access Denied"); // Incorrect Tag Message     
    }
    for(count=0; count<12; count++) 
    {
      input[count]= 'F';
    }
    count = 0; // Reset counter variable
  }
}
void temp_read()
{
   TempReading = mlx.readObjectTempC();
  // Serial.println(sensorReading1);
  // Serial.print(",");
 //Serial.print("Ambient ");
 //Serial.print(mlx.readAmbientTempC());
 //Serial.print(" C");
// Serial.print("Target  ");
// Serial.print(mlx.readObjectTempC());
// Serial.print(" C");
// delay(1000);
}
void Initialize_streamer()
{
Serial.println("CLEARDATA"); //clears up any data left from previous projects
Serial.println("LABEL,Date,Time,Temperature,Name"); //always write LABEL, to indicate it as first line
}
void Write_streamer()
  {
   // Serial.print("DATA"); //always write "DATA" to Indicate the following as Data
   // Serial.print(","); //Move to next column using a ","
  //  Serial.print("DATE"); //Store date on Excel
   // Serial.print(","); //Move to next column using a ","
   // Serial.print("TIME"); //Store date on Excel
   // Serial.print(","); //Move to next column using a ","
    Serial.print(RfidReading); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.print(TempReading); //Store date on Excel
    Serial.print(","); //Move to next column using a ","
    Serial.println(); //End of Row move to next row
  }
https://circuitdigest.com/

One thought on “Detección de temperatura corporal sin contacto basada en RFID utilizando Arduino y el sensor de temperatura IR MLX90614.”

Deja una respuesta

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