Per reduir la despesa del prototip, hem optat per crear el nostre propi lector RFID amb Arduino en lloc de comprar-ne un de prefabricat. Està connectat directament a la web i disposa d’un brunzidor que emet un senyal quan detecta un objecte, facilitant així la interacció amb l’usuari.
Funciona mediant les llibreries LiquidCrystal I2C i MFRC522



#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Pin para el Reset
#define SS_PIN 10 // Pin para el SDA (Select)
#define BUZZER_PIN 8 // Pin para el zumbador
// Creamos el objeto para el lector
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(115200); // Iniciamos el puerto serie (¡Igual que en tu C#!)
SPI.begin(); // Iniciamos el bus SPI
rfid.PCD_Init(); // Iniciamos el módulo MFRC522
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
// 1. Revisar si hay una nueva tarjeta presente
if (!rfid.PICC_IsNewCardPresent()) {
return;
}
// 2. Revisar si podemos leer la tarjeta
if (!rfid.PICC_ReadCardSerial()) {
return;
}
// 3. Extraer el código único (UID) de la tarjeta y convertirlo a texto
String uidString = "";
for (byte i = 0; i < rfid.uid.size; i++) {
// Convertimos cada parte a formato hexadecimal
if(rfid.uid.uidByte[i] < 0x10) {
uidString += "0";
}
uidString += String(rfid.uid.uidByte[i], HEX);
}
// Convertimos a mayúsculas para que quede bonito (ej: "A1B2C3D4")
uidString.toUpperCase();
// 4. Enviar el código al ordenador por el cable USB
Serial.println(uidString);
// 5. Hacer sonar el pitido de éxito
tone(BUZZER_PIN, 2000);
delay(150);
noTone(BUZZER_PIN);
// 6. Detener la lectura actual para no leer el mismo chip 100 veces por segundo
rfid.PICC_HaltA();
// Retardo de seguridad extra
delay(500);
}