
Si mai has passat per una caixa ràpida d'una gran superfície i has vist com, en deixar tots els productes en una safata, apareixen automàticament a la pantalla , ja has vist RFID en acció. No és màgia ni telepatia tecnològica: és un sistema basat en radiofreqüència que permet identificar objectes sense contacte directe, i que pots replicar a casa amb un simple Arduí i un lector econòmic com el RC522.
En aquesta guia aprendreu, pas a pas, com utilitzar Arduino i un lector RFID RC522 per llegir i escriure etiquetes, entendre què és exactament RFID, quins tipus de sistemes existeixen, com s'alimenten les targetes passives, com s'organitza la memòria d'una targeta MIFARE Classic 1K i com muntar projectes reals com un control d'accés o una targeta de transport. Posa't còmode, perquè esbudellarem el tema a fons però amb un llenguatge clar i proper.
Què és la tecnologia RFID i com funciona
La identificació per radiofreqüència, o RFID (Radio Frequency Identification), és un sistema que permet reconèixer objectes mitjançant un identificador únic transmès per ràdio. Aquest identificador se sol anomenar UID (Unique ID) i podríem veure'l com el DNI de l'etiqueta. El sistema complet està format per dos elements principals: l'etiqueta RFID (tag o transponedor) i el lector RFID (transceptor).
Les etiquetes RFID es poden presentar en molts formats diferents: targetes de plàstic tipus targeta de crèdit, clauers, adhesius adhesius que s'enganxen en productes per evitar robatoris, i fins i tot xips implantats sota la pell d'animals per identificar-los. Internament, totes comparteixen el mateix: una antena i un xip xicotet que emmagatzema informació i es comunica amb el lector.
Hi ha etiquetes de només lectura, l'UID de les quals ve programat de fàbrica i no es pot modificar, i etiquetes de lectura/escriptura, en les quals un lector adequat, com el mòdul RC522, pot llegir i també gravar dades a la memòria . Això fa possible aplicacions com ara targetes de transport recarregables, sistemes d'accés amb saldo, control de presència, etc.
D'altra banda, tenim el lector RFID o transceptor. Aquest dispositiu no només es dedica a rebre dades, sinó que a més emet un camp electromagnètic de radiofreqüència . Aquest camp és clau per entendre com s'alimenten les etiquetes passives i com es produeix l'intercanvi d'informació entre targeta i lector.
Alimentació i principi de funcionament de les etiquetes RFID
Una pregunta molt habitual és si els adhesius RFID dels productes del súper o les targetes d'accés no porten pila, d'on obtenen l'energia per funcionar? La clau és que moltes d'aquestes etiquetes són passives i s'alimenten per inducció electromagnètica a partir del camp generat pel lector.
Quan apropes una etiqueta passiva a un lector, la seva antena entra al camp electromagnètic que genera el mòdul (per exemple, a 13,56 MHz en el cas del RC522). Aquest camp indueix un corrent a l'antena de l'etiqueta, que s'utilitza per alimentar el xip intern de manera momentània . Un cop “despert”, el xip modula el senyal que torna al lector (això se'n diu retrodispersió o backscatter), codificant-hi l'UID i, si escau, altres dades emmagatzemades a la memòria.
A diferència de tecnologies com l'infraroig, no cal que hi hagi línia de visió directa entre etiqueta i lector: la radiofreqüència pot travessar certs materials, encara que el comportament depèn de la freqüència, de la presència de metall, aigua, etc. El lector capta el senyal retrodispersat, el interpreta i, a continuació, envia les dades a un microcontrolador (com Arduino, ESP8266 o ESP32) oa un ordinador.
Tipus de sistemes RFID segons la freqüència
L'espectre de radiofreqüència és molt ampli, i les ones de ràdio no es comporten igual a totes les freqüències . Per això, a RFID s'utilitzen diferents bandes segons l'aplicació. Lector i etiqueta han d'estar dissenyats per treballar a la mateixa freqüència, igual que una ràdio ha de sintonitzar l'emissora correcta.
De manera general, podem agrupar els sistemes RFID en tres grans categories segons la banda que usen:
- Baixa freqüència (LF): al voltant de 125-134 kHz.
- Alta freqüència (HF): al voltant de 13,56 MHz, on s'enquadren tecnologies com MIFARE i NFC.
- Ultra alta freqüència (UHF): entre aproximadament 433 MHz i 860‑960 MHz.
Sistemes RFID de baixa freqüència (LF)
Els sistemes RFID en baixa freqüència tenen una longitud d'ona relativament gran, cosa que els permet penetrar millor materials prims i objectes amb alt contingut en aigua , com a fruites o begudes. També es comporten raonablement ben a prop de metalls prims.
Tot i això, aquest avantatge ve amb limitacions importants: l'abast típic és de només uns centímetres i la taxa de transmissió de dades és baixa, cosa que es tradueix en memòries reduïdes i costos d'etiqueta més alts . Són sistemes molt utilitzats en control daccés senzill, claus de proximitat antigues i marcat danimals.
Sistemes RFID d'alta freqüència (HF) i NFC
La banda d'alta freqüència, a 13,56 MHz, és probablement la més popular a nivell de “maker” i projectes DIY, perquè hi ha les targetes MIFARE i la tecnologia NFC (Near-Field Communication) que usen molts mòbils per a pagaments sense contacte.
Els sistemes HF funcionen ben a prop de metall i en presència d'aigua en proporcions mitjanes o altes, i solen proporcionar un abast de pocs centímetres fins al voltant d'un metre en condicions ideals. La velocitat de dades continua sent modesta, però suficient per a aplicacions didentificació, accés i petites quantitats dinformació. Molts estàndards globals es basen en HF, cosa que facilita la interoperabilitat d'equips i targetes.
Sistemes RFID d'ultra alta freqüència (UHF)
A l'extrem oposat tenim els sistemes UHF, capaços d'assolir distàncies des d'alguns centímetres fins a més de 20 metres. Són ideals quan cal llegir moltes etiquetes ràpidament ia distància , per exemple, per a gestió d'inventari en magatzems, comptatge de persones en esdeveniments o control de pas en carreres quan els atletes creuen la meta.
La contrapartida és que, en tenir una longitud d'ona més curta, el senyal s'atenua més i travessa pitjor el metall i l'aigua . Tot i així, s'utilitzen extensament en sistemes de peatge, control d'accés a aparcaments i seguiment logístic a gran escala.
El mòdul RFID RC522: característiques i pins
Per a projectes amb Arduino, un dels lectors més populars és el RC522, basat en el xip MFRC522 de NXP. Es tracta d'un mòdul molt econòmic i estès, que treballa a alta freqüència (13,56 MHz) amb targetes MIFARE i permet tant llegir com escriure etiquetes compatibles.
Normalment es ven en un kit que inclou el propi lector, una targeta tipus crèdit i un clauer RFID. Aquestes targetes solen ser MIFARE Classic de 1K o 4K, un estàndard extremadament popular en sistemes de transport, accessos i solucions de baix cost. El RC522 genera un camp electromagnètic HF i, a la pràctica, el seu abast útil ronda els 3‑5 cm encara que teòricament pugui arribar una mica més lluny.
Quant a la comunicació amb el microcontrolador, el RC522 s'integra principalment a través de SPI (Serial Peripheral Interface) i admet velocitats de fins a 10 Mbps. També és compatible amb I2C i UART, encara que en la majoria d'exemples amb Arduino s'utilitza SPI per la seva major velocitat i simplicitat en aquest context.
A nivell elèctric, el mòdul treballa amb una tensió d'alimentació d'entre 2,5 V i 3,3 V. La placa sol portar clarament marcat el pin VCC per connectar-lo a 3,3 V. No l'has d'alimentar directament amb 5 V o t'arrisques a cremar-lo. La part positiva és que els nivells lògics solen ser tolerants a 5 V, per la qual cosa es poden connectar a pins digitals d'Arduino UNO sense necessitat de convertidors de nivell per a proves bàsiques, encara que en un disseny professional és aconsellable adaptar nivells.
Pineat del mòdul RC522
El RC522 típic inclou 8 pins de connexió cap al microcontrolador:
- VCC: alimentació, entre 2,5 V i 3,3 V.
- RST: pin de reset; permet apagar i reiniciar el mòdul posant el nivell a LOW/HIGH.
- GND: massa o referència de terra.
- IRQ: pin d'interrupció que pot avisar el microcontrolador quan una etiqueta entra al camp del lector.
- MISS / SCL / TX: pin multifunció; com a MISSO a SPI, com a SCL a I2C o com a TX a UART.
- Extensió MOSI: línia de dades de sortida del mestre cap a l'esclau a SPI.
- SCK: rellotge de la interfície SPI.
- SS/SDA/RX: pin de selecció d'esclau a SPI, SDA a I2C o RX a UART.
A Arduino UNO i altres plaques basades en ATmega328P, els pins SPI estan ja definits per maquinari, així que l'esquema típic de connexió per utilitzar SPI és:
- VCC → 3,3 V d'Arduino.
- GND → GND d'Arduino.
- SCK → pin 13 a UN/Nano.
- Extensió MOSI → pin 11 a UN/Nano.
- MISO → pin 12 a UN/Nano.
- SS (SDA) → pin 10 (o el que triïs com a SS, però cal indicar-ho al codi).
- RST → per exemple, pin 9 d'Arduino.
- IRQ → opcional, es pot deixar sense connectar si no es fa servir interrupció.
En plaques com Arduino Mega, Leonardo o Micro, les línies SPI poden estar en pins diferents o al connector ICSP, així que és important revisar la taula d'equivalències de la documentació oficial abans de cablejar res.
Instal·lació de la llibreria MFRC522 i lectura bàsica d'etiquetes
Tot i que es podria programar l'MFRC522 des de zero, la comunicació interna és força complexa, així que l'habitual és utilitzar la llibreria desenvolupada per Miguel Balboa , disponible a GitHub i al gestor de biblioteques de l'IDE d'Arduino. Aquesta llibreria encapsula totes les operacions necessàries per inicialitzar el lector, detectar targetes, autenticar sectors i llegir o escriure blocs.
Per instal·lar-la des de l'IDE d'Arduino, només cal obrir el Gestor de Biblioteques, cercar “MFRC522” i seleccionar la versió mantinguda per la comunitat (Github Community) . També cal incloure la llibreria SPI, que ja ve amb el mateix IDE.
Un cop instal·lada, el flux típic en un esquetx simple per llegir l'UID d'una etiqueta és:
- Incloure les llibreries SPI.hy MFRC522.h.
- Definir els pins RST i SS que farà servir el lector.
- Crear un objecte MFRC522 passant aquests pins.
- A setup(), iniciar Serial, SPI i el lector amb PCD_Init().
- En loop(), utilitzar PICC_IsNewCardPresent() per saber si hi ha una targeta a prop i PICC_ReadCardSerial() per llegir les vostres dades bàsiques.
- Accedir a l'UID mitjançant mfrc522.uid.uidByte ia la mida amb mfrc522.uid.size.
- Finalitzar la comunicació amb l'etiqueta trucant a PICC_HaltA().
Aquest tipus de sketch és perfecte per obtenir l'UID de diverses targetes o clauers i fer proves ràpides, per exemple, per a un control d'accés senzill on només es compara l'UID llegit amb una llista d'UIDs autoritzats.
Estructura de la memòria en targetes MIFARE Classic 1K
Les targetes que solen acompanyar el RC522 solen ser MIFARE Classic 1K . Aquestes targetes ofereixen 1 Kbyte de memòria organitzada de forma jeràrquica en sectors i blocs, amb un sistema de claus i permisos força peculiar que convé entendre abans d'escriure res.
La memòria total es divideix en 16 sectors numerats del 0 al 15. Cada sector conté 4 blocs, etiquetats de 0 a 3 dins aquest sector. Cada bloc emmagatzema 16 bytes de dades , és a dir, 16 posicions numerades de 0 a 15, per la qual cosa cada sector ofereix 64 bytes.
Dins aquests 4 blocs per sector, només 3 estan pensats per guardar dades d'usuari: el bloc 0, l'1 i el 2 de cada sector (excepte al sector 0, que té particularitats). L'últim bloc de cada sector, el bloc 3, es coneix com a bloc tràiler . S'hi guarden les claus de xifratge i els bits d'accés que controlen quines operacions es permeten en aquest sector.
Al tràiler, els 16 bytes es reparteixen en:
- Clau A: 6 bytes.
- Access Conditions: 3 bytes que defineixen permisos de lectura/escriptura, autenticació i visibilitat de les claus.
- Byte sense ús (U): 1 byte que no es fa servir.
- Clau B: 6 bytes.
Les targetes que vénen de fàbrica amb els mòduls solen tenir Key A i Key B inicialitzades a FF FF FF FF FF FF , cosa que és extremadament insegura, ja que qualsevol que conegui l'estàndard pot autenticar-se i modificar el contingut de la targeta. Una pràctica relativament estesa en projectes casolans és fer servir les mateixes claus en tots els sectors, encara que per a seguretat real seria millor diversificar.
A més, el bloc 0 del sector 0 és especial: s'emmagatzema l' UID de la targeta (normalment 4 bytes en aquestes MIFARE Classic) i dades del fabricant. Aquest bloc es considera de només lectura a la pràctica; intentar modificar-lo pot corrompre la targeta de manera irreversible.
Canviar les claus Key A i Key B en un sector
Si vols fer servir una targeta MIFARE en un projecte amb Arduino i RC522 de forma mínimament seriosa, el primer que hauries de fer és canviar les claus per defecte . Així evites que qualsevol amb un lector i la llibreria estàndard pugui manipular la targeta sense autorització.
La idea bàsica per actualitzar les claus d‟un sector concret (per exemple, el sector 15) és la següent:
- Definir al codi les claus actuals (les de fàbrica, si no s'han canviat).
- Definir les noves claus Key A i Key B que vulguis fer servir en aquest sector.
- Calcular el número de bloc tràiler d'aquest sector, que és sector * 4 + 3 (per al sector 15, el bloc 63).
- Autenticar-te primer amb Key A actual usant PCD_Authenticate() sobre el bloc tràiler.
- Llegir el bloc tràiler amb MIFARE_Read() per obtenir-ne el contingut.
- Modificar en un buffer els bytes corresponents a les claus noves.
- Autenticar de nou si cal (per exemple, amb Key B).
- Escriure el bloc tràiler actualitzat amb MIFARE_Write().
Durant aquest procés és crucial no moure la targeta del lector fins que acabi l'operació , perquè una escriptura interrompuda al bloc tràiler podria deixar el sector inaccessible. Un cop canviades les claus, hauràs d'actualitzar també el codi d'Arduino perquè faci servir aquestes noves claus en operacions futures sobre aquest sector.
Lectura i escriptura de blocs: simulant una targeta de transport
Una aplicació molt il·lustrativa de lectura i escriptura amb MIFARE Classic és simular el comportament d'una targeta de transport públic recarregable . La idea és senzilla: la targeta emmagatzema un nombre de viatges en un bloc determinat i el sistema permet carregar viatges (recàrrega) o consumir-los (validació en pujar al bus o tramvia).
Per això es pot reservar, per exemple, el sector 15 per a dades d'usuari i utilitzar un dels blocs de dades (per exemple, el bloc 60) per guardar el comptador de viatges. Al byte 0 del bloc s'emmagatzema el nombre de viatges disponibles. La resta de bytes del bloc es podrien utilitzar per a altres dades o simplement deixar-se a zero.
El flux típic al codi per a la part de recàrrega seria:
- Definir Key A i Key B actuals que protegeixen el sector en qüestió (per exemple, les que hem canviat al pas anterior).
- Definir el número de sector, el bloc de dades (60) i el bloc tràiler (63).
- Declarar un array de 16 bytes (dades Bloc) on el primer byte representarà el nombre de viatges.
- Cada cop que s'acosti una targeta al lector, llegir el bloc 60 usant MIFARE_Read() per obtenir els viatges actuals.
- Sumar el nombre de viatges a recarregar (per exemple, 10) al valor llegit.
- Actualitzar dadesBloqueu amb el nou nombre de viatges.
- Autenticar amb Key A contra el bloc tràiler corresponent.
- Escriure el bloc 60 amb MIFARE_Write().
- Torneu a llegir per verificar que el valor s'ha actualitzat correctament.
Per a la part de consum de viatges (validació a l'autobús), el codi és pràcticament idèntic, però en lloc de sumar es resta una unitat al comptador. Abans de restar, es comprova si el valor llegit és zero: si no queden viatges, es denega l'accés i convida a recarregar . Si el comptador és més gran que zero, es decrementa, s'escriu novament el bloc i es mostra per pantalla el nombre de viatges restants.
En tots dos casos és important manejar correctament els codis de retorn de les funcions de la llibreria MFRC522 (per exemple, errors d'autenticació o d'escriptura) i aturar sempre la comunicació xifrada amb PCD_StopCrypto1() i la targeta amb PICC_HaltA() al final de cada cicle.
Control d'accés senzill basat en UID
Un altre projecte clàssic amb el RC522 i Arduino és un control d'accés bàsic on s'admet o no l'entrada en funció de l'UID de la targeta presentada. Aquest enfocament no utilitza la memòria interna de la targeta, només el seu identificador únic, i per tant és força limitat en seguretat, però serveix com a exemple ràpid.
El plantejament típic és:
- Llegir l'UID de la targeta amb les funcions bàsiques de la llibreria (PICC_IsNewCardPresent, PICC_ReadCardSerial, etc.).
- Copiar els bytes de l'UID llegit a un array temporal (per exemple, ActualUID).
- Definir al codi diversos arrays amb els UIDs de targetes autoritzades (per exemple, Usuari1, Usuari2).
- Crear una funció de comparació d'arrays de bytes que torni true si tots dos són idèntics.
- Comparar ActualUID amb cada UID autoritzat i, si algun coincideix, activar una sortida digital, mostrar un missatge d'accés concedit o accionar un pany elèctric.
- Si no coincideix amb cap, mostrar “Accés denegat” i mantenir el sistema tancat.
En un entorn real, un sistema així és vulnerable a la clonació d'etiquetes, perquè molts lectors barats permeten copiar o emular UIDs. Per augmentar la seguretat caldria fer servir la memòria interna de la targeta, claus personalitzades i possiblement mecanismes criptogràfics més robustos que els de MIFARE Classic, la seguretat dels quals està àmpliament qüestionada actualment. Tot i així, pedagògicament és un exemple excel·lent per aprendre el flux de lectura de targetes i la integració amb actuadors físics.
Amb tot això ja tens sobre la taula els conceptes essencials de RFID, coneixes com es comporten les diferents bandes de freqüència, saps com és per dins una targeta MIFARE Classic 1K, domines la connexió i ús bàsic del mòdul RC522 amb Arduino i has vist detalladament com llegir i escriure blocs per crear sistemes reals com un control d'accés o una targeta . A partir d'aquí el següent pas natural és combinar RFID amb altres mòduls (pantalles LCD, relés, WiFi, bases de dades al núvol) i aprendre a controlar bombetes intel·ligents per construir solucions més completes que s'acostin encara més als sistemes professionals que veus diàriament a botigues, transport públic i dispositius de pagament sense contacte.
