아두이노 - RFID/NFC - 서보 모터 | Arduino - RFID/NFC - Servo Motor

이 튜토리얼에서는 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×Servo Motor 쿠팡 | Amazon
1×5V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×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 RC522 모듈과 서보 모터(핀 배치, 작동 방법, 프로그래밍 방법 등)에 대해 잘 모르시면, 다음 튜토리얼에서 배워보세요:

Arduino arduino rfid servo motor component

작동 원리

  • 일부 RFID/NFC 태그의 UID가 아두이노 코드에 미리 설정되어 있습니다.
  • 사용자가 RFID/NFC 태그를 RFID/NFC 리더기에 탭합니다.
  • 리더기가 태그에서 UID를 읽습니다.
  • 아두이노가 리더기로부터 UID를 받아옵니다.
  • 아두이노가 읽은 UID와 미리 정의된 UID들을 비교합니다.
  • UID가 미리 정의된 UID 중 하나와 일치하면, 아두이노가 서보 모터를 90°로 제어합니다.
  • 태그가 다시 탭되면, 아두이노가 서보 모터를 0°로 돌려놓습니다.
  • 이 과정은 무한히 반복됩니다.

선연결

Arduino RFID RC522 servo motor wiring diagram

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

위의 배선도에서 단일 5V 어댑터가 아두이노에 직접 전력을 공급하고, 서보 모터에도 직접 전력을 공급하며, RC522 모듈에는 아두이노의 3.3V 핀을 통해 간접적으로 전력을 공급합니다.

과정을 단순화하기 위해, RC522 모듈의 핀들은 아두이노의 핀들에 직접 연결됩니다. 그러나, 아두이노의 출력 핀들이 5V의 전압을 생성하는 반면 RC522 모듈의 핀들은 보통 3.3V의 전압에서 정상적으로 작동하기 때문에, 이것은 특정한 경우에 아두이노가 제대로 기능하지 않게 할 수 있습니다. 따라서, 아두이노의 핀들과 RC522 모듈의 핀들 사이의 전압을 조절하는 것이 권장됩니다. 더 자세한 내용은 아두이노 - RFID RC522 튜토리얼을 참조하십시오. 아래의 다이어그램은 저항을 사용하여 5V를 3.3V로 조절하는 방법을 보여줍니다:

Arduino RFID RC522 with voltage regulated wiring diagram

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

※ NOTE THAT:

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

RFID/NFC RC522 모듈의 배선 표

RFID/NFC RC522 Arduino
SS → 10
SCK → 13
MOSI → 11
MISO → 12
IRQ(not connected)
GNDGND
RST → 9
VCC → 3.3V

서보 모터의 배선 표

Servo Motor Arduino 5V DC Adapter
VCC (red) → positive
GND (brown) → negative
SIG (yellow) → A5

5V DC 어댑터의 배선 표

5V DC Adapter Servo Motor Arduino
PositiveVCC
Positive -> Vin
NegativeGND
Negative GND

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

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/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; // 서보 모터의 현재 각도 void setup() { Serial.begin(9600); SPI.begin(); // SPI 버스 초기화 rfid.PCD_Init(); // MFRC522 초기화 servo.attach(SERVO_PIN); servo.write(angle); // 서보 모터를 0°로 회전 Serial.println("Tap RFID/NFC 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"); // 서보 모터의 각도 변경 if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // 각도에 따라 서보 모터 제어 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(); // PICC 정지 rfid.PCD_StopCrypto1(); // PCD에 대한 암호화 중단 } } }

사용 방법

  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하세요.
  • "MFRC522"를 검색한 다음, GithubCommunity에서 만든 라이브러리를 찾으세요.
  • MFRC522 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino MFRC522 library

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

  • 위의 코드를 복사하고 아두이노 IDE로 열기
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노에 코드 업로드하기
  • 시리얼 모니터 열기
  • RFID-RC522 모듈에 RFID/NFC 태그를 탭하기
  • 시리얼 모니터에서 UID 받기
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

UID를 가진 후에:

위 코드의 20번째 줄에 있는 UID를 업데이트하세요. 예를 들어, byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};로 변경하세요.

  • 코딩을 다시 아두이노에 업로드하세요.
  • RFID/NFC 태그를 RFID-RC522 모듈에 태핑하세요.
  • 서보 모터가 90도로 회전하는 것을 볼 수 있습니다.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 동일한 RFID/NFC 태그를 RFID-RC522 모듈에 다시 탭하세요.
  • 서보 모터가 0도로 회전하는 것을 볼 수 있습니다.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • RFID-RC522 모듈에 다른 RFID/NFC 태그를 탭하세요
  • 시리얼 모니터에서 출력을 확인하세요
COM6
Send
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
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

아두이노 코드 - 다중 RFID/NFC 태그

우리는 여러 RFID/NFC 태그를 사용하여 서보 모터를 제어할 수 있습니다. 아래 코드는 예시로 두 개의 태그를 사용합니다.

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/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; // 서보 모터의 현재 각도 void setup() { Serial.begin(9600); SPI.begin(); // SPI 버스 초기화 rfid.PCD_Init(); // MFRC522 초기화 servo.attach(SERVO_PIN); servo.write(angle); // 서보 모터를 0°로 회전 Serial.println("Tap RFID/NFC 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"); 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(); // PICC를 정지시킵니다. rfid.PCD_StopCrypto1(); // PCD의 암호화를 중지합니다. } } } void changeServo() { // 서보 모터의 각도 변경 if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // 각도에 따라 서보 모터 제어 servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); }

위의 유사한 단계를 수행한 다음, RFID-RC522 모듈에 있는 태그를 하나씩 탭하십시오. 시리얼 모니터에서의 결과는 아래와 같습니다:

COM6
Send
Tap RFID/NFC tag on reader Authorized Tag 2 Rotate Servo Motor to 90° Authorized Tag 1 Rotate Servo Motor to 0°
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!