Arduino Nano - RFID - servomotor

Este tutorial le enseña cómo usar un Arduino Nano y un módulo RFID NFC RC522 para controlar un servomotor. El proceso funciona de la siguiente manera:

Esto se puede usar para asegurar un armario, un cajón, una puerta, o para abrir y cerrar un alimentador para mascotas...

Hardware Requerido

1×Official Arduino Nano
1×Alternatively, DIYables ATMEGA328P Nano Development Board
1×Cable USB A a Mini-B
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Servomotor
1×Adaptador de Corriente 5V
1×Cables Puente
1×(Opcional) Conector de Alimentación DC
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
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 del Servomotor

Si no está familiarizado con el módulo RFID/NFC RC522 y el servomotor (incluida la asignación de pines, cómo funcionan y cómo programarlos), puede obtener más información en los siguientes tutoriales:

Arduino Nano Arduino RFID servomotor componente

Cómo funciona

  • El código del Arduino Nano tiene predefinidos algunos UIDs de etiquetas RFID/NFC.
  • Cuando la etiqueta RFID/NFC se acerca al lector, se lee su UID.
  • El Arduino Nano recibe el UID del lector.
  • Luego compara el UID leído con los UIDs predefinidos.
  • Si el UID coincide con alguno de los UIDs predefinidos, el Arduino Nano controla el servomotor a 90°.
  • Cuando la etiqueta se toca otra vez, el Arduino Nano controla el servomotor de nuevo a 0°.
  • Este proceso se repite continuamente.

Diagrama de Cableado

Diagrama de cableado de Arduino Nano, RFID RC522 y servomotor.

This image is created using Fritzing. Click to enlarge image

Para simplificar las cosas, el diagrama de cableado anterior se utiliza para pruebas o fines educativos, y para un servomotor con un par pequeño. Recomendamos encarecidamente utilizar una fuente de alimentación externa para el servomotor en la práctica. El diagrama de cableado a continuación ilustra cómo conectar el servomotor a una fuente de alimentación externa.

Diagrama de cableado de Arduino Nano, módulo RFID RC522 y servomotor

This image is created using Fritzing. Click to enlarge image

Cableado con el módulo RFID RC522

Para simplificar el proceso de conexión, los pines del módulo RC522 están conectados directamente a los pines del Arduino. Sin embargo, esto puede hacer que el Arduino funcione mal en ciertos casos, ya que los pines de salida del Arduino producen un voltaje de 5V mientras que los pines del módulo RC522 operan a un voltaje estándar de 3.3V. Por lo tanto, es aconsejable regular el voltaje entre los pines de Arduino y los pines del módulo RC522. Para más detalles, consulte el tutorial Arduino Nano - RFID RC522. El diagrama siguiente ilustra cómo regular de 5V a 3.3V usando resistencias:

Diagrama de cableado con regulación de voltaje para Arduino Nano RFID RC522

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Nano y otros componentes.

※ Nota:

La disposición de pines puede variar según el fabricante. SIEMPRE utiliza las etiquetas impresas en el módulo. La imagen de arriba muestra el pinout de los módulos del fabricante DIYables.

Tabla de cableado del módulo RFID/NFC RC522

RFID/NFC RC522 Arduino Nano
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 Nano
PositiveVCC
Positive -> Vin
NegativeGND
Negative GND

Código de Arduino Nano - Una etiqueta RFID/NFC

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define RC522_SS_PIN 10 // The Arduino Nano pin connected to RC522's SS pin #define RC522_RST_PIN 5 // The Arduino Nano pin connected to RC522's RST pin #define SERVO_PIN A5 // The Arduino Nano pin connected to servo motor MFRC522 rfid(RC522_SS_PIN, RC522_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; // rotate the servo motor to the angle position 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

  • Haz clic en el icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “MFRC522” y localiza la biblioteca de GithubCommunity.
  • Presiona el botón Instalar para instalar la biblioteca MFRC522.
Biblioteca MFRC522 para Arduino Nano

Para determinar el UID de una etiqueta RFID/NFC, el primer paso es cargar código en el IDE de Arduino. Esto se puede hacer mediante:

  • Copiando el código y abriéndolo en el IDE de Arduino
  • Haciendo clic en el botón Subir
  • Abriendo el Monitor Serie
  • Tocando la etiqueta RFID/NFC en el módulo RFID-RC522
  • Visualizando el UID en el Monitor Serie
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 obtener el UID:

  • Reemplaza el valor de authorizedUID en la línea 20 del código con el UID obtenido. Por ejemplo, cambia byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; a byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Vuelve a subir el código a la placa Arduino Nano.
  • Coloca una etiqueta RFID/NFC en el módulo RFID-RC522.
  • El servomotor girará a 90°.
  • Comprueba 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 etiqueta RFID/NFC en el módulo RFID-RC522 una vez más.
  • El servomotor girará a 0° y la salida será visible 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  
  • Acerca una etiqueta RFID o NFC al módulo RFID-RC522.
  • Comprueba 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° Unauthorized Tag with UID: BD 1E 1D 00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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

Podemos habilitar varias etiquetas RFID/NFC para controlar un servomotor. Como ejemplo, el código a continuación utiliza dos etiquetas.

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define RC522_SS_PIN 10 // The Arduino Nano pin connected to RC522's SS pin #define RC522_RST_PIN 5 // The Arduino Nano pin connected to RC522's RST pin #define SERVO_PIN A5 // The Arduino Nano pin connected to servo motor MFRC522 rfid(RC522_SS_PIN, RC522_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; // rotate the servo motor to the angle position servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); }

Repite los mismos pasos que se indicaron arriba y luego acerca cada etiqueta al módulo RFID-RC522 una a la vez. La salida mostrada en el Monitor Serial debería aparecer como sigue:

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  

Puede ampliar el código escrito arriba para incluir 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!