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.
Sobre o Módulo RFID/NFC RC522 e a Fechadura Solenoide
Se você ainda não conhece o Módulo RFID/NFC RC522 e a fechadura solenoide (pinagem, como funcionam, como programar...), aprenda sobre eles nos seguintes tutoriais:
This image is created using Fritzing. Click to enlarge image
Para simplificar a montagem, os pinos do módulo RC522 são conectados diretamente aos pinos do Arduino. No entanto, essa conexão direta pode causar problemas, pois os pinos de saída do Arduino fornecem 5V, enquanto os pinos do módulo RC522 foram projetados para operar em 3.3V. É recomendável regular a tensão entre os pinos do Arduino e os pinos do módulo RC522 para evitar possíveis problemas. Para orientações mais detalhadas, consulte o tutorial Arduino - RFID RC522. O diagrama mostra como os resistores podem ser usados para regular 5V para 3.3V:
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.
Código Arduino - Uma Única Tag RFID
/* * 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-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 relayMFRC522 rfid(SS_PIN, RST_PIN);byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};voidsetup() {Serial.begin(9600);SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output.digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => lockedSerial.println("Tap RFID Tag on reader");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::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 => unlockeddelay(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 } }}
Passos Rápidos
Como o UID normalmente não vem impresso na tag RFID, 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 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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Unauthorized Tag: 51 3D C1 AC
Ln 11, Col 1
Arduino Uno on COM15
2
Depois de obter o UID:
Atualize o UID na linha 18 do código acima. Por exemplo, altere byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; PARA byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};
Carregue o código no Arduino novamente
Aproxime uma tag RFID 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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag
Ln 11, Col 1
Arduino Uno on COM15
2
Aproxime outra tag RFID 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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag
Unauthorized Tag: 5D 11 1A D3
Ln 11, Col 1
Arduino Uno on COM15
2
Código Arduino - Várias Tags RFID
Podemos permitir que várias tags RFID/NFC ativem a fechadura solenoide. 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-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 relayMFRC522 rfid(SS_PIN, RST_PIN);byte authorizedUID1[4] = {0x51, 0x3D, 0xC1, 0xAC};byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; voidsetup() {Serial.begin(9600);SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output.digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => lockedSerial.println("Tap RFID Tag on reader");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::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 => unlockeddelay(2000);digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked }elseif (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 => unlockeddelay(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 } }}
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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag 2
Authorized Tag 1
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!