Arduino - RFID - Cerradura de solenoide

En este tutorial, vamos a aprender a hacer un sistema de cerradura para puertas basado en RFID utilizando Arduino, un lector RFID RC522 y una cerradura de solenoide.

Acerca del Módulo RFID/NFC RC522 y Cerradura de Solenoide

Si no conoces el módulo RFID/NFC RC522 y la cerradura de solenoide (conexiones de pines, cómo funciona, cómo programarlo...), aprende sobre ellos en los siguientes tutoriales:

Diagrama de Cableado

Diagrama de cableado de Arduino RFID RC522 para cerradura de solenoide

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 ocasionar 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 operar a 3.3 V. Es recomendable regular la tensión 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 Arduino - RFID RC522 tutorial. El diagrama proporcionado ilustra cómo se pueden emplear resistencias para regular la tensión de 5 V a 3.3 V:

Módulo Arduino RC522 con diagrama de cableado y regulación de voltaje

This image is created using Fritzing. Click to enlarge image

※ Nota:

El orden de los pines puede variar según los fabricantes. SIEMPRE utilice las etiquetas impresas en el módulo. La imagen anterior muestra la distribució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-solenoid-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 solenoid lock via relay MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => locked Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::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 solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid 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 generalmente no está impreso en la etiqueta RFID, el primer paso que debemos dar es descubrir 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 de 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
COM6
Send
Tap RFID Tag on reader Unauthorized Tag: 51 3D C1 AC
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Después de tener UID:

  • Actualice el UID en la línea 18 del código anterior. Por ejemplo, cambie byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; a byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};
  • Vuelva a cargar el código en Arduino.
  • Acerca una etiqueta RFID al módulo RFID-RC522.
  • Ver la salida en el Monitor Serial.
COM6
Send
Tap RFID Tag on reader Authorized Tag
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Acerca otra etiqueta RFID al módulo RFID-RC522
  • Ver la salida en el Monitor Serial
COM6
Send
Tap RFID Tag on reader Authorized Tag Unauthorized Tag: 5D 11 1A D3
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Código de Arduino - Múltiples Etiquetas RFID

Podemos permitir que varias etiquetas RFID/NFC activen la cerradura de solenoide. El código de abajo utiliza 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-solenoid-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 solenoid lock via relay MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID1[4] = {0x51, 0x3D, 0xC1, 0xAC}; byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => locked Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::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 solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked } else if (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 solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid 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 } } }

Realiza los pasos similares a los anteriores, y luego acerca cada etiqueta al módulo RFID-RC522, una por una. El resultado en el Monitor Serial se ve a continuación:

COM6
Send
Tap RFID Tag on reader Authorized Tag 2 Authorized Tag 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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.

※ NUESTROS MENSAJES

  • 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!