아두이노 나노 - RFID - 서보 모터 | Arduino Nano - RFID - Servo Motor

이 튜토리얼은 Arduino Nano와 RFID NFC RC522 모듈을 사용하여 서보 모터를 제어하는 방법을 안내합니다. 과정은 다음과 같이 작동합니다:

이것은 캐비닛, 서랍, 문을 고정하거나 애완동물 사료통을 여닫는 데 사용될 수 있습니다...

준비물

1×Arduino Nano Amazon
1×USB A to Mini-B USB cable 쿠팡 | Amazon
1×RFID/NFC RC522 Kit (reader + tags) 쿠팡 | Amazon
1×RFID Key Fob 쿠팡 | Amazon
1×Servo Motor 쿠팡 | Amazon
1×5V Power Adapter Amazon
1×Jumper Wires Amazon
1×(Optional) DC Power Jack 쿠팡 | Amazon
1×(Optional) 9V Power Adapter for Arduino Nano Amazon
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

RFID/NFC RC522 모듈 및 서보 모터에 대하여

RFID/NFC RC522 모듈과 서보 모터(핀 배치, 작동 원리 및 프로그래밍 방법 포함)에 익숙하지 않다면, 다음 튜토리얼에서 자세한 정보를 확인할 수 있습니다:

Arduino Nano arduino rfid servo motor component

작동 방식

  • 아두이노 나노 코드는 미리 정의된 RFID/NFC 태그의 UID를 가지고 있습니다.
  • RFID/NFC 태그가 리더기에 탭되면 UID가 읽힙니다.
  • 아두이노 나노는 리더기로부터 UID를 받습니다.
  • 그런 다음 읽힌 UID를 미리 정의된 UID와 비교합니다.
  • UID가 미리 정의된 UID 중 하나와 일치하는 경우 아두이노 나노는 서보 모터를 90°로 제어합니다.
  • 태그가 다시 탭되면 아두이노 나노는 서보 모터를 다시 0°로 제어합니다.
  • 이 과정은 계속 반복됩니다.

선연결

Arduino Nano RFID RC522 servo motor wiring diagram

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

간단함을 위해, 위의 배선도는 테스트나 교육 목적으로 사용되며, 소형 토크의 서보 모터에 사용됩니다. 실제로 서보 모터에 외부 전원원을 사용하는 것을 강력히 권장합니다. 아래의 배선도는 서보 모터를 외부 전원원에 연결하는 방법을 보여줍니다.

Arduino Nano RFID RC522 servo motor wiring diagram

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

RFID RC522 모듈을 이용한 배선

연결 과정을 단순화하기 위해, RC522 모듈의 핀들은 아두이노의 핀들에 직접 연결됩니다. 그러나, 아두이노의 출력 핀들이 5V의 전압을 생성하는 동안 RC522 모듈의 핀들은 표준 전압 3.3V에서 작동하기 때문에, 특정 상황에서 아두이노가 오작동할 수 있습니다. 따라서, 아두이노 핀들과 RC522 모듈의 핀들 사이의 전압을 조절하는 것이 좋습니다. 자세한 내용은 아두이노 나노 - RFID RC522 튜토리얼을 참조하십시오. 다음 다이어그램은 저항을 사용하여 5V를 3.3V로 조절하는 방법을 설명합니다:

Arduino Nano RFID RC522 with voltage regulated wiring diagram

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

※ NOTE THAT:

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

RFID/NFC RC522 모듈의 배선표

RFID/NFC RC522 Arduino Nano
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 Nano
PositiveVCC
Positive -> Vin
NegativeGND
Negative GND

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

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define RC522_SS_PIN 10 // 아두이노 나노의 RC522의 SS 핀에 연결된 핀 #define RC522_RST_PIN 5 // 아두이노 나노의 RC522의 RST 핀에 연결된 핀 #define SERVO_PIN A5 // 서보 모터에 연결된 아두이노 나노의 핀 MFRC522 rfid(RC522_SS_PIN, RC522_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("RFID/NFC 태그를 리더기에 태핑하십시오"); } 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("인증된 태그"); // 서보 모터의 각도 변경 if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // 서보 모터를 각도 위치로 회전 servo.write(angle); Serial.print("서보 모터를 "); Serial.print(angle); Serial.println("°로 회전"); } else { Serial.print("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 Nano MFRC522 library

RFID/NFC 태그의 UID를 결정하기 위해서 첫 번째 단계는 Arduino 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번째 줄에서 authorizedUID의 값을 얻은 UID로 변경하세요. 예를 들어, byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};로 변경합니다.

  • 코드를 다시 Arduino Nano 보드에 업로드하세요.
  • 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-RC522 모듈에 RFID/NFC 태그를 한 번 더 탭하세요.
  • 서보 모터가 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 Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define RC522_SS_PIN 10 // 아두이노 나노 핀이 RC522의 SS 핀에 연결됨 #define RC522_RST_PIN 5 // 아두이노 나노 핀이 RC522의 RST 핀에 연결됨 #define SERVO_PIN A5 // 아두이노 나노 핀이 서보 모터에 연결됨 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; // 서보 모터의 현재 각도 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!