Arduino - RFID/NFC - servomotor

En este tutorial, vamos a aprender a usar una etiqueta RFID/NFC para controlar un servomotor con Arduino. Así es como funciona:

Esto se puede aplicar para bloquear o desbloquear un armario, un cajón o una puerta, o para abrir o cerrar el alimentador de mascotas.

Acerca del módulo RFID/NFC RC522 y del servomotor

Si no conoces el módulo RFID/NFC RC522 y el servo (pinout, cómo funciona, cómo programarlo ...), aprende sobre ellos en los siguientes tutoriales:

Arduino Arduino RFID servomotor componente

Cómo funciona

  • Los UIDs de algunas etiquetas RFID/NFC están predefinidos en el código de Arduino.
  • El usuario acerca una etiqueta RFID/NFC al lector RFID/NFC.
  • El lector lee el UID de la etiqueta.
  • Arduino obtiene el UID del lector.
  • Arduino compara el UID leído con los UIDs predefinidos.
  • Si el UID coincide con uno de los UIDs predefinidos, Arduino controla el servomotor a 90°.
  • Si la etiqueta se vuelve a tocar, Arduino mueve el servomotor de vuelta a 0°.
  • Este proceso se repite indefinidamente.

Diagrama de Cableado

Diagrama de cableado de Arduino con RFID RC522 y servomotor

This image is created using Fritzing. Click to enlarge image

En el diagrama de cableado anterior, un único adaptador de 5 V suministra energía al Arduino directamente, al motor servo directamente y al módulo RC522 (indirectamente a través del pin de 3.3 V del Arduino).

Para simplificar el proceso, los pines del módulo RC522 están directamente conectados a los pines del Arduino. Sin embargo, esto puede hacer que el Arduino deje de funcionar correctamente en ciertos casos, ya que los pines de salida del Arduino generan una tensión de 5V, mientras que los pines del módulo RC522 funcionan normalmente a una tensión de 3.3V. En consecuencia, es recomendable regular la tensión entre los pines del Arduino y los del módulo RC522. Para más detalles, consulte el tutorial Arduino - RFID RC522. El diagrama a continuación ilustra cómo regular de 5V a 3.3V usando resistencias:

Arduino RFID RC522 con diagrama de cableado con regulación de voltaje

This image is created using Fritzing. Click to enlarge image

※ Nota:

El orden de pines puede variar según los fabricantes. SIEMPRE utilice las etiquetas impresas en el módulo. La imagen de arriba muestra el diagrama de pines de los módulos del fabricante DIYables.

Tabla de cableado del módulo RFID/NFC RC522

RFID/NFC RC522 Arduino
SS → 10
SCK → 13
MOSI → 11
MISO → 12
IRQ(not connected)
GNDGND
RST → 9
VCC → 3.3V

Tabla de cableado del servomotor

Servo Motor Arduino 5V DC Adapter
VCC (red) → positive
GND (brown) → negative
SIG (yellow) → A5

Tabla de cableado del adaptador de 5 V CC

5V DC Adapter Servo Motor Arduino
PositiveVCC
Positive -> Vin
NegativeGND
Negative GND

Código de Arduino - una única etiqueta RFID/NFC

/* * 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-nfc-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN 10 #define RST_PIN 9 #define SERVO_PIN A5 MFRC522 rfid(SS_PIN, RST_PIN); Servo servo; byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; int angle = 0; // the current angle of servo motor void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 servo.attach(SERVO_PIN); servo.write(angle); // rotate servo motor to 0° Serial.println("Tap RFID/NFC 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"); // change angle of servo motor if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // control servo motor arccoding to the angle servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); } else { Serial.print("Unauthorized Tag with UID:"); 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

  • Navega hasta el icono de Bibliotecas en la barra lateral izquierda del IDE de Arduino.
  • Busca “MFRC522”, luego encuentra la biblioteca de GithubCommunity
  • Haz clic en el botón Instalar para instalar la biblioteca MFRC522.
Biblioteca MFRC522 para Arduino

Como el UID normalmente no está impreso en la etiqueta RFID/NFC, el primer paso que debemos dar es averiguar el UID de la etiqueta. Esto se puede hacer mediante:

  • Copia el código anterior y ábrelo con el IDE de Arduino
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino
  • Abre el Monitor Serial
  • Acerca una etiqueta RFID/NFC al módulo RFID-RC522
  • Obtén el UID en el Monitor Serial
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Después de tener UID:

  • Actualiza el UID en la línea 20 del código anterior. Por ejemplo, cambia byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; por byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Vuelve a cargar el código en Arduino.
  • Acerca una etiqueta RFID/NFC al módulo RFID-RC522.
  • Verás el motor servo girar a 90°.
  • Ver la salida en el Monitor Serial.
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Toca la misma etiqueta RFID/NFC en el módulo RFID-RC522 de nuevo
  • Verás girar el servo a 0°
  • Verás la salida en el Monitor Serial
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Toca otra etiqueta RFID/NFC en el módulo RFID-RC522
  • Ver la salida en el monitor serie
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0° Unauthorized Tag with UID: BD 1E 1D 00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Código de Arduino - Múltiples Etiquetas RFID/NFC

Podemos permitir que varias etiquetas RFID/NFC controlen un servomotor. El código que se muestra a continuación 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-nfc-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN 10 #define RST_PIN 9 #define SERVO_PIN A5 MFRC522 rfid(SS_PIN, RST_PIN); Servo servo; byte authorizedUID1[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; int angle = 0; // the current angle of servo motor void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 servo.attach(SERVO_PIN); servo.write(angle); // rotate servo motor to 0° Serial.println("Tap RFID/NFC 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"); changeServo(); } 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"); changeServo(); } else { Serial.print("Unauthorized Tag with UID:"); 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 } } } void changeServo() { // change angle of servo motor if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // control servo motor arccoding to the angle servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); }

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 es el siguiente:

COM6
Send
Tap RFID/NFC tag on reader Authorized Tag 2 Rotate Servo Motor to 90° Authorized Tag 1 Rotate Servo Motor to 0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Puedes extender el código anterior para tres, cuatro o más etiquetas.

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!