¿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
Aquí hay una lista de componentes necesarios para este proyecto:
- Arduino UNO – leer Los mejores kits de inicio de Arduino
- Lector RFID MFRC522 + etiquetas
- módulo de tarjeta SD
- Tarjeta micro SD
- Módulo RTC SD1307
- 2x LED (1x rojo + 1x verde)
- 2 resistencias de 220 ohmios
- tablero de circuitos
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
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).
- lector es un transmisor/receptor de radio bidireccional que envía una señal a la etiqueta y lee su respuesta.
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:
- Haga clic aquí para descargar la biblioteca MFRC522. Debería haber una carpeta .zip en tu carpeta de descargas.
- Descomprima la carpeta .zip y debería obtener Maestro RFID Carpeta
- Cambie el nombre de su carpeta de
Maestro RFIDA RFID - mueve eso RFID Carpeta a la carpeta de bibliotecas de instalación de Arduino IDE
- 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.
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.
2) Una nueva ventana se abrirá. Elegir FAT32Prensa comenzar para inicializar el proceso de formateo y siga las instrucciones que aparecen en pantalla.
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.
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.
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.
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:
- Haga clic aquí para descargar la biblioteca RTCLib. Debería haber una carpeta .zip en tu carpeta de descargas.
- Descomprima la carpeta .zip y debería obtener Maestro RTCLib Carpeta
- Cambie el nombre de su carpeta de
Maestro RTCLibA RTCLib - mueve eso RTCLib Carpeta a la carpeta de bibliotecas de instalación de Arduino IDE
- 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.
Así es como debería verse su circuito después del ensamblaje.
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...");
}
}
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.
Abra el archivo con un editor de texto. Luego obtendrás algo como esto:
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..
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:
- Descarga la librería MFRC522 haciendo clic aquí. Deberías obtener una carpeta .zip en tu carpeta de descargas.
- Descomprime la carpeta .zip y deberías obtener la carpeta RFID-master.
- Renombra tu carpeta de RFID-master a RFID.
- Mueve la carpeta RFID a la carpeta de bibliotecas de instalación de tu Arduino IDE.
- 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 |
¡Qué interesante! Me gustaría probarlo en mi proyecto de Arduino. ¡Gracias por compartir!