아두이노 - RFID/NFC - 릴레이 | Arduino - RFID/NFC - Relay
이 튜토리얼에서는 아두이노를 사용하여 RFID/NFC 태그로 릴레이를 활성화하는 방법을 배우게 됩니다. 릴레이를 사용하여 모터, 작동기 등을 제어하는 방법으로 이 튜토리얼을 확장할 수 있습니다.
1 | × | Arduino Uno | Amazon | |
1 | × | USB 2.0 cable type A/B | 쿠팡 | Amazon | |
1 | × | RFID/NFC RC522 Kit (reader + tags) | 쿠팡 | Amazon | |
1 | × | RFID Key Fob | 쿠팡 | Amazon | |
1 | × | Relay | Amazon | |
10 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon | |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
RFID/NFC RC522 모듈과 릴레이(핀아웃, 작동 방법, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 배워보세요:
일부 RFID/NFC 태그의 UID는 Arduino 코드에 미리 설정되어 있습니다.
사용자가 RFID/NFC 태그를 RFID/NFC 리더기에 탭합니다.
리더기가 태그에서 UID를 읽습니다.
Arduino가 리더기로부터 UID를 가져옵니다.
Arduino는 읽은 UID를 미리 정의된 UID와 비교합니다.
UID가 미리 정의된 UID 중 하나와 일치하면 Arduino가 릴레이를 활성화합니다.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
설치를 단순화하기 위해, RC522 모듈의 핀들이 아두이노의 핀들에 직접 연결됩니다. 그러나, 아두이노의 출력 핀들이 5V를 공급하는 반면 RC522 모듈의 핀들은 3.3V에서 작동하도록 설계되어 있기 때문에 이것은 특정 상황에서 아두이노가 작동을 멈출 수 있게 합니다. 따라서 아두이노 핀들과 RC522 모듈의 핀들 사이의 전압을 조절하는 것이 좋습니다. 추가 정보는 아두이노 - RFID RC522 튜토리얼을 참조해 주세요. 다음 다이어그램은 저항을 사용하여 5V를 3.3V로 조절하는 방법을 보여줍니다:
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
※ NOTE THAT:
핀의 순서는 제조업체에 따라 다를 수 있습니다. 항상 모듈에 인쇄된 라벨을 사용하세요. 위 이미지는 DIYables 제조업체의 모듈 핀배열을 보여줍니다.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 5
#define RELAY_PIN A5
MFRC522 rfid(SS_PIN, RST_PIN);
byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("Tap RFID/NFC Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
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");
digitalWrite(RELAY_PIN, HIGH);
delay(2000);
digitalWrite(RELAY_PIN, LOW);
}
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();
rfid.PCD_StopCrypto1();
}
}
}
UID가 일반적으로 RFID/NFC 태그에 인쇄되지 않기 때문에, 우리가 먼저 해야 할 첫 번째 단계는 태그의 UID를 찾는 것입니다. 이것은 다음과 같이 할 수 있습니다:
위의 코드를 복사하고 Arduino IDE로 열기
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드하기
시리얼 모니터 열기
RFID-RC522 모듈에 RFID/NFC 태그를 탭하기
시리얼 모니터에서 UID 가져오기
Tap RFID/NFC tag on reader
Unauthorized Tag with UID: 3A C9 6A CB
UID를 갖은 후에:
위 코드의 18번 줄에서 UID를 업데이트하세요. 예를 들어, byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};를 byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};로 변경하세요.
아두이노에 코드를 다시 업로드하세요.
RFID/NFC 태그를 RFID-RC522 모듈에 탭하세요.
시리얼 모니터에서 출력을 확인하세요.
Tap RFID/NFC tag on reader
Authorized Tag
Tap RFID/NFC tag on reader
Authorized Tag
Unauthorized Tag with UID: BD 1E 1D 00
우리는 여러 RFID/NFC 태그가 릴레이를 활성화할 수 있게 할 수 있습니다. 아래 코드는 예로서 두 태그를 사용합니다.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 5
#define RELAY_PIN A5
MFRC522 rfid(SS_PIN, RST_PIN);
byte authorizedUID1[4] = {0x3A, 0xC9, 0x6A, 0xCB};
byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("Tap RFID/NFC Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
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");
digitalWrite(RELAY_PIN, HIGH);
delay(2000);
digitalWrite(RELAY_PIN, LOW);
}
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");
digitalWrite(RELAY_PIN, HIGH);
delay(2000);
digitalWrite(RELAY_PIN, LOW);
}
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();
rfid.PCD_StopCrypto1();
}
}
}
위의 절차와 유사한 단계를 수행한 다음, RFID-RC522 모듈에서 태그를 하나씩 탭하세요. 시리얼 모니터에서 결과는 아래와 같습니다:
Tap RFID/NFC tag on reader
Authorized Tag 2
Authorized Tag 1
위의 코드를 세 개, 네 개 또는 그 이상의 태그로 확장할 수 있습니다.
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.