Cómo programar una tarjeta RFID para sus proyectos

Las etiquetas RFID son pequeños chips regrabables que pueden almacenar pequeñas cantidades de datos, como nombres, direcciones, información de productos y más. Pueden tomar la forma de llaveros y tarjetas, o incluso pueden implantarse en mascotas o personas. Si desea aprender cómo funcionan o agregarlos a su propio proyecto, un lector y escritor RFID es un componente barato que puede usar. Esta guía le mostrará cómo usar uno para escribir en su propia etiqueta RFID.

Cómo funcionan los escritores RFID

Los sensores de lector/escritor RFID utilizan ondas de radio de corto alcance y baja potencia para transmitir datos desde etiquetas, donde se almacenan los datos, al dispositivo electrónico al que está conectado el sensor. En este caso, vamos a usar un Arduino como dispositivo agregando un sensor RFID. Específicamente, escribiremos información básica en una etiqueta RFID.

Para hacer esto, utilizaremos esta biblioteca para leer y escribir en etiquetas RFID. Dado que el uso de etiquetas RFID es un poco más complejo que, por ejemplo, encender o apagar un LED, dependeremos de bocetos preexistentes que pueda integrar en sus propios proyectos. Las funciones preescritas que proporcionan estos bocetos le permitirán integrarlos más fácilmente en sus otros proyectos.

Para usar la biblioteca, primero descargue el .archivo zip de la página de Github de arriba. A continuación, abra su IDE Arduino, vaya a Sketch > Incluir biblioteca > Agregar .Biblioteca ZIP choose y elige la biblioteca que acabas de descargar. Esto no solo permitirá incluir la biblioteca RFID en sus bocetos, sino que también obtendrá una colección de bocetos de ejemplo, que necesitaremos más adelante.

Lo que necesitarás

Para este proyecto, solo escribiremos en una etiqueta RFID. Sin embargo, tenga en cuenta a medida que avanzamos por la guía cómo puede usar esto para ampliar sus otros proyectos. Tal vez pueda activar un bloqueo para desbloquear cuando muestre al lector una etiqueta con los datos correctos, por ejemplo. Sin embargo, para este proyecto básico, esto es lo que necesitarás:

Arduino
RFID sensor (de preferencia MFRC-522)
las etiquetas RFID
Breadboard & cableado
Arduino IDE
Cable USB

Desde los chips RFID son muy pequeñas, la etiqueta que se utiliza puede entrar en casi cualquier forma. Dos de los tipos más comunes de chips RFID, que a menudo vienen en kits o con sensores, son pequeños llaveros redondos o tarjetas planas del tamaño de una tarjeta de crédito. Dicho esto, cualquier etiqueta que tengas debería funcionar.

El Código

Si instaló la biblioteca como se indicó anteriormente, el siguiente boceto debería estar disponible en su libro de ejemplo en Archivo > Ejemplos > MFRC522 > rfid_write_personal_data. Selecciónelo en su libro de ejemplo, o copie el código a continuación:

/*
* Escriba los datos personales de una tarjeta RFID MIFARE utilizando un lector RFID-RC522
* Utiliza la biblioteca MFRC522 para usar el KIT DE MÓDULOS RFID ARDUINO DE 13,56 MHZ CON ETIQUETAS SPI W Y R DE COOQROBOT.
* ——————————
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Lector/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Señal Pin Pin Pin Pin Pin Pin
* ——————————
* PRIMERA/Reset PRIMEROS 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*
* Hardware requerido:
* Arduino
* PCD (Dispositivo de Acoplamiento de proximidad): NXP MFRC522 Lector sin contacto IC
* PICC (Tarjeta de Circuito Integrado de proximidad): Una tarjeta o etiqueta que utiliza la interfaz ISO 14443A, por ejemplo, Mifare o NTAG203.
* El lector se puede encontrar en eBay por alrededor de 5 dólares. Buscar «mf-rc522» en ebay.com.
*/

#include
# include

# define RST_PIN 9 / / Configurable, consulte el diseño de pines típico anterior
#define SS_PIN 10 / / Configurable, consulte el diseño de pines típico anterior

MFRC522 mfrc522 (SS_PIN, RST_PIN); // Crear instancia MFRC522

void setup () {
Serial.begin (9600); / / Inicializa las comunicaciones en serie con el PC
SPI.begin (); / / Bus SPI de inicio
mfrc522.PCD_Init (); / / Tarjeta de inicio MFRC522
Serie.println (F («Escribir datos personales en un PICC MIFARE»));
}

bucle vacío() {

// Preparar llave-todas las llaves están configuradas en FFFFFFFFFFFFh en la entrega de chips de fábrica.
MFRC522:: clave MIFARE_Key;
para (byte i = 0; i < 6; i++) clave.keyByte = 0xFF;

/ / Restablece el bucle si no hay ninguna tarjeta nueva presente en el sensor/lector. Esto ahorra todo el proceso cuando está inactivo.
if ( ! mfrc522.PICC_IsNewCardPresent ()) {
return;
}

// Seleccione una de las tarjetas
if ( ! mfrc522.PICC_ReadCardSerial ()) {
return;
}

Serie.print (F («Card UID:»)); / / Dump UID
for (byte i = 0; i < mfrc522.uid.tamaño; i++) {
Serial.impresión (mfrc522.uid.uidByte < 0x10 ? «0» : «»);
Serie.impresión (mfrc522.uid.uidByte, HEX);
}
Serial.print (F («PICC type:»)); / / Dump PICC type
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType (mfrc522.uid.sak);
Serial.println (mfrc522.PICC_GetTypeName (piccType));

búfer de bytes;
bloque de bytes;
MFRC522::Estado del código de estado;
len de bytes;

Serial.setTimeout (20000L); / / esperar hasta 20 segundos para la entrada de serial
/ / Preguntar datos personales: Apellido
Serial.println (F («Escriba el apellido, terminando con#»));
len = Serial.readBytesUntil (‘# ‘ , (char *) buffer, 30) ; // lee el apellido desde serial
for (byte i = len; i < 30; i++) buffer=»; / / pad con espacios

block = 1;
//Serial.println (F («Autenticación mediante clave A A»));
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F(«PCD_Authenticate() failed: «));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println(F(«PCD_Authenticate() success: «));

// Write block
status = mfrc522.MIFARE_Write(block, buffer, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(F(«MIFARE_Write() failed: «));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println (F («MIFARE_Write () success: «));

block = 2;
//Serial.println (F («Autenticación mediante clave A A»));
status = mfrc522.PCD_Authenticate (MFRC522:: PICC_CMD_MF_AUTH_KEY_A, bloque, & clave, & (mfrc522.uid));
if (estado != MFRC522::STATUS_OK) {
Serial.print(F(«PCD_Authenticate() failed:»));
Serial.println (mfrc522.GetStatusCodeName (status));
return;
}

// Bloque de escritura
status = mfrc522.MIFARE_Write (bloque, &búfer, 16);
if (estado != MFRC522::STATUS_OK) {
Serial.print(F(«MIFARE_Write() failed:»));
Serial.println (mfrc522.GetStatusCodeName (status));
return;
}
else Serial.println (F («MIFARE_Write () success: «));

// Preguntar datos personales: Nombre
Serial.println (F («Escriba el primer nombre, terminando con#»));
len = Serial.readBytesUntil (‘# ‘ , (char *) buffer, 20) ; // leer el primer nombre de serial
for (byte i = len; i < 20; i++) buffer=»; / / pad con espacios

block = 4;
//Serial.println (F («Autenticación mediante clave A A»));
status = mfrc522.PCD_Authenticate (MFRC522:: PICC_CMD_MF_AUTH_KEY_A, bloque, & clave, & (mfrc522.uid));
if (estado != MFRC522::STATUS_OK) {
Serial.print(F(«PCD_Authenticate() failed:»));
Serial.println (mfrc522.GetStatusCodeName (status));
return;
}

// Bloque de escritura
status = mfrc522.MIFARE_Write (bloque, búfer, 16);
if (estado != MFRC522::STATUS_OK) {
Serial.print(F(«MIFARE_Write() failed:»));
Serial.println (mfrc522.GetStatusCodeName (status));
return;
}
else Serial.println (F («MIFARE_Write () success: «));

block = 5;
//Serial.println (F («Autenticación mediante clave A A»));
status = mfrc522.PCD_Authenticate (MFRC522:: PICC_CMD_MF_AUTH_KEY_A, bloque, & clave, & (mfrc522.uid));
if (estado != MFRC522::STATUS_OK) {
Serial.print(F(«PCD_Authenticate() failed:»));
Serial.println (mfrc522.GetStatusCodeName (status));
return;
}

// Bloque de escritura
status = mfrc522.MIFARE_Write (bloque, &búfer, 16);
if (estado != MFRC522::STATUS_OK) {
Serial.print(F(«MIFARE_Write() failed:»));
Serial.println (mfrc522.GetStatusCodeName (status));
return;
}
else Serial.println (F («MIFARE_Write () success: «));

Serie.println (» «);
mfrc522.PICC_HaltA (); / / Halt PICC
mfrc522.PCD_StopCrypto1(); // Detener el cifrado en PCD

}

Cargue este código y (después de conectar su proyecto como se describe a continuación) puede comenzar a escribir datos de inmediato en sus etiquetas RFID.

Uno de los beneficios de usar bibliotecas como esta es que puede encontrar partes de código ya escritas, por lo que no tiene que reinventar la rueda para cada proyecto. Esta vez, no vamos a pasar por el código línea por línea. En su lugar, hablemos un poco más sobre lo que hace el código.

Los datos en las etiquetas RFID se almacenan en secciones llamadas sectores, que se dividen en bloques. Cada bloque puede contener unos pocos bytes de datos. La cantidad depende de la etiqueta específica, pero una etiqueta pasiva común de 1K (es decir, una etiqueta que puede almacenar 1 kilobyte de datos) podría, por ejemplo, tener 16 sectores, cada uno con 4 bloques, con cada bloque capaz de almacenar hasta 16 bytes de datos.

Este boceto solo va a almacenar su nombre y apellido, por lo que solo necesita un sector, pero distribuirá los datos en varios bloques, ya que sus nombres pueden ocupar más datos de los que caben en un solo bloque (y para comodidad de la organización).

Cuando ejecute el script, se le pedirá que proporcione su nombre de familia, que luego se escribirá en los bloques de su etiqueta RFID. A continuación, recibirá un mensaje para escribir su primer nombre, que se escribirá en diferentes bloques. Para obtener más información sobre cómo se organizan los bloques RFID y cómo abordarlos, consulte esta guía.

El cableado

El cableado para su lector RFID específico dependerá del modelo que obtenga, ya que muchas iteraciones diferentes tienen los pines en un orden diferente. Afortunadamente, el código de ejemplo que incluimos arriba enumera qué pines deben ir a dónde dependiendo del tablero que estés usando. Siga esa guía para conocer los detalles.

Como ejemplo, si estuviera utilizando un Arduino Uno y un sensor MFRC-522, haría lo siguiente:

● Conecte RST al pin 9
● Conecte SDA (o SS) al pin 10
● Conecte MOSI al pin 11
● Conecte MISO al pin 12
● Conecte SCK al pin 13
● Conecte VCC a 5V
● Conecte GND a GND

Pero, de nuevo, compruebe qué tarjetas usar para asegurarse de que está conectado correctamente. Una vez que la placa esté conectada, encienda su Arduino mientras está conectado a través de USB a su computadora. Luego, puede presionar una tarjeta RFID o un llavero para el lector. Manténgalo allí mientras ingresa datos a través del monitor en serie.

La biblioteca MFRC522 también incluye un croquis incorporado para leer datos RFID después de haberlo escrito. Ahora que sabe cómo escribir datos, intente cargar ese boceto y usarlo para leer la etiqueta en la que ha escrito.

Leave a Reply

Tu dirección de correo electrónico no será publicada.