The purpose of this tutorial is show how to integrate an RFID reader and an actuator with a Raspberry Pi. The basic principles discussed lay the foundation to make an RFID doggy door.
In this tutorial, I go over how to integrate the RC522 RFID module with a Raspberry Pi board. I also show how to integrate an actuator, in this case an LED, to respond to a correct reading from the RFID module. This actuator can be a solenoid lock, a speaker, or even a web interface that logs data. I discuss how this design can be implemented as an RFID doggy door.
I always like to make a wiring diagram (Figure 1: Circuit Schematic w/ LED) using Fritzing, an open-sources schematic capture and PCB routing software. You can download Fritzing using the following link (optional): http://fritzing.org/home/
The first schematic is of the circuit I am building with an LED as an actuator. The LED will turn on when a correct reading is made by the RFID module.
The second circuit is with a solenoid as an actuator. This is the circuit you want to implement the design as a door lock or a doggy door. The TIP120 is a Darlington Array power transistor. This simply allows the Raspberry Pi to control the solenoid, which requires more power than the Raspberry Pi’s GPIO can output.
Figure 1: Circuit Schematic w/ LED
Figure 2: Circuit Schematic w/ Solenoid
The RC522 RFID module uses SPI (Serial Peripheral Interface Bus) to interface to the Raspberry Pi. SPI is a fairly common bus used in embedded systems. The reader should be wired according the table below.
Table 2: RC522 Wiring Table
Raspberry Pi Pin
I’ve connected my actuator (an LED) to Pin 18 on the Raspberry Pi. This is the pin that you should connect
2. Writing the Code
a. Enabling SPI
The first step is to enable SPI on the Raspberry Pi. To do this, open a command line window and enter sudo raspi-config. This will open the Configuration Menu. Select menu 5 “Interfacing Options.” Now select “P4 SPI.” When asked if you want to enable the SPI Interface, select yes. The configuration menu will say “The SPI interface is enabled.” To finish enabling SPI, open a command line terminal and enter the command sudo reboot. This will reboot the Raspberry Pi can finish enabling SPI.
b. Installing Packages
The libraries we will use are written in Python 2, not Python 3. So the first step is to install Python 2.7. This is done by entering sudo apt-get install python2.7-dev. The SPI PY library is used interface with the RC522 module. I clone the library by typing the command git clone https://github.com/lthiery/SPI-Py.git. The library then needs to be installed. First, enter the SPI-Py directory by typing cd SPI-Py. Then install the library, sudo python setup.py install.
c. Adding to Read.py
Read.py is the script you need to change to talk to the RC522 module. While editing this script, scroll to the bottom of the script and comment out “Authenticate.” This tutorial doesn’t cover RFID authentication. Be sure to import time library at the header of the script. Next find the section with the heading “#Configure LED Output Pin.” This is where you should configure your actuator. If you are implementing this design as a doggy door, configure the output pins to the solenoids.
Next go to the heading “#Check to see if card UID read matches your card UID.” This If/Else statement checks the UID the reader reads from a card to a UID you have saved in the script. If the UIDs match, the actuator is outputted to a HIGH.
3. Running the Code
a. Getting the UID
The first time running the script you need to get your card’s UID. An RFID card UID is a unique number associated with the card, similar to a serial number.
To run the script, change directories to the directory you’ve saved the script in. Run the script by typing python Read.py. Because the script has my card’s UID on it, when you place your card up to the reader it will deny access. The card’s UID will be displayed on the screen. Note the UID. Edit the script and change the script’s UID to this value and save it.
Figure 3: Script Running w/ UID Printing
b. Running the Final Script
Run the script again by typing python Read.py. Now when you place your card to the reader, access should be granted and the LED will turn on for 5 seconds. If you have implemented your design as a doggy door, the solenoid should open when access is granted.
Figure 4: Waiting to Read Card
Figure 5: Access Granted
4. Considerations if Implementing as a Doggy DoorSome other design tips to consider if you are implementing the design as a doggy door:
Add a second solenoid to lock the door from both sides.
Add a hall effect (Magnetic Sensor) sensor and a magnet to the door so the Raspberry Pi knows the door has returned to the closed position before locking it.
If you are really ambitious you can design your own large loop antenna around the door instead of mounting the small reader to the door. You will need magnet wire, and will need to solder to connect to the reader module. This will require advanced skill. You can read about loop antennas here.
If you are an advanced programmer, you can read the MFRC522 datasheet and change the firmware on the chipset to better meet your application.
5. Other Implementations
A door lock
A safe lock
Fare Payment Devices
6. Appendix: Read.py
# -*- coding: utf8 -*-
import RPi.GPIO asGPIO
# Capture SIGINT for cleanup when the script is aborted
print("Ctrl+C captured, ending read.")
# Hook the SIGINT
# Create an object of the class MFRC522
# Welcome message
print("Welcome to the MFRC522 data read example")
print("Press Ctrl-C to stop.")
# This loop keeps checking for chips. If one is near it will get the UID and authenticate