Arduino - RFID/NFC - Servo Motor

Neste tutorial, vamos aprender a usar uma tag RFID/NFC para controlar um servo motor com Arduino. Funciona assim:

Isso pode ser aplicado para travar/destravar armário, gaveta, porta, ou abrir/fechar o alimentador de pets...

Hardware Necessário

1×Arduino Uno R3
1×Cabo USB 2.0 tipo A/B (para PC com USB-A)
1×Cabo USB 2.0 tipo C/B (para PC com USB-C)
1×RFID/NFC RC522 Kit (reader + tags)
1×Servo Motor
1×Fonte de Alimentação 5V
1×Conector de Alimentação DC
1×Fios Jumper
1×(Recomendado) Shield com Bornes de Parafuso para Arduino Uno
1×(Recomendado) Sensors/Servo Expansion Shield for Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Case para Arduino Uno
1×(Recomendado) Placa Base de Prototipagem e Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Buy Note: For controlling multiple servo motors, use the PCA9685 16 Channel PWM Servo Driver Module to save MCU pins and simplify wiring.

Sobre o Módulo RFID/NFC RC522 e o Servo Motor

Se você ainda não conhece o Módulo RFID/NFC RC522 e o Servo Motor (pinagem, como funcionam, como programar...), aprenda sobre eles nos seguintes tutoriais:

Componentes do Arduino com rfid e servo motor

Como Funciona

  • Os UIDs de algumas tags RFID/NFC são predefinidos no código Arduino
  • O usuário aproxima uma tag RFID/NFC do leitor RFID/NFC
  • O leitor lê o UID da tag.
  • O Arduino obtém o UID do leitor
  • O Arduino compara o UID lido com os UIDs predefinidos
  • Se o UID corresponder a um dos UIDs predefinidos, o Arduino move o servo motor para 90°.
  • Se a tag for aproximada novamente, o Arduino move o servo motor de volta para 0°
  • Este processo se repete infinitamente.

Diagrama de Ligação

Diagrama de ligação do Arduino com RFID RC522 e servo motor

This image is created using Fritzing. Click to enlarge image

No diagrama de ligação acima, um único adaptador de 5V alimenta o Arduino diretamente, o servo motor diretamente e o módulo RC522 (indiretamente, pelo pino 3.3V do Arduino).

Para simplificar o processo, os pinos do módulo RC522 são conectados diretamente aos pinos do Arduino. No entanto, isso pode fazer o Arduino parar de funcionar corretamente em certos casos, pois os pinos de saída do Arduino produzem uma tensão de 5V, enquanto os pinos do módulo RC522 funcionam normalmente com uma tensão de 3.3V. Por isso, é recomendável regular a tensão entre os pinos do Arduino e os do módulo RC522. Para mais detalhes, consulte o tutorial Arduino - RFID RC522. O diagrama abaixo mostra como regular 5V para 3.3V usando resistores:

Diagrama de ligação do Arduino com RFID RC522 com tensão regulada

This image is created using Fritzing. Click to enlarge image

※ Nota:

A ordem dos pinos pode variar de acordo com o fabricante. SEMPRE use as etiquetas impressas no módulo. A imagem acima mostra a pinagem dos módulos do fabricante DIYables.

Tabela de ligação do Módulo RFID/NFC RC522

RFID/NFC RC522 Arduino
SS → 10
SCK → 13
MOSI → 11
MISO → 12
IRQ(não conectado)
GND → GND
RST → 9
VCC → 3.3V

Tabela de ligação do Servo Motor

Servo Motor Arduino Adaptador 5V DC
VCC (vermelho) → positivo
GND (marrom) → negativo
SIG (amarelo) → A5

Tabela de ligação do Adaptador 5V DC

Adaptador 5V DC Servo Motor Arduino
Positivo → VCC
Positivo -> Vin
Negativo → GND
Negativo → GND

Código Arduino - Uma Única Tag RFID/NFC

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 } } }

Passos Rápidos

  • Vá até o ícone Libraries na barra esquerda da Arduino IDE.
  • Pesquise “MFRC522” e encontre a biblioteca da GithubCommunity
  • Clique no botão Install para instalar a biblioteca MFRC522.
Biblioteca MFRC522 para Arduino

Como o UID normalmente não vem impresso na tag RFID/NFC, o primeiro passo é descobrir o UID da tag. Isso pode ser feito assim:

  • Copie o código acima e abra-o na Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no Arduino
  • Abra o Serial Monitor
  • Aproxime uma tag RFID/NFC do módulo RFID-RC522
  • Obtenha o UID no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Ln 11, Col 1
Arduino Uno on COM15
2

Depois de obter o UID:

  • Atualize o UID na linha 20 do código acima. Por exemplo, altere byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; PARA byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Carregue o código no Arduino novamente
  • Aproxime uma tag RFID/NFC do módulo RFID-RC522
  • Você verá o servo motor girar para 90°
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Ln 11, Col 1
Arduino Uno on COM15
2
  • Aproxime a mesma tag RFID/NFC do módulo RFID-RC522 novamente
  • Você verá o servo motor girar para 0°
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
Ln 11, Col 1
Arduino Uno on COM15
2
  • Aproxime outra tag RFID/NFC do módulo RFID-RC522
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
Arduino Uno on COM15
2

Código Arduino - Várias Tags RFID/NFC

Podemos permitir que várias tags RFID/NFC controlem o servo motor. O código abaixo usa duas tags como exemplo.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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("°"); }

Siga passos semelhantes aos de cima e depois aproxime as tags, uma por uma, do módulo RFID-RC522. O resultado no Serial Monitor fica assim:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader Authorized Tag 2 Rotate Servo Motor to 90° Authorized Tag 1 Rotate Servo Motor to 0°
Ln 11, Col 1
Arduino Uno on COM15
2

Você pode expandir o código acima para três, quatro ou mais tags.

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!