아두이노 나노 RFID 서보 모터
이 튜토리얼은 Arduino Nano와 RFID NFC RC522 모듈을 사용하여 서보 모터를 제어하는 방법을 안내합니다. 과정은 다음과 같이 작동합니다:
인증된 태그가 탭되면, 아두이노 나노는 서보 모터를 90도로 회전시킬 것입니다.
동일한 인증된 태그가 다시 탭되면, 아두이노 나노는 서보 모터를 다시 0도로 회전시킬 것입니다.
이 사이클은 지속적으로 반복될 것입니다.
이것은 캐비닛, 서랍, 문을 고정하거나 애완동물 사료통을 여닫는 데 사용될 수 있습니다...
1 × 아두이노 나노 쿠팡 | 아마존
1 × USB A to Mini-B USB 케이블 쿠팡 | 아마존
1 × RFID/NFC RC522 Kit (reader + tags) 쿠팡 | 아마존
1 × RFID Key Fob 쿠팡 | 아마존
1 × 서보 모터 쿠팡 | 아마존
1 × 5V 전원 어댑터 아마존
1 × 점퍼케이블 쿠팡 | 아마존
1 × (옵션 ) DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1 × (추천 ) 아두이노 나노용 스크루 터미널 확장 보드 쿠팡 | 아마존
1 × (추천 ) 아두이노 나노용 브레이크아웃 확장 보드 쿠팡 | 아마존
1 × (추천 ) 아두이노 나노용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
RFID/NFC RC522 모듈과 서보 모터(핀 배치, 작동 원리 및 프로그래밍 방법 포함)에 익숙하지 않다면, 다음 튜토리얼에서 자세한 정보를 확인할 수 있습니다:
아두이노 나노 코드는 미리 정의된 RFID/NFC 태그의 UID를 가지고 있습니다.
RFID/NFC 태그가 리더기에 탭되면 UID가 읽힙니다.
아두이노 나노는 리더기로부터 UID를 받습니다.
그런 다음 읽힌 UID를 미리 정의된 UID와 비교합니다.
UID가 미리 정의된 UID 중 하나와 일치하는 경우 아두이노 나노는 서보 모터를 90°로 제어합니다.
태그가 다시 탭되면 아두이노 나노는 서보 모터를 다시 0°로 제어합니다.
이 과정은 계속 반복됩니다.
이 이미지는 Fritzing 을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
간단함을 위해, 위의 배선도는 테스트나 교육 목적으로 사용되며, 소형 토크의 서보 모터에 사용됩니다. 실제로 서보 모터에 외부 전원원을 사용하는 것을 강력히 권장합니다. 아래의 배선도는 서보 모터를 외부 전원원에 연결하는 방법을 보여줍니다.
이 이미지는 Fritzing 을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
연결 과정을 단순화하기 위해, RC522 모듈의 핀들은 아두이노의 핀들에 직접 연결됩니다. 그러나, 아두이노의 출력 핀들이 5V의 전압을 생성하는 동안 RC522 모듈의 핀들은 표준 전압 3.3V에서 작동하기 때문에, 특정 상황에서 아두이노가 오작동할 수 있습니다. 따라서, 아두이노 핀들과 RC522 모듈의 핀들 사이의 전압을 조절하는 것이 좋습니다. 자세한 내용은 아두이노 나노 - RFID 튜토리얼을 참조하십시오. 다음 다이어그램은 저항을 사용하여 5V를 3.3V로 조절하는 방법을 설명합니다:
이 이미지는 Fritzing 을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Arduino Nano와 기타 부품에 전원을 공급하는 가장 효과적인 방법은 다음 링크를 참조하세요: 아두이노 나노 전원 공급 방법 .
※ 주의:
핀의 배치는 제조 업체에 따라 다를 수 있습니다. 항상 모듈에 인쇄된 라벨을 사용하세요. 위의 이미지는 DIYables 제조사의 모듈 핀배열을 보여줍니다.
RFID/NFC RC522 Arduino Nano
SS → 10
SCK → 13
MOSI → 11
MISO → 12
IRQ(not connected)
GND → GND
RST → 9
VCC → 3.3V
Servo Motor Arduino 5V DC Adapter
VCC (red) → positive
GND (brown) → negative
SIG (yellow) → A5
5V DC Adapter Servo Motor Arduino Nano
Positive → VCC
Positive -> Vin
Negative → GND
Negative → GND
#include <SPI .h>
#include <MFRC522 .h>
#include <Servo .h>
#define RC522_SS_PIN 10
#define RC522_RST_PIN 5
#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 ();
rfid.PCD_Init ();
servo.attach (SERVO_PIN);
servo.write (angle);
Serial .println ("RFID/NFC 태그를 리더기에 태핑하십시오" );
}
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 ("인증된 태그" );
if (angle == 0)
angle = 90;
else
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 ();
rfid.PCD_StopCrypto1 ();
}
}
}
Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
"MFRC522" 를 검색하고 GithubCommunity에서 해당 라이브러리를 찾으세요.
MFRC522 라이브러리를 설치하려면 Install 버튼을 누르세요.
RFID/NFC 태그의 UID를 결정하기 위해서 첫 번째 단계는 Arduino IDE에 코드를 업로드하는 것입니다. 이 작업은 다음과 같이 수행할 수 있습니다:
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Nano' on 'COM15')
Tap RFID/NFC tag on reader
Unauthorized Tag with UID: 3A C9 6A CB
Ln 11, Col 1
Arduino Nano on COM15
2
UID를 획득한 후에:
코드의 20번째 줄에서 authorizedUID 의 값을 얻은 UID로 변경하세요. 예를 들어, byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; 을 byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB}; 로 변경합니다.
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Nano' on 'COM15')
Tap RFID/NFC tag on reader
Authorized Tag
Rotate Servo Motor to 90°
Ln 11, Col 1
Arduino Nano on COM15
2
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Nano' on 'COM15')
Tap RFID/NFC tag on reader
Authorized Tag
Rotate Servo Motor to 90°
Authorized Tag
Rotate Servo Motor to 0°
Ln 11, Col 1
Arduino Nano on COM15
2
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Nano' on 'COM15')
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
Ln 11, Col 1
Arduino Nano on COM15
2
RFID/NFC 태그 여러 개를 사용하여 서보 모터를 제어할 수 있습니다. 예를 들어, 아래 코드는 두 개의 태그를 사용합니다.
#include <SPI .h>
#include <MFRC522 .h>
#include <Servo .h>
#define RC522_SS_PIN 10
#define RC522_RST_PIN 5
#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 ();
rfid.PCD_Init ();
servo.attach (SERVO_PIN);
servo.write (angle);
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" );
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 ();
rfid.PCD_StopCrypto1 ();
}
}
}
void changeServo() {
if (angle == 0)
angle = 90;
else
angle = 0;
servo.write (angle);
Serial .print ("Rotate Servo Motor to " );
Serial .print (angle);
Serial .println ("°" );
}
위와 같은 단계를 반복하고, 그런 다음 RFID-RC522 모듈의 각 태그를 한 번에 하나씩 탭하세요. 시리얼 모니터에 표시되는 출력은 다음과 같아야 합니다:
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Nano' on 'COM15')
Tap RFID/NFC tag on reader
Authorized Tag 2
Rotate Servo Motor to 90°
Authorized Tag 1
Rotate Servo Motor to 0°
Ln 11, Col 1
Arduino Nano on COM15
2
위에 작성된 코드를 세 개, 네 개 또는 그 이상의 태그를 포함하도록 확장할 수 있습니다.
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.