Arduino Nano - RFID - Servo Motor

Este tutorial ensina como usar um Arduino Nano e o módulo RFID NFC RC522 para controlar um servo motor. O processo funciona assim:

Isso pode ser usado para trancar um armário, gaveta, porta, ou para abrir e fechar um alimentador de pets...

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×RFID/NFC RC522 Kit (reader + tags)
1×Servo Motor
1×Fonte de Alimentação 5V
1×Fios Jumper
1×(Opcional) Conector de Alimentação DC
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

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ê não conhece o Módulo RFID/NFC RC522 e o Servo Motor (incluindo pinagem, como funcionam e como programá-los), você pode saber mais nos tutoriais a seguir:

Arduino Nano arduino rfid servo motor component

Como Funciona

  • O código do Arduino Nano tem alguns UIDs de tags RFID/NFC predefinidos.
  • Quando a tag RFID/NFC é encostada no leitor, o UID é lido.
  • O Arduino Nano recebe o UID do leitor.
  • Em seguida, ele compara o UID lido com os UIDs predefinidos.
  • Se o UID corresponder a um dos UIDs predefinidos, o Arduino Nano controla o servo motor para 90°.
  • Quando a tag é encostada novamente, o Arduino Nano controla o servo motor de volta para 0°.
  • Esse processo se repete continuamente.

Diagrama de Ligação

The wiring diagram between Arduino Nano and RFID RC522 servo motor

This image is created using Fritzing. Click to enlarge image

Por simplicidade, o diagrama de ligação acima é usado para testes ou fins educacionais, e para um servo motor com torque pequeno. Recomendamos fortemente usar uma fonte de alimentação externa para o servo motor na prática. O diagrama de ligação abaixo ilustra como conectar o servo motor a uma fonte de alimentação externa.

The wiring diagram between Arduino Nano and RFID RC522 servo motor

This image is created using Fritzing. Click to enlarge image

Ligação com o módulo RFID RC522

Para simplificar o processo de conexão, os pinos do módulo RC522 são conectados diretamente aos pinos do Arduino. No entanto, isso pode fazer o Arduino funcionar mal em certos casos, pois os pinos de saída do Arduino produzem uma tensão de 5V, enquanto os pinos do módulo RC522 operam com uma tensão padrão de 3.3V. Portanto, é aconselhável regular a tensão entre os pinos do Arduino e os pinos do módulo RC522. Para mais detalhes, consulte o tutorial Arduino Nano - RFID RC522. O diagrama a seguir ilustra como regular 5V para 3.3V usando resistores:

The wiring diagram between Arduino Nano and RFID RC522 with voltage regulated

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Nano e outros componentes.

※ Nota:

A disposição dos pinos pode variar dependendo do fabricante. SEMPRE use os rótulos impressos 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 Nano
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 DC 5V
VCC (vermelho) → positivo
GND (marrom) → negativo
SIG (amarelo) → A5

Tabela de ligação do Adaptador DC 5V

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

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

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

Passos Rápidos

  • Clique no ícone Libraries na barra lateral esquerda da Arduino IDE.
  • Pesquise por “MFRC522” e localize a biblioteca de GithubCommunity.
  • Pressione o botão Install para instalar a biblioteca MFRC522.
Arduino Nano MFRC522 library

Para determinar o UID de uma tag RFID/NFC, o primeiro passo é fazer o upload do código pela Arduino IDE. Isso pode ser feito assim:

  • Copiando o código e abrindo-o na Arduino IDE
  • Clicando no botão Upload
  • Abrindo o Serial Monitor
  • Encostando a tag RFID/NFC no módulo RFID-RC522
  • Vendo o UID no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' 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 Nano on COM15
2

Depois de obter o UID:

  • Substitua o valor de authorizedUID na linha 20 do código pelo UID obtido. Por exemplo, mude byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; PARA byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Faça o upload do código para a placa Arduino Nano novamente
  • Coloque uma tag RFID/NFC no módulo RFID-RC522
  • O servo motor vai girar para 90°
  • Confira a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Ln 11, Col 1
Arduino Nano on COM15
2
  • Encoste a tag RFID/NFC no módulo RFID-RC522 mais uma vez.
  • O servo motor vai girar para 0° e a saída ficará visível no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' 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 Nano on COM15
2
  • Encoste uma tag RFID ou NFC no módulo RFID-RC522.
  • Confira a saída no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' 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 Nano on COM15
2

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

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

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

Repita os mesmos passos acima e depois encoste cada tag no módulo RFID-RC522, uma de cada vez. A saída exibida no Serial Monitor deve aparecer assim:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' 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 Nano on COM15
2

Você pode expandir o código escrito acima para incluir 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!