라즈베리 파이 RFID 서보 모터

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

이는 캐비닛, 서랍, 문을 잠그거나, 반려동물 급식기를 열고 닫는 데 사용할 수 있습니다...

Hardware Preparation

1×Raspberry Pi 4 Model B Amazon
1×RFID/NFC RC522 Kit (reader + tags) 쿠팡 | Amazon
1×RFID Key Fob 쿠팡 | Amazon
1×RFID Card Amazon
1×Servo Motor 쿠팡 | Amazon
1×5V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(추천) Screw Terminal Block Shield for Raspberry Pi 쿠팡 | Amazon
1×(추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B Amazon
1×(추천) Plastic Case and Cooling Fan for Raspberry Pi 4B Amazon
1×(추천) HDMI Touch Screen Monitor for Raspberry Pi Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

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

RFID/NFC RC522 모듈 및 서보 모터(핀 배치, 작동 방식, 프로그래밍 방법 포함)에 익숙하지 않은 경우, 다음 튜토리얼에서 더 많은 정보를 제공할 수 있습니다:

작동 방식

  • 특정 RFID/NFC 태그의 UID가 라즈베리 파이 코드에 프로그래밍되어 있습니다.
  • 사용자가 RFID/NFC 태그를 RFID/NFC 리더기에 접촉하면, 리더기가 태그로부터 UID를 읽어냅니다.
  • 라즈베리 파이는 리더기로부터 UID를 수신하여 사전 정의된 UID와 비교합니다.
  • UID가 사전 정의된 UID 중 하나와 일치하면, 라즈베리 파이는 서보 모터를 90°로 제어합니다.
  • 태그가 다시 접촉되면, 라즈베리 파이는 서보 모터를 0°로 되돌립니다.
  • 이 과정은 계속 반복됩니다.

Wiring Diagram

라즈베리 파이 RFID RC522 서보 모터 배선도

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

배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:

Raspberry Pi Screw Terminal Block Shield

위의 배선도에서 5V 어댑터는 Raspberry Pi의 3.3V 핀을 통해 간접적으로 Raspberry Pi, 서보 모터 및 RC522 모듈에 전원을 공급하는 데 사용됩니다.

※ NOTE THAT:

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

간단함을 위해 위의 배선도는 테스트나 교육용으로 사용되며, 작은 토크의 서보 모터에 적합합니다. 실제로는 서보 모터에 외부 전원을 사용하는 것이 좋습니다. 서보 모터에 외부 전원을 공급하는 방법에 대해서는 Raspberry Pi - Servo Motor 튜토리얼을 참조하세요.

RFID/NFC RC522 모듈의 배선 표

RFID/NFC RC522 Raspberry Pi
SS → GPIO 8 (SPI0 CS)
SCK → GPIO 11 (SPI0 SCL)
MOSI → GPIO 10 (SPI0 MOSI)
MISO → GPIO 9 (SPI0 MISO)
IRQ not connected
GND → Any GND Pin
RST → Pin 31 (GPIO12)
VCC → Pin 1 or Pin 16 (3.3V)

서보 모터 배선 표

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

5V DC 어댑터의 배선표

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

라즈베리 파이 코드 - 단일 RFID/NFC 태그

Detailed Instructions

  • Raspberry Pi에 Raspbian 또는 다른 호환되는 운영 체제가 설치되어 있는지 확인하십시오.
  • PC와 동일한 로컬 네트워크에 Raspberry Pi가 연결되어 있는지 확인하십시오.
  • 일부 라이브러리를 설치해야 하는 경우 인터넷에 연결되어 있는지 확인하십시오.
  • Raspberry Pi를 처음 사용하는 경우, Raspberry Pi 설정 방법을 참조하십시오.
  • Linux 및 macOS의 내장 SSH 클라이언트 또는 Windows의 PuTTY를 사용하여 SSH를 통해 PC를 Raspberry Pi에 연결하십시오. SSH를 통해 PC를 Raspberry Pi에 연결하는 방법을 참조하십시오.
  • RPi.GPIO 라이브러리가 설치되어 있는지 확인하십시오. 그렇지 않으면 다음 명령어를 사용하여 설치하십시오:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Raspberry Pi에서 SPI 인터페이스를 활성화하려면 Raspberry Pi - SPI 인터페이스 활성화 방법의 지침을 따르십시오.
  • spidev 라이브러리가 설치되어 있는지 확인하십시오. 설치되어 있지 않으면 다음 명령어를 사용하여 설치하십시오:
sudo apt-get install python3-pip python3-dev git sudo pip3 install spidev
  • mfrc522 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않으면 다음 명령어를 사용하여 설치하세요.
sudo pip3 install mfrc522
  • Python 스크립트 파일 rfid_servo.py를 생성하고 다음 코드를 추가하세요:
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-rfid-servo-motor import RPi.GPIO as GPIO import MFRC522 import time import math # Define GPIO pins RC522_RST_PIN = 12 # GPIO pin connected to RC522's RST pin SERVO_PIN = 16 # GPIO pin connected to servo motor # Set up GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(SERVO_PIN, GPIO.OUT) servo_motor = GPIO.PWM(SERVO_PIN, 50) # 50Hz frequency for the servo motor # Create an instance of the RFID reader reader = MFRC522.MFRC522() # Authorized UID authorized_uid = [0xAA, 0xBB, 0xCC, 0xDD] def is_authorized(uid): return uid == authorized_uid def move_servo(angle): duty_cycle = (angle / 18) + 2 GPIO.output(SERVO_PIN, True) servo_motor.ChangeDutyCycle(duty_cycle) print(f"Rotate Servo Motor to {angle}°") try: servo_motor.start(0) # Start PWM with 0% duty cycle print("Tap RFID/NFC Tag on reader") while True: (status, TagType) = reader.MFRC522_Request(reader.PICC_REQIDL) if status == reader.MI_OK: (status, uid) = reader.MFRC522_Anticoll() if status == reader.MI_OK: if is_authorized(uid): print("Authorized Tag") # Toggle servo angle current_angle = 90 if current_angle == 0 else 0 move_servo(current_angle) time.sleep(2) # Add delay after moving the servo else: print(f"Unauthorized Tag with UID: {' '.join(format(b, '02x') for b in uid)}") except KeyboardInterrupt: servo_motor.stop() GPIO.cleanup()
  • 파일을 저장하고 터미널에서 다음 명령어를 실행하여 Python 스크립트를 실행하십시오.
python3 rfid_servo.py

스크립트는 터미널에서 Ctrl + C를 누를 때까지 계속해서 무한 루프로 실행됩니다.

RFID/NFC 태그의 UID를 식별하려면, RFID-RC522 모듈에 RFID/NFC 태그를 접촉하세요. UID는 터미널에서 확인할 수 있습니다.

PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB

UID를 가지고 있으면:

  • 코드의 20번째 줄을 UID로 대체합니다. 예를 들면 byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • 파이썬 스크립트를 다시 실행합니다.
python3 rfid_servo.py
  • RFID-RC522 모듈에 RFID/NFC 태그를 놓습니다
  • 서보 모터가 90°로 회전합니다
  • 터미널에서 출력을 확인합니다
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
  • RFID-RC522 모듈에 다시 한 번 동일한 RFID/NFC 태그를 태깅하세요.
  • 서보 모터가 0°로 회전하는 것을 확인하세요.
  • 터미널에서 출력을 확인하세요.
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
  • RFID-RC522 모듈에 RFID 또는 NFC 태그를 대십시오.
  • 터미널에서 출력을 확인하십시오.
PuTTY - Raspberry Pi
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

라즈베리 파이 코드 - 다중 RFID/NFC 태그

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

# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-rfid-servo-motor import RPi.GPIO as GPIO import MFRC522 import time import math # Define GPIO pins RC522_RST_PIN = 12 # GPIO pin connected to RC522's RST pin SERVO_PIN = 16 # GPIO pin connected to servo motor # Set up GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(SERVO_PIN, GPIO.OUT) servo_motor = GPIO.PWM(SERVO_PIN, 50) # 50Hz frequency for the servo motor # Create an instance of the RFID reader reader = MFRC522.MFRC522() # List of authorized UIDs authorized_uids = [ [0xAA, 0xBB, 0xCC, 0xDD], [0x11, 0x22, 0x33, 0x44], [0xFF, 0xFF, 0xFF, 0xFF] ] def is_authorized(uid): for auth_uid in authorized_uids: if uid == auth_uid: return True return False def move_servo(angle): duty_cycle = (angle / 18) + 2 GPIO.output(SERVO_PIN, True) servo_motor.ChangeDutyCycle(duty_cycle) print(f"Rotate Servo Motor to {angle}°") try: servo_motor.start(0) # Start PWM with 0% duty cycle current_angle = 0 # Initial angle print("Tap RFID/NFC Tag on reader") while True: (status, TagType) = reader.MFRC522_Request(reader.PICC_REQIDL) if status == reader.MI_OK: (status, uid) = reader.MFRC522_Anticoll() if status == reader.MI_OK: if is_authorized(uid): print("Authorized Tag") # Toggle servo angle current_angle = 90 if current_angle == 0 else 0 move_servo(current_angle) else: print(f"Unauthorized Tag with UID: {' '.join(format(b, '02x') for b in uid)}") except KeyboardInterrupt: servo_motor.stop() GPIO.cleanup()

이전과 동일한 절차를 반복한 후 RFID-RC522 모듈에서 각각의 태그를 차례로 탭하십시오. 터미널의 출력은 다음과 같이 나타나야 합니다.

PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°

위의 코드를 확장하여 네 개 이상의 RFID 태그를 포함할 수 있습니다.

Video Tutorial

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