Sistema de seguimiento del tiempo Arduino con RFID

¿Te has preguntado cómo llevar un registro preciso de las horas trabajadas en tus proyectos? Con el sistema de seguimiento del tiempo Arduino con RFID, podrás hacer un seguimiento detallado de las horas dedicadas a cada tarea. Descubre cómo implementar esta tecnología en tu día a día y optimizar la gestión del tiempo en tus proyectos. ¡No te lo pierdas!

En este proyecto, construirá un sistema de registro de tiempos utilizando el lector RFID MFRC522 y Arduino. Cuando sostiene una etiqueta RFID junto al lector RFID, el UID del usuario y la hora se almacenan en una tarjeta SD. También muestra si llega tarde o puntual a una hora y minuto preestablecidos.

Primero, mira la introducción en vídeo a continuación.

Descripción del proyecto

Antes de empezar, es importante determinar las principales características del proyecto:

  • Incluye un lector RFID para leer etiquetas RFID;
  • Nuestra configuración incluye un módulo de reloj en tiempo real para realizar un seguimiento del tiempo;
  • Cuando el lector RFID lee una etiqueta RFID, almacena la hora actual y el UID de la etiqueta en una tarjeta SD.
  • El Arduino se comunica con la tarjeta SD a través de un módulo de tarjeta SD.
  • Puede establecer una hora de check-in para comparar si llega a tiempo o tarde.
  • Si llegas a tiempo, se enciende un LED verde; si llegas tarde, se enciende un LED rojo;
  • El sistema también tiene un timbre que suena cuando se lee una etiqueta.

Piezas requeridas

Sistema de seguimiento del tiempo Arduino con RFID

Aquí hay una lista de componentes necesarios para este proyecto:

Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!

Sistema de seguimiento del tiempo Arduino con RFID

Lector RFID MFRC522

En este proyecto estamos utilizando el lector RFID MFRC522 y este es el modelo que le recomendamos (aunque este proyecto también puede ser compatible con otros lectores RFID).

RFID significa RaudioFfrecuencia IDENTIFICACIÓNIdentificación. RFID utiliza campos electromagnéticos para transmitir datos a distancias cortas y es útil para identificar personas, realizar transacciones, etc.

Un sistema RFID requiere etiquetas y un lector:

  • Palabras clave están adheridos al objeto a identificar, en este ejemplo se trata de un llavero y una tarjeta electromagnética. Algunas tiendas también utilizan etiquetas RFID en las etiquetas para identificar sus productos. Cada etiqueta tiene su propia identificación única (UID).

Sistema de seguimiento del tiempo Arduino con RFID

  • lector es un transmisor/receptor de radio bidireccional que envía una señal a la etiqueta y lee su respuesta.

Sistema de seguimiento del tiempo Arduino con RFID

El lector RFID MFRC522 funciona a 3,3 V y puede utilizar comunicación SPI o I2C. El biblioteca Sólo usaremos SPI para controlar el lector RFID, por lo que este será el protocolo de comunicación que usaremos.

Para más información sobre el lector RFID con Arduino, consulte: Acceso de seguridad con lector RFID MFRC522 con Arduino

Instalación de la biblioteca MFRC522

Este proyecto utiliza la biblioteca MFRC522.h para controlar el lector RFID. Esta biblioteca no está instalada de forma predeterminada en el IDE de Arduino, por lo que es necesario instalarla. Ir a Bosquejo > Integrar biblioteca > Administrar bibliotecas y buscar MFRC522 o sigue los siguientes pasos:

  1. Haga clic aquí para descargar la biblioteca MFRC522. Debería haber una carpeta .zip en tu carpeta de descargas.
  2. Descomprima la carpeta .zip y debería obtener Maestro RFID Carpeta
  3. Cambie el nombre de su carpeta de Maestro RFID A RFID
  4. mueve eso RFID Carpeta a la carpeta de bibliotecas de instalación de Arduino IDE
  5. Finalmente, vuelva a abrir su IDE de Arduino

Asignación de pines del lector RFID MFRC522

La siguiente tabla enumera la configuración de pines del lector para referencia futura:

BOLÍGRAFO CABLEADO CON ARDUINO UNO
ASD digitales 10
SCK digitales 13
MOSI digitales 11
MISO digitales 12
IRQ no te conectes
Dimensiones Dimensiones
primero digitales 9
3,3 V 3,3 V

nota: diferentes placas Arduino tienen diferentes pines SPI. Si está utilizando otra placa Arduino, verifique el Arduino documentación.

módulo de tarjeta SD

Cuando se lee una etiqueta, su UID y la hora se guardan en una tarjeta SD para que pueda realizar un seguimiento de los registros. Hay varias formas de utilizar una tarjeta SD con Arduino. En este proyecto estamos utilizando el módulo de tarjeta SD que se muestra en la imagen a continuación; funciona con tarjetas micro SD.

Sistema de seguimiento del tiempo Arduino con RFID

Hay diferentes modelos de diferentes proveedores, pero todos funcionan de manera similar y utilizan el protocolo de comunicación SPI. Para comunicarnos con la tarjeta SD utilizamos una biblioteca llamada SD.es decirque ya está instalado en el IDE de Arduino de forma predeterminada.

Para saber más sobre el módulo de tarjeta SD con Arduino, lea: Guía del módulo de tarjeta SD con Arduino

Asignación de pines del módulo de tarjeta SD

La siguiente tabla enumera la configuración de pines del módulo de la tarjeta SD para referencia futura:

BOLÍGRAFO CABLEADO CON ARDUINO UNO
VCC 3,3 V
ÉL digitales 4
MOSI digitales 11
CLK digitales 13
MISO digitales 12
Dimensiones Dimensiones

nota: diferentes placas Arduino tienen diferentes pines SPI. Si está utilizando otra placa Arduino, verifique el Arduino documentación.

Preparando la tarjeta SD

El primer paso para utilizar el módulo de tarjeta SD con Arduino es formatear la tarjeta SD como FAT16 o FAT32. Sigue las instrucciones de abajo.

1) Para formatear la tarjeta SD, insértela en su computadora. Ir a Mi computadora y haga clic derecho en la tarjeta SD. Elegir formato como se muestra en la siguiente figura.

Sistema de seguimiento del tiempo Arduino con RFID

2) Una nueva ventana se abrirá. Elegir FAT32Prensa comenzar para inicializar el proceso de formateo y siga las instrucciones que aparecen en pantalla.

Sistema de seguimiento del tiempo Arduino con RFID

Probando el módulo de la tarjeta SD

(Este paso es opcional. Este es un paso adicional para garantizar que el módulo de la tarjeta SD esté funcionando correctamente).

Inserte la tarjeta SD formateada en el módulo de la tarjeta SD.

Conecte el módulo de la tarjeta SD al Arduino como se muestra en los esquemas a continuación o consulte la tabla de distribución de pines.Sistema de seguimiento del tiempo Arduino con RFID

Nota: Dependiendo del módulo utilizado, los pines pueden estar colocados en una ubicación diferente.

Subir boceto de CardInfo

Para asegurarse de que todo esté conectado correctamente y que la tarjeta SD funcione correctamente, vaya a la ventana Arduino IDE archivo> Ejemplos > Dakota del Sur > Información del mapa.

Sube el código a tu placa Arduino. Asegúrese de haber seleccionado la placa y el puerto COM correctos.

Abra el monitor serie con una velocidad en baudios de 9600 y se mostrará la información de la tarjeta SD. Si todo funciona correctamente, verá un mensaje similar en el monitor serie.

Sistema de seguimiento del tiempo Arduino con RFID

Módulo RTC (reloj en tiempo real)

Para realizar un seguimiento del tiempo, utilizamos el módulo RTC SD1307. Sin embargo, este proyecto también funciona bien con el DS3231, que es muy similar. Una diferencia clave entre ellos es la precisión. El DS3231 es mucho más preciso que el DS1307. La siguiente figura muestra el modelo SD1307.

Sistema de seguimiento del tiempo Arduino con RFID

Una batería de respaldo está integrada en el módulo. Esto significa que el módulo mantiene la hora incluso cuando no está encendido.

Este módulo usa comunicación I2C y nosotros usamos eso RTCLib.h Biblioteca para tiempo de lectura del RTC.

Puede encontrar más información sobre el reloj en tiempo real DS1307 con Arduino aquí: Instrucciones para el módulo de reloj en tiempo real (RTC) con Arduino (DS1307 y DS3231)

Asignación de pines del módulo RTC

La siguiente tabla enumera la distribución de pines del módulo RTC para referencia futura:

BOLÍGRAFO CABLEADO CON ARDUINO UNO
SCL A5
ASD A4
VCC 5V (consulte la hoja de datos de su módulo)
Dimensiones Dimensiones

nota: diferentes placas Arduino tienen diferentes pines I2C. Si está utilizando otra placa Arduino, verifique el Arduino documentación.

Instalación de la biblioteca RTCLib

Para instalar el RTCLib.h ir a Bosquejo > Integrar biblioteca > Administrar bibliotecas y buscar RTCLib o sigue los siguientes pasos:

  1. Haga clic aquí para descargar la biblioteca RTCLib. Debería haber una carpeta .zip en tu carpeta de descargas.
  2. Descomprima la carpeta .zip y debería obtener Maestro RTCLib Carpeta
  3. Cambie el nombre de su carpeta de Maestro RTCLib A RTCLib
  4. mueve eso RTCLib Carpeta a la carpeta de bibliotecas de instalación de Arduino IDE
  5. Finalmente, vuelva a abrir su IDE de Arduino

Esquema

El circuito para este proyecto se muestra en los esquemas siguientes.

Hay dispositivos de 3,3 V y 5 V en este circuito. Asegúrese de tener el cableado correcto. Además, si utiliza diferentes módulos, verifique el voltaje recomendado antes de alimentar el circuito. Conecte un módulo a la vez, siguiendo las tablas de distribución de pines si es necesario.

Sistema de seguimiento del tiempo Arduino con RFID

Así es como debería verse su circuito después del ensamblaje.

Sistema de seguimiento del tiempo Arduino con RFID

código

Sube el siguiente código a tu Arduino. Asegúrese de haber seleccionado la placa y el puerto COM correctos.

/*
 * Rui Santos 
 * Complete Project Details https://randomnerdtutorials.com
 */

#include <MFRC522.h> // for the RFID
#include <SPI.h> // for the RFID and SD card module
#include <SD.h> // for the SD card
#include <RTClib.h> // for the RTC

// define pins for RFID
#define CS_RFID 10
#define RST_RFID 9
// define select pin for SD card module
#define CS_SD 4 

// Create a file to store the data
File myFile;

// Instance of the class for RFID
MFRC522 rfid(CS_RFID, RST_RFID); 

// Variable to hold the tag's UID
String uidString;

// Instance of the class for RTC
RTC_DS1307 rtc;

// Define check in time
const int checkInHour = 9;
const int checkInMinute = 5;

//Variable to hold user check in
int userCheckInHour;
int userCheckInMinute;

// Pins for LEDs and buzzer
const int redLED = 6;
const int greenLED = 7;
const int buzzer = 5;

void setup() {
  
  // Set LEDs and buzzer as outputs
  pinMode(redLED, OUTPUT);  
  pinMode(greenLED, OUTPUT);
  pinMode(buzzer, OUTPUT);
  
  // Init Serial port
  Serial.begin(9600);
  while(!Serial); // for Leonardo/Micro/Zero
  
  // Init SPI bus
  SPI.begin(); 
  // Init MFRC522 
  rfid.PCD_Init(); 

  // Setup for the SD card
  Serial.print("Initializing SD card...");
  if(!SD.begin(CS_SD)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // Setup for the RTC  
  if(!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while(1);
  }
  else {
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  if(!rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
  }
}

void loop() {
  //look for new cards
  if(rfid.PICC_IsNewCardPresent()) {
    readRFID();
    logCard();
    verifyCheckIn();
  }
  delay(10);
}

void readRFID() {
  rfid.PICC_ReadCardSerial();
  Serial.print("Tag UID: ");
  uidString = String(rfid.uid.uidByte[0]) + " " + String(rfid.uid.uidByte[1]) + " " + 
    String(rfid.uid.uidByte[2]) + " " + String(rfid.uid.uidByte[3]);
  Serial.println(uidString);
 
  // Sound the buzzer when a card is read
  tone(buzzer, 2000); 
  delay(100);        
  noTone(buzzer);
  
  delay(100);
}

void logCard() {
  // Enables SD card chip select pin
  digitalWrite(CS_SD,LOW);
  
  // Open file
  myFile=SD.open("DATA.txt", FILE_WRITE);

  // If the file opened ok, write to it
  if (myFile) {
    Serial.println("File opened ok");
    myFile.print(uidString);
    myFile.print(", ");   
    
    // Save time on SD card
    DateTime now = rtc.now();
    myFile.print(now.year(), DEC);
    myFile.print('/');
    myFile.print(now.month(), DEC);
    myFile.print('/');
    myFile.print(now.day(), DEC);
    myFile.print(',');
    myFile.print(now.hour(), DEC);
    myFile.print(':');
    myFile.println(now.minute(), DEC);
    
    // Print time on Serial monitor
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.println(now.minute(), DEC);
    Serial.println("sucessfully written on SD card");
    myFile.close();

    // Save check in time;
    userCheckInHour = now.hour();
    userCheckInMinute = now.minute();
  }
  else {
    Serial.println("error opening data.txt");  
  }
  // Disables SD card chip select pin  
  digitalWrite(CS_SD,HIGH);
}

void verifyCheckIn(){
  if((userCheckInHour < checkInHour)||((userCheckInHour==checkInHour) && (userCheckInMinute <= checkInMinute))){
    digitalWrite(greenLED, HIGH);
    delay(2000);
    digitalWrite(greenLED,LOW);
    Serial.println("You're welcome!");
  }
  else{
    digitalWrite(redLED, HIGH);
    delay(2000);
    digitalWrite(redLED,LOW);
    Serial.println("You are late...");
  }
}

Ver código sin formato

Nota: Verifique que tenga instaladas las bibliotecas necesarias.

Importando bibliotecas

El código comienza importando las bibliotecas requeridas. MFRC522 para el lector RFID, el Dakota del Sur para el módulo de tarjeta SD y el RTClib para el RTC. Esos también los cierran SPI Biblioteca para comunicación SPI con el módulo de tarjeta RFID y SD.

#include <MFRC522.h> // for the RFID
#include <SPI.h>     // for the RFID and SD card module
#include <SD.h>      // for the SD card
#include <RTClib.h>  // for the RTC

Prepare lector RFID, tarjeta SD y RTC

Luego defina los pines para el lector RFID y el módulo de tarjeta SD. El pasador SCK (CS_RFID) está conectado al pin 10 y al pin RST (RST_RFID) está conectado al pin 9. En el módulo de la tarjeta SD, el pin de selección del chip (CS_SD) está conectado al pin 4.

// define pins for RFID
#define CS_RFID 10
#define RST_RFID 9
// define chip select pin for SD card module
#define CS_SD 4

Creas un archivo llamado mi archivo para almacenar sus datos.

File myFile;

Luego cree una instancia para RFID y RTC:

// Instance of the class for RFID
MFRC522 rfid(CS_RFID, RST_RFID);

// Instance of the class for RTC
RTC_DS1307 rtc;

variables

Creas una variable de cadena. cadena uid que contiene las etiquetas UID.

String uidString;

Las siguientes líneas crean variables para definir la hora y los minutos del check-in. En este caso definimos la hora de check-in como las 9:05 a.m. Puedes cambiar la hora de check-in cambiando estos valores:

// Define check in time
const int checkInHour = 9;
const int checkInMinute = 5;

También necesita crear variables para almacenar la hora de check-in del usuario. Estas variables almacenan la hora en la que se leyó una etiqueta UID específica. Las siguientes variables almacenan la hora y el minuto de check-in.

//Variable to hold user check in
int userCheckInHour;
int userCheckInMinute;

Finalmente, asigne los números de pin a los LED y al timbre.

// Pins for LEDs and buzzer
const int redLED = 6;
const int greenLED = 7;
const int buzzer = 5;

configuración()

Siguiente en configuración() Configura los LED y el zumbador como salidas.

// Set LEDs and buzzer as outputs
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(buzzer, OUTPUT);

Luego se rubrica cada módulo.

Características

En este código creas 3 funciones: Leer RFID(), tarjeta de registro() Y comprobarCheckIn().

El Leer RFID() La función lee la etiqueta UID y la guarda en el cadena uid variable y la muestra en el monitor serie. Además, cuando se lea la etiqueta, sonará el timbre.

El tarjeta de registro() La función crea un archivo llamado en su tarjeta SD DATOS.txt. Puede editar el nombre del archivo en la siguiente línea si es necesario.

myFile=SD.open("DATA.txt", FILE_WRITE);

Luego lo guarda cadena uid (que contiene el UID de la etiqueta) en la tarjeta SD y la hora actual.

myFile.print(uidString);
// Save time on SD card
DateTime now = rtc.now();
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);

Además, la hora y el minuto de check-in del usuario se almacenan en las siguientes variables para permitir una comparación posterior con la hora de check-in predefinida.

userCheckInHour = now.hour();
userCheckInMinute = now.minute();

El verificarCheckIn() La función simplemente compara la hora de entrada del usuario con la hora de entrada predefinida y proporciona la información adecuada. Si el usuario llega tarde, el LED rojo se enciende; si el usuario llega a tiempo, el LED verde se enciende.

Cinta()

Después de estudiar las funciones creadas, el Cinta() es bastante fácil de entender.

En primer lugar, el código comprueba si se ha robado una etiqueta RFID. Si es así, lee el UID RFID, registra el UID y la hora en la tarjeta SD y luego proporciona información al usuario encendiendo uno de los LED.

Recuperar datos de la tarjeta SD

Para verificar los datos almacenados en la tarjeta SD, retírela del módulo de la tarjeta SD e insértela en su computadora.

Abra la carpeta de la tarjeta SD y debería tener un archivo llamado DATA.txt.

Sistema de seguimiento del tiempo Arduino con RFID

Abra el archivo con un editor de texto. Luego obtendrás algo como esto:

Sistema de seguimiento del tiempo Arduino con RFID

Tenga en cuenta que cada valor está separado por comas. Esto facilita la importación de estos datos a Excel, Google Sheets u otro software de procesamiento de datos.

Envolver

En este proyecto, aprendiste a utilizar un lector de tarjetas RFID y un módulo de tarjeta SD con Arduino. Puede adaptar este proyecto a sus propias necesidades o utilizar las funciones creadas aquí en otros proyectos que requieran registro de datos o lectura de etiquetas RFID.

Puede ampliar este proyecto y agregar una pantalla para proporcionar comentarios adicionales al usuario. Puede asignar un nombre a cada UID y mostrar el nombre de usuario cuando se lee la etiqueta. Quizás quieras consultar algunos tutoriales sobre Arduino con pantallas:

  • Instrucciones para pantalla OLED de 0,96 pulgadas con Arduino
  • Pantalla Nextion con Arduino: introducción

Este es un extracto de nuestro curso Proyectos paso a paso de Arduino. Si te gusta Arduino y quieres hacer más proyectos te recomendamos descargar nuestro curso: Proyectos Arduino paso a paso..

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Sistema de seguimiento del tiempo Arduino con RFID

En este proyecto, vamos a construir un sistema de control del tiempo con un lector RFID MFRC522 y Arduino. Cuando pasas una etiqueta RFID cerca del lector RFID, guarda el UID del usuario y la hora en una tarjeta SD. También muestra si llegaste tarde o a tiempo según una hora y minuto preestablecidos.

Visión general del proyecto

Antes de comenzar, es importante establecer las principales características del proyecto:

  • Contiene un lector RFID que lee etiquetas RFID
  • Nuestro sistema tiene un módulo de reloj en tiempo real para llevar el control de la hora
  • Cuando el lector RFID lee una etiqueta RFID, guarda la hora actual y el UID de la etiqueta en una tarjeta SD
  • Arduino se comunica con la tarjeta SD mediante un módulo de tarjeta SD
  • Puedes configurar una hora de control para comparar si estás a tiempo o llegaste tarde
  • Si llegas a tiempo, se enciende un LED verde; si llegas tarde, se enciende un LED rojo
  • El sistema también cuenta con un zumbador que suena cuando se lee una etiqueta

Partes requeridas

A continuación, te presentamos una lista de los componentes necesarios para este proyecto:

  • Arduino UNO
  • Lector RFID MFRC522 + etiquetas
  • Módulo de tarjeta SD
  • Micro tarjeta SD
  • Módulo RTC SD1307
  • 2x LEDs (1x rojo + 1x verde)
  • 2x resistencias de 220 ohmios
  • Protoboard
  • Cables jumper

Puedes encontrar todos los componentes para tus proyectos al mejor precio en MakerAdvisor.com.

Lector RFID MFRC522

En este proyecto, estamos utilizando el lector RFID MFRC522, y es el que recomendamos obtener.

RFID significa identificación por radiofrecuencia. RFID utiliza campos electromagnéticos para transferir datos a distancias cortas y es útil para identificar personas, realizar transacciones, etc.

Un sistema RFID necesita etiquetas y un lector:

  • Las etiquetas se adjuntan al objeto que se desea identificar, en este ejemplo tenemos un llavero y una tarjeta electromagnética. Algunas tiendas también utilizan etiquetas RFID en las etiquetas de sus productos para identificarlos. Cada etiqueta tiene su propia identificación única (UID).
  • El lector es un transmisor-receptor de radio de dos vías que envía una señal a la etiqueta y lee su respuesta.

El lector RFID MFRC522 funciona a 3.3V y puede usar comunicación SPI o I2C. La librería que vamos a utilizar para controlar el lector RFID solo soporta SPI, así que es el protocolo de comunicación que vamos a usar. Puedes obtener más información sobre el lector RFID con Arduino en this link.

Instalación de la librería MFRC522

Este proyecto utiliza la librería MFRC522.h para controlar el lector RFID. Esta librería no viene instalada en Arduino IDE por defecto, por lo que necesitas instalarla. Sigue los siguientes pasos:

  1. Descarga la librería MFRC522 haciendo clic aquí. Deberías obtener una carpeta .zip en tu carpeta de descargas.
  2. Descomprime la carpeta .zip y deberías obtener la carpeta RFID-master.
  3. Renombra tu carpeta de RFID-master a RFID.
  4. Mueve la carpeta RFID a la carpeta de bibliotecas de instalación de tu Arduino IDE.
  5. Finalmente, vuelve a abrir tu Arduino IDE.

Luego de estos pasos, la librería estará instalada y lista para su uso.

Pinout del lector RFID MFRC522

La siguiente tabla muestra el pinout del lector para futura referencia:

PIN CONECTAR A ARDUINO UNO
SDA Digital 10
SCK Digital 13
MOSI Digital 11
MISO Digital 12
IRQ No conectar
GND GND
RST Digital 9
3.3V 3.3V

1 comentario en «Sistema de seguimiento del tiempo Arduino con RFID»

Deja un comentario