Arduino
RFID RC522
En este montaje realizamos un lector de tarjetas RFID RC522 - ISO/IEC 14443 Type A 13.56 MHz.
Basado en el chip Philips/NXP MFRC522 RFID chip (Chip Datasheet) .
El módulo montado se puede comprar por menos de 3 € , y 10 tarjetas por menos de 2€ .
Tarjetas RFID.
Módulo.
Esquema.
Circuito montado.
Para realizar este montaje estuve viendo varias páginas donde explicaban diferentes modos de leer tarjetas RFID.
La mas completa es https://github.com/miguelbalboa/rfid con una librería muy completa. Al principio no me funcionaba con arduino 1.05 daba errores al compilar, pero después de instalar la última versión 1.69 me funcionó.
Otra página no utilizaba ningún tipo de librería https://labitat.dk/wiki/RFID_RC522-AN, funcionaba con cualquier versión de arduino.
La utilizada se encuentra en http://geekchickens.blogspot.com.es/, es una librería sencilla RFID, dos ficheros que se copian en un directorio que se llama RFID en el directorio de librerias (libraries).
/* SETA43 http://seta43.duckdns.org/ http://seta43.blogspot.com.es/ */ /* basado en GeekChickens //http://geekchickens.blogspot.com.es/ /* SDA es el pin 10 SCK es el pin 13 MOSI es el pin 11 MISO es el pin 12 RST es el pin 9 */ #include <SPI.h> #include <RFID.h> #define SS_PIN 10 #define RST_PIN 9 #define DEBUG 0 RFID rfid(SS_PIN, RST_PIN); int numero_serie[5]; unsigned char usuariosON[10][5]={ 151,44,65,197,63, 214,191,212,72,245, 206,12,97,113,210, 78,179,151,113,27, 190,187,151,113,227, } ; const int ledPinOK = 2; const int ledPinERROR = 3; // Sound void setup() { Serial.begin(9600); SPI.begin(); pinMode(ledPinOK, OUTPUT); pinMode(ledPinERROR, OUTPUT); rfid.init(); Serial.println("Inicia "); #if DEBUG for(int z=0; z<5 ; z++) { Serial.print("Usuario "); Serial.print(z);Serial.print("-> "); for(int i=0; i<=4 ; i++) { Serial.print(usuariosON[z][i]); Serial.print(","); } Serial.println(" "); } #endif digitalWrite(ledPinOK, LOW); digitalWrite(ledPinERROR, LOW); } void loop() { int i,z; if (rfid.isCard()) { if (rfid.readCardSerial()) { Serial.print("Numero usuario: "); // guardamos el numero del usuario for(int i=0; i<=4 ; i++) { numero_serie[i] = rfid.serNum[i]; } for(i=0; i<=4 ; i++) // y lo imprimimos { Serial.print(numero_serie[i]); Serial.print(","); } if(-1==detectarUsuario()) { //Error Usuario for(z=1; z<12 ; z++) if(z&1) { for(i=0; i<200 ; i++) {digitalWrite(ledPinERROR, i&1); delay(1);} } else { delay(200); } } else { //Ok usuario digitalWrite(ledPinOK, HIGH); for(i=0; i<100 ; i++) {digitalWrite(ledPinERROR, i&1); delay(3);} } delay(1000); digitalWrite(ledPinOK, LOW); digitalWrite(ledPinERROR, LOW); } } rfid.halt(); } unsigned int detectarUsuario() { char f1; int z,i; Serial.println(); Serial.println("Chequeando usuario"); for(z=0; z<5 ; z++) { f1=0; for(i=0; i<=4 ; i++) { if(usuariosON[z][i]==numero_serie[i]) f1++; } if(f1==5) { Serial.print("OK-Usuario "); Serial.println(z); return(z); } } Serial.println("Error Usuario "); return(-1); } |
Existen un numero de tarjetas prefijadas en que pueden activar el pin 2 , para abrir una puerta o lo que se quiera.
Estas tarjetas se encuentran memorizada en la variable:
unsigned char usuariosON[10][5]={ 151,44,65,197,63,
214,191,212,72,245,
206,12,97,113,210,
78,179,151,113,27,
190,187,151,113,227, } ;
Cualquier tarjeta que no este en la variable usuariosON activara el pin 3 y sonará un pitido de alarma durante unos segundos.
El programa es sencillo, sin muchas complicaciones, es simplemente una aproximación a la tarjetas RFID.
Si quisiéramos hacer una llave mas segura, deberíamos poner un teclado que nos pida una clave secreta asignada a dicha tarjeta.
PROGRAMAS
Saludos.
Juan Galaz
Bibliografía:
https://labitat.dk/wiki/RFID_RC522-AN
https://sites.google.com/a/mail.utec.edu.sv/arduino-seguridad-con-tecnologia-rfid/home
http://geekchickens.blogspot.com.es/search/label/RFID
https://github.com/miguelbalboa/rfid
https://es.wikipedia.org/wiki/RFID
Muchísimas gracias por citar la fuente, se agradece muchísimo el detalle!
ResponderEliminarUn saludo desde geekchickens!
Siempre me gusta figurar las fuentes, es lo mínimo para agradecer el trabajo.
ResponderEliminarSaludos