Tutorial módulo Lector RFID RC522 Publicado por T Tutoriales utoriales 0Comentarios
Los lectores RFID(Radio Frequency IDentifcation) en la actualidad están teniendo bastante acoida en los sistemas de identifcaci!n" su uso abarca desde sistemas de seuridad" acceso de personal" identi identifca fcaci! ci!n n y lo#st lo#stica ica de produ product ctos" os" como como lla$es lla$es de puert puertas as el%ctricas" entre otras aplicaciones& 'u principio de uncionamiento consiste en pasar un T*" cerca de un lector RFID" el T* tiene la capacidad de en$iar inormaci!n al lector& Dic+a inormaci!n puede ser desde un simple c!dio o todo un paqu paquet ete e de inor inorma maci ci!n !n uar uardo do en la memo memori ria a del del Ta& a& Los T*s $iene en dierentes modelos" los más comunes son en tar, tar,et etas as y en lla$ lla$er eros os"" per pero tamb tambi% i%n n $ien $ienen en como como etiq etique ueta tas s ad+esi$as e incluso ya $iene incrustados en alunos productos& Los Tas Tas tienen internamente internamente una antena y un microc+ip" microc+ip" encarado de reali-ar todo el proceso de comunicaci!n" la ener#a lo obtiene de la se.al de radiorecuencia" radiorecuencia" que si bien la ener#a en la se.al es peque.a" es sufciente para +acer traba,ar el microc+ip" esto es la ra-!n por la que es necesario acercarlos a una peque.a distancia enera eneralme lmente nte menor menor a /0 cm& Pero Pero eist eisten en Tas acti$o acti$os" s" que inco incorp rpor oran an bate bater# r#as as"" esto estos s tien tiene e alca alcanc nce e de $ari $arios os metr metros os de distancia&
Módulo RFID RC522 1s el que usaremos en este tutorial" este m!dulo unciona como Lector y *rabador de Tas RFID&
1ste m!dulo utili-a un sistema de modulaci!n y demodulaci!n de /2&3456-" recuencia que en la actualidad utili-a la tecnolo#a RFID&
1L m!dulo se comunica por 'PI" por lo que se puede implementar con cualquier microcontrolador con intera- 'PI" como un rduino& 7ien" empecemos a armar nuestro proyecto8
Conexión del entre el módulo RFID y Arduino Módulo RC522
Arduino Uno, Nano
Arduino Mega
'D ('')
/0
'C9
/2
3:
5;'I
//
3/
5I';
/:
30
IR<
=o conectado
=o conectado
*=D
*=D
*=D
R'T
>
>
2&2?
2&2?
2&2?
32
Como se obser$a en la conei!n" el m!dulo traba,a con un $olta,e de 2&2?" por lo que la parte l!ica tambi%n deber#a traba,ar con el mismo ni$el de $olta,e" para prueba y testeo se puedo conectar directamente a los pines del rduino (ni$el TTL 3?)" pero se recomienda usar con$ersores de ni$eles de $olta,e&
Programación del Módulo RC522: ectura del código de identi!cación Para poder traba,ar el 5odulo en rduino es necesario descarar su librer#a correspondiente" la que usaremos será una de las más comunes" la desarrollada por 5iuel 7alboa& Librer#a RFID @na $e- descarada" importamos la librer#a a nuestro ID1 de rduino" con esto estamos listos para proramar&
continuaci!n se muestra un sAetc+ para leer el c!dio de identifcaci!n de nuestros Tas Binclude 'PI&+ Binclude 5FRC3::&+ Bdefne R'TEPI= > Pin > para el reset del RC3:: Bdefne ''EPI= /0 Pin /0 para el '' ('D) del RC3:: 5FRC3:: mrc3::(''EPI=" R'TEPI=)G Creamos el ob,eto para el RC3:: $oid "etu#() H $erial&bein(>400)G Iniciamos la comunicaci!n serial 'PI&bein()G Iniciamos el 7us 'PI mrc3::&PCDEInit()G Iniciamos el 5FRC3:: $erial&println(Lectura del @ID)G J $oid loo#() H Re$isamos si +ay nue$as tar,etas presentes i ( mrc3::&PICCEIs=eKCardPresent()) H 'eleccionamos una tar,eta i ( mrc3::&PICCEReadCard'erial()) H 1n$iamos serialemente su @ID $erial&print(Card @ID8)G or (byte i 0G i mrc3::&uid&si-eG iMM) H $erial&print(mrc3::&uid&uid7yteNiO 0/0 0 8 )G $erial&print(mrc3::&uid&uid7yteNiO" 61Q)G J $erial&println()G Terminamos la lectura de la tar,eta actual mrc3::&PICCE6alt()G J J J
Como se obser$a es ácil de entender" pero epliquemos las unciones reerentes al m!dulo RC3:: In"tanciar el RC522 Bdefne R'TEPI= > Pin > para el reset del RC3:: Bdefne ''EPI= /0 Pin /0 para el '' ('D) del RC3:: 5FRC3:: mrc3::(''EPI=" R'TEPI=)G
1s necesario utili-ar la librer#a 5FRC3::&+" solo es necesario especifcar los pines Reset y 'D('') del m!dulo" los demás pines traba,an con los pines 'PI del rduino& Iniciar el RC522 'PI&bein()G
Iniciamos el 7us 'PI
mrc3::&PCDEInit()G Iniciamos el 5FRC3::
1sta unci!n inicia y confura al RC3:: para su posterior lectura" solo es necesario llamarlo una $e- por lo que eneralmente se lo llama en $oid setup() %er "i &ay una tar'eta #re"ente mrc3::&PICCEIs=eKCardPresent()
1sta unci!n nos de$uel$e $erdadero o also dependiendo si +ay una tar,eta presente cerca al m!dulo RC3::& $eleccionar una tar'eta #ara la lectura
mrc3::&PICCEReadCard'erial()
'e llama a esta unci!n cuando queremos comunicarnos con una tar,eta" nos de$uel$e un $alor $erdadero si lora seleccionar una tar,eta para la lectura" de lo contrario nos retorna un $alor also& ()tener el tama*o del código de identi!cación mrc3::&uid&si-e
=os retorna el tama.o en 7ytes del c!dio de identifcaci!n de la tar,eta seleccionada& eer el código de identi!cación mrc3::&uid&uid7yte
Para acceder al c!dio de identifcaci!n es recomendable indear la $ariable por e,emplo mrc3::&uid&uid7yteN0O para el byte en la posici!n inicial& Finali+ar la lectura mrc3::&PICCE6alt()G
Con esta unci!n le indicamos que +emos terminado la lectura de la tar,eta presente y Is=eKCardPresent() de$ol$erá also para esta tar,eta mientras no se retire& 'i despu%s de retirar la tar,eta" si se
inresa nue$amente la misma tar,eta se le considera como una nue$a tar,eta&
1n el sAetc+" el c!dio de identifcaci!n lo en$iamos por el puerto serial" para $isuali-ar el c!dio es necesario abrir el 5onitor 'erial del ID1 de rduino&
Una A#licación $im#le: Control de acce"o u"ando RFID 7ien" $isto el e,emplo anterior" a+ora apliqu%moslo para un control de acceso" que puedes aplicarse en una puerta el%ctrica" ca,a uerte" sistema de encendido" desacti$ar alarmas" etc&
Para este e,emplo estamos usando Tas de los cuales solo dos deben tener acceso al sistema& Para implementar esto partimos del sAetc+ anterior y solo le areamos unas l#neas más al fnal del prorama para comparar los c!dios y determinar si tienen o no acceso& continuaci!n se muestra el 'Aetc+&
Binclude 'PI&+ Binclude 5FRC3::&+ Bdefne R'TEPI= > Pin > para el reset del RC3:: Bdefne ''EPI= /0 Pin /0 para el '' ('D) del RC3:: 5FRC3:: mrc3::(''EPI=" R'TEPI=)G Creamos el ob,eto para el RC3:: $oid "etu#() H $erial&bein(>400)G Iniciamos La comunicacion serial 'PI&bein()G Iniciamos el 7us 'PI mrc3::&PCDEInit()G Iniciamos el 5FRC3:: $erial&println(Control de acceso8)G J byte ctual@IDNOG almacenará el c!dio del Ta le#do byte @suario/NO H0D" 03C" 04" 03J G c!dio del usuario / byte @suario:NO H0C/" 0:F" 0D4" 001J G c!dio del usuario : $oid loo#() H Re$isamos si +ay nue$as tar,etas presentes i ( mrc3::&PICCEIs=eKCardPresent()) H 'eleccionamos una tar,eta i ( mrc3::&PICCEReadCard'erial()) H 1n$iamos serialemente su @ID $erial&print(F(Card @ID8))G or (byte i 0G i mrc3::&uid&si-eG iMM) H $erial&print(mrc3::&uid&uid7yteNiO 0/0 0 8 )G $erial&print(mrc3::&uid&uid7yteNiO" 61Q)G ctual@IDNiOmrc3::&uid&uid7yteNiOG J )G $erial&print( comparamos los @ID para determinar si es uno de nuestros usuarios i (comparerray(ctual@ID"@suario/)) $erial&println(cceso concedido&&&)G else i (comparerray(ctual@ID"@suario:)) $erial&println(cceso concedido&&&)G else $erial&println(cceso deneado&&&)G Terminamos la lectura de la tar,eta tar,eta actual mrc3::&PICCE6alt()G
J
J J Funci!n para comparar dos $ectores boolean comparerray(byte array/NO"byte array:NO) H i (array/N0O S array:N0O)return(alse)G i (array/N/O S array:N/O)return(alse)G i (array/N:O S array:N:O)return(alse)G i (array/N2O S array:N2O)return(alse)G return(true)G J
el resultado lo podemos obser$ar al pasar los Tas y $isuali-arlo en el monitor serial&
1n luar de en$iarlo serialmente la confrmaci!n se puede proramar para acti$ar una salida diital" que puede estar conectado a una c+apa el%ctrica" una alarma" etc& dependerá de la
aplicaci!n
en
particular
que
están
traba,ando&
1s bueno aclarar que si bien cumple el ob,eti$o" no es una orma /00U seura" cualquiera que sepa del tema podr#a clonar las tar,etas& Para una mayor seuridad es necesario traba,ar con los bloques de la memoria interna del T*" pudi%ndose confurar una cla$e para la lectura" además se podr#a traba,ar con un c!dio mayor a los bytes del @ID" incluso se podr#an traba,ar con $arios datos& (La lectura y escritura de bloques de memoria se $erá en un pr!imo tutorial)