Hola Chicas/os.
OJO, NOVATO !!!
Debo advertir que no soy en absoluto experto ni en C, ni en Arduino, ni en RFID, al contrario, soy NOVAtuino.
No es nada nuevo, es lo mismo que se viene haciendo con códigos de barras, pero por RFID.
Obviamente al utilizar esta tecnología, tendremos el equivalente a lo que hacemos con las barras, pero con mil aplicaciones más.
En la red, he encontrado muchos códigos pero te obligan a tener números pre-guardados y los compara con la tarjeta rfid que presentes. Están pensados para control de usuarios, horarios de trabajadores, etc, etc.
Mi intención es plantear un hardware/software que permita controlar unitariamente los productos que tenemos en un almacén o tienda por RFID.
Igualmente, al hacer un paquete con varios de esos productos para su envío, poder controlar y restar del stock, cada producto que sale unitariamente.
Cuando digo unitariamente, no me refiero a la referencia, sino al individuo concreto y único.
Si somos un almacén de martillos y recibimos de fabrica 1000 martillos iguales, podremos diferenciar cada uno de ellos con un numero UID exclusivo e irrepetible.
O bien el fabricante ya les ha pegado una etiqueta RFID a cada uno o lo haremos nosotros.
Antes de colocarlos en las estanterías del almacén, colocaríamos cada etiqueta y les pasaríamos un lector de mano a cada martillo. O a la etiqueta antes de pegársela.
Simultáneamente, nuestro hardware de mano, irá enviando esos UID a un pc con Excel via….por ejemplo un módulo RF433 o similar. Tendremos un archivo en el PC con la lista de martillos recién llegados y almacenados. Ej. 31/12/2019 – 16:40 PM – UID: 4121254547854 más otros 999 UID diferentes…Seguidos o random.
Cuando un cliente nos pide 10 martillos, los cogemos del almacén, les leemos los UID con el hardware de mano y enviamos esa lista a otro Excel.
En el PC, un soft sencillo descuenta los 10 martillos y nos quedan 990 en almacén.
Por otro lado, cuando un cliente nos devuelva un martillo defectuoso, leeremos el UID, sabremos si lo vendimos nosotros y cuando.
Las etiquetas RFID permiten además del UID, escribir información dentro. Por ejemplo, referencia del producto, URL, nombre de a qué mayorista se le ha vendido o cualquier texto que podrá ser leído posteriormente y está oculto a personas normales.
Imaginemos, que vendemos a mayoristas. Nos devuelven un producto y al leer el TAG sabemos a quien se lo vendimos. Por experiencia comercial de muchos años, se que se ven cosas muy raras. Los clientes no siempre dicen “true”….
Luego cada cual, puede añadir a esta implementación, las opciones que desee, orientadas a su actividad.
Al menos para empezar, yo he utilizado los siguientes artículos:
- Arduino
- Etiquetas adhesivas RFID MIFARE CLASSIC MIFARE ULTRALIGHT
- Modulo RC522 Este es el mio
- Buzzer
- LCD
- Librería MFRC522 Uno de muchos links
Con estos sencillos dispositivos ya he empezado a jugar y lo más importante, a aprender.
Para los productos que yo utilizo, necesitaba etiquetas adhesivas lo más pequeñas posibles.
Empecé jugando con las primeras que encontré entre mis muestras olvidadas que resultaron ser MIFARE CLASSIC, pero eran demasiado grandes, de hecho, no son etiquetas, sino llaveritos de unos 30mm, no aptos para introducir en mis productos, estas tienen 4 bytes. Para empezar a jugar, leer y escribir sirven.
Pedí a una tienda online rápida unas que además de ser adhesivas, son de 25mm, para mis propósitos, perfecto. Descubro más tarde que no se le puede cambiar el UID…Lo veré más detenidamente. Son MIFARE ULTRALIGHT y vienen con un UID de 18 dígitos dec y todos diferentes. 7 bytes. Puede servir, pero lo ideal es poder asignar una numeración propia.
Tampoco quería una frecuencia muy extendida en otros productos y por ello, aunque todo es cambiable, utilizo 13.56 MHz.
El hard se conecta de la siguiente manera: (Mas el buzzer a GND y Pin3) +LCD Como conectar LCD I2C
Para primeras lecturas de tags, podemos utilizar la propia librería MFRC522, el ejemplo ReadNUID. Abrimos el monitor Serial, acercamos un TAG Classic y nos dice:
PICC type: MIFARE 1KB
A new card has been detected.
The NUID tag is:
In hex: DE B1 FA 06
In dec: 222 177 250 06
Sin embargo, el otro TAG, MIFARE ULTRALIGHT no lo lee:
PICC type: MIFARE Ultralight or Ultralight C
Your tag is not of type MIFARE Classic.
PICC type: MIFARE Ultralight or Ultralight C
Your tag is not of type MIFARE Classic.
Para este TAG MIFARE ULTRALIGHT, vamos a usar el ejemplo rfid_read_personal_data y nos mostrará la información del TAG.
Read personal data on a MIFARE PICC:
Card Detected:**
Card UID: 04 75 7D 22 D3 63 80
Card SAK: 00
PICC type: MIFARE Ultralight or Ultralight C
Ahí tenemos el UID único de esa etiqueta en HEX de 7 bytes. En este otro código simple que he hecho/copiado/modificado sin usar el LCD, lo muestra en el serial en DEC y el numero seguido para poderlo utilizar como numero entero, sería algo así:
Card UID: 41171253421199128
Lo que es lo mismo:
HEX:04 75 7D 22 D3 63 80
DEC : 4 117 125 34 211 99 128
Este código es muy básico solo para leer en decimal. Algunos amigos del foro me han sugerido otros, pero hay muchos. Este es uno de ellos:
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
byte readCard[4];
void setup() {
pinMode(3, OUTPUT);
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
//mfrc522.PCD_DumpVersionToSerial(); // descomenta y te mostrará más info del TAG
Serial.println(F("Aproxime TAG"));
}
void loop() {
// Look for new cards
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial())
{
Serial.print("Card UID: ");
for (byte i = 0; i < mfrc522.uid.size; i++) {
//Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], DEC);
digitalWrite(3, HIGH);
delay(10);
digitalWrite (3, LOW);
delay(20);
digitalWrite(3, HIGH);
delay(10);
digitalWrite (3, LOW);
}
Serial.println();
mfrc522.PICC_HaltA();
//delay(5000);
}
}
Ahora viene como pasar estos números leídos a excel. Lo tengo verde aunque se que es fácil.
Solo hay que descargar un software que manda los datos en vez de al monitor serial, a una hoja excel.
Archivo del software para pasar de serial a excel
Enlace donde se explica como pasar datos de arduino a excel
Iré subiendo avances y por supuesto que se aceptan correcciones y opiniones.
Insisto que soy novatuino, estos códigos son adaptaciones de copia y pega que he ido buscando y encontrando.
Por cierto, antes dije que en MIFARE ULTRALIGHT no se podía cambiar el UID. Hay una web que creo haber leido que si se puede, con PROXmark 3 Esta.
Feliz 7E4 amigos.