En este tutorial, vamos a aprender a crear un sistema de cerradura para puertas basado en RFID utilizando Arduino, un lector RFID RC522 y una cerradura electromagnética.
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.
Acerca del módulo RFID/NFC RC522 y de la cerradura electromagnética
Si no conoces el módulo RFID/NFC RC522 y la cerradura electromagnética (disposición de pines, cómo funciona, cómo programar ...), aprende sobre ellos en los siguientes tutoriales:
This image is created using Fritzing. Click to enlarge image
Para simplificar la configuración, los pines del módulo RC522 están conectados directamente a los pines del Arduino. Sin embargo, esta conexión directa puede generar problemas, ya que los pines de salida del Arduino proporcionan 5 V, mientras que los pines del módulo RC522 están diseñados para una operación de 3.3 V. Es recomendable regular el voltaje entre los pines del Arduino y los pines del módulo RC522 para evitar posibles problemas. Para una guía más detallada, consulte el Tutorial de Arduino - RFID RC522. El diagrama proporcionado ilustra cómo se pueden emplear resistencias para regular el 5V a 3.3V:
This image is created using Fritzing. Click to enlarge image
※ Nota:
El orden de los pines puede variar según el fabricante. Utilice siempre las etiquetas impresas en el módulo. La imagen anterior muestra la disposición de pines de los módulos del fabricante DIYables.
Código de Arduino - Etiqueta RFID única
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-rfid-electromagnetic-lock*/#include <SPI.h>#include <MFRC522.h>#define SS_PIN 10#define RST_PIN 5#define RELAY_PIN A5 // The Arduino pin that controls the electromagnetic lock via relayMFRC522 rfid(SS_PIN, RST_PIN);byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};voidsetup() {Serial.begin(9600);SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output.digitalWrite(RELAY_PIN, LOW); // deactivate the electromagnetic lock => lockedSerial.println("Tap RFID Tag on reader");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);if (rfid.uid.uidByte[0] == authorizedUID[0] && rfid.uid.uidByte[1] == authorizedUID[1] && rfid.uid.uidByte[2] == authorizedUID[2] && rfid.uid.uidByte[3] == authorizedUID[3] ) {Serial.println("Authorized Tag");digitalWrite(RELAY_PIN, LOW); // deactivate the electromagnetic lock => unlockeddelay(2000);digitalWrite(RELAY_PIN, HIGH); // activate the electromagnetic lock => locked }else {Serial.print("Unauthorized Tag:");for (int i = 0; i < rfid.uid.size; i++) {Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(rfid.uid.uidByte[i], HEX); }Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } }}
Pasos R\u00e1pidos
Como el UID normalmente no está impreso en la etiqueta RFID, el primer paso que debemos realizar es averiguar el UID de la etiqueta. Esto se puede hacer mediante:
Copia el código anterior y ábrelo con Arduino IDE
Haz clic en el botón Subir en Arduino IDE para subir el código al Arduino
Abre el Monitor Serial
Acerca una etiqueta RFID al módulo RFID-RC522
Obtén el UID en el Monitor Serial
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Unauthorized Tag: 51 3D C1 AC
Ln 11, Col 1
Arduino Uno on COM15
2
Después de haber obtenido UID:
Actualiza el UID en la línea 18 del código anterior.
Por ejemplo, cambia byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; a byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};
Vuelve a cargar el código en Arduino.
Acerca una etiqueta RFID al módulo RFID-RC522.
Mira la salida en el Monitor Serial.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag
Ln 11, Col 1
Arduino Uno on COM15
2
Acerca otra etiqueta RFID al módulo RFID-RC522
Ver la salida en el Monitor Serial
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag
Unauthorized Tag: 5D 11 1A D3
Ln 11, Col 1
Arduino Uno on COM15
2
Código de Arduino - Múltiples Etiquetas RFID
Podemos permitir que múltiples etiquetas RFID/NFC activen la cerradura electromagnética. El código siguiente usa dos etiquetas como ejemplo.
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-rfid-electromagnetic-lock*/#include <SPI.h>#include <MFRC522.h>#define SS_PIN 10#define RST_PIN 5#define RELAY_PIN A5 // The Arduino pin that controls the electromagnetic lock via relayMFRC522 rfid(SS_PIN, RST_PIN);byte authorizedUID1[4] = {0x51, 0x3D, 0xC1, 0xAC};byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; voidsetup() {Serial.begin(9600);SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output.digitalWrite(RELAY_PIN, LOW); // deactivate the electromagnetic lock => lockedSerial.println("Tap RFID Tag on reader");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);if (rfid.uid.uidByte[0] == authorizedUID1[0] && rfid.uid.uidByte[1] == authorizedUID1[1] && rfid.uid.uidByte[2] == authorizedUID1[2] && rfid.uid.uidByte[3] == authorizedUID1[3] ) {Serial.println("Authorized Tag 1");digitalWrite(RELAY_PIN, LOW); // deactivate the electromagnetic lock => unlockeddelay(2000);digitalWrite(RELAY_PIN, HIGH); // activate the electromagnetic lock => locked }elseif (rfid.uid.uidByte[0] == authorizedUID2[0] && rfid.uid.uidByte[1] == authorizedUID2[1] && rfid.uid.uidByte[2] == authorizedUID2[2] && rfid.uid.uidByte[3] == authorizedUID2[3] ) {Serial.println("Authorized Tag 2");digitalWrite(RELAY_PIN, LOW); // deactivate the electromagnetic lock => unlockeddelay(2000);digitalWrite(RELAY_PIN, HIGH); // activate the electromagnetic lock => locked }else {Serial.print("Unauthorized Tag:");for (int i = 0; i < rfid.uid.size; i++) {Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(rfid.uid.uidByte[i], HEX); }Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } }}
Siga pasos similares a los anteriores, y luego toque una etiqueta a la vez sobre el módulo RFID-RC522. El resultado en el Monitor Serial se muestra a continuación:
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag 2
Authorized Tag 1
Ln 11, Col 1
Arduino Uno on COM15
2
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.
No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!