아두이노 - RFID - 솔레노이드 잠금장치 | Arduino - RFID - Solenoid Lock

이 튜토리얼에서는 Arduino, RC522 RFID 리더 및 솔레노이드 잠금장치를 사용하여 RFID 기반 도어록 시스템을 만드는 방법을 배우려고 합니다.

준비물

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×Solenoid Lock Amazon
1×Relay Amazon
1×12V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

RFID/NFC RC522 모듈 및 솔레노이드 잠금장치에 대하여

RFID/NFC RC522 모듈과 솔레노이드 잠금장치(핀아웃, 작동 원리, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 배워보세요:

선연결

Arduino RFID RC522 solenoid lock wiring diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

설치를 단순화하기 위해 RC522 모듈의 핀은 아두이노 핀에 직접 연결됩니다. 그러나, 이러한 직접 연결은 아두이노의 출력 핀이 5V를 제공하는 반면, RC522 모듈의 핀은 3.3V 작동을 위해 설계되었기 때문에 문제를 일으킬 수 있습니다. 잠재적 문제를 방지하기 위해 아두이노 핀과 RC522 모듈의 핀 사이의 전압을 조절하는 것이 좋습니다. 보다 자세한 안내를 위해서는 아두이노 - RFID RC522 튜토리얼을 참조하십시오. 제공된 다이어그램은 5V를 3.3V로 조절하기 위해 저항기를 사용하는 방법을 보여줍니다.

Arduino RC522 module with voltage regulated wiring diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

※ NOTE THAT:

제조업체에 따라 핀의 순서가 달라질 수 있습니다. 항상 모듈에 인쇄된 라벨을 사용하십시오. 위의 이미지는 DIYables 제조업체의 모듈 핀배열을 보여줍니다.

아두이노 코드 - 단일 RFID 태그

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-rfid-solenoid-lock */ #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(); // SPI 버스 초기화 rfid.PCD_Init(); // MFRC522 초기화 pinMode(RELAY_PIN, OUTPUT); // 핀을 출력으로 초기화합니다. digitalWrite(RELAY_PIN, LOW); // 솔레노이드 잠금 비활성화 => 잠금 Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // 새 태그가 있습니다 if (rfid.PICC_ReadCardSerial()) { // NUID가 읽혔습니다 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, LOW); // 솔레노이드 잠금 비활성화 => 잠금 해제 delay(2000); digitalWrite(RELAY_PIN, HIGH); // 솔레노이드 잠금 활성화 => 잠금 } 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(); // PICC 정지 rfid.PCD_StopCrypto1(); // PCD의 암호화 중지 } } }

사용 방법

UID가 일반적으로 RFID 태그에 인쇄되어 있지 않기 때문에, 우리가 해야 할 첫 번째 단계는 태그의 UID를 찾아내는 것입니다. 이는 다음 방법으로 수행될 수 있습니다:

  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 Arduino에 코드를 업로드하세요
  • 시리얼 모니터 열기
  • RFID-RC522 모듈에 RFID 태그를 탭하기
  • 시리얼 모니터에서 UID 얻기
COM6
Send
Tap RFID Tag on reader Unauthorized Tag: 51 3D C1 AC
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

UID를 갖게 된 후에:

  • 위 코드의 18번째 줄에서 UID를 업데이트하십시오. 예를 들어, byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};에서 byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};로 변경하십시오.
  • 코드를 다시 Arduino에 업로드하세요.
  • RFID 태그를 RFID-RC522 모듈에 탭하세요.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
Tap RFID Tag on reader Authorized Tag
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • RFID-RC522 모듈에 다른 RFID 태그를 탭하세요
  • 시리얼 모니터에서 출력을 확인하세요
COM6
Send
Tap RFID Tag on reader Authorized Tag Unauthorized Tag: 5D 11 1A D3
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

아두이노 코드 - 다수의 RFID 태그

솔레노이드 잠금장치를 활성화하기 위해 여러 RFID/NFC 태그를 허용할 수 있습니다. 아래 코드는 예시로 두 개의 태그를 사용합니다.

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-rfid-solenoid-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // Arduino 핀이 릴레이를 통해 솔레노이드 잠금을 제어합니다. MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID1[4] = {0x51, 0x3D, 0xC1, 0xAC}; byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // SPI 버스 초기화 rfid.PCD_Init(); // MFRC522 초기화 pinMode(RELAY_PIN, OUTPUT); // 핀을 출력으로 초기화합니다. digitalWrite(RELAY_PIN, LOW); // 솔레노이드 잠금 비활성화 => 잠금 Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // 새 태그가 있습니다 if (rfid.PICC_ReadCardSerial()) { // NUID가 읽혔습니다 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, LOW); // 솔레노이드 잠금 비활성화 => 잠금 해제 delay(2000); digitalWrite(RELAY_PIN, HIGH); // 솔레노이드 잠금 활성화 => 잠금 } 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, LOW); // 솔레노이드 잠금 비활성화 => 잠금 해제 delay(2000); digitalWrite(RELAY_PIN, HIGH); // 솔레노이드 잠금 활성화 => 잠금 } 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(); // PICC 정지 rfid.PCD_StopCrypto1(); // PCD의 암호화 중단 } } }

위의 단계와 비슷하게 수행한 다음, RFID-RC522 모듈에서 태그를 하나씩 탭하세요. 시리얼 모니터에서의 결과는 아래와 같습니다:

COM6
Send
Tap RFID Tag on reader Authorized Tag 2 Authorized Tag 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!