Instructables
IMG_0227.jpg
Screen shot 2010-08-09 at 1.22.26 PM Aug 9.png
IMG_0579.jpg
***Updated 8/9/2010***

I wanted to make an easy and secure way to enter my garage. RFID was the best way to unlock my door, even with my hands full I can unlock the door and push it open! I built a simple circuit with a basic ATMega 168 arduino chip and a ID-20 RFID reader to control an electronic door lock.

The circuit consists of 3 separate parts, a Reader to read RFID tags, a Controller to accept data from the reader and control the output of the RGB LED and the Electric door lock. The door lock is first installed in a door and tested with a 9v battery to ensure correct installation. In most cases you want a Normally Open circuit on the door lock, or Fail Secure. This means the door stays locked when no current passes through it. When 12vDC is passed through the electromagnet in the door lock, a plate in the lock gives way and allows the door to be pushed open freely.

The reader is placed on the outside of the door and is separate from the controller on the inside so that no one can circumvent the security by breaking open the Reader and trying to short circuit the reader. The controller receives serial data from the Reader and controls the RGB led and the Door lock. In this case I have put both on separate bread boards for testing. Here is a video overview of the system in action Read on to see how to build one for your self!



**Update** 
All of the code, schematics, and PCB designs have been tested and refined. They are all posted here as of 8/9/2010

Updated video of the final system installed and working.
 
Remove these adsRemove these ads by Signing Up

Step 1: Parts Needed

Picture of Parts Needed
Here are a list of parts and links to SparkFun.com where I bought them. This is the basic set of parts you need to build and arduino and a circuit to read RFID tags into the arduino. I am assuming you have a breadboard, power supply and hookup wires already.

Arduino Stuff

ATmega168 with Arduino Bootloader $4.95

Crystal 16MHz $1.50

Capacitor Ceramic 22pF $0.25 (x2)

Resistor 10k Ohm 1/6th Watt PTH $0.25

Mini Push Button Switch $0.35

Triple Output LED RGB - Diffused $1.95

RFID stuff

Either one of these, 20 has better range, 12 is smaller
RFID Reader ID-12 $29.95
RFID Reader ID-20 $34.95

RFID Reader Breakout $0.95

Break Away Headers - Straight $2.50

RFID Tag - 125kHz $1.95

Other

TIP31A transistor (radio shack/local electronics store $1.50)

Door Lock is from ebay.
Door Fail Secure access control Electric Strike v5 NO
$17.50 (kawamall, bay)

Step 2: Build the Arduino controller

Picture of Build the Arduino controller
IMG_0229.JPG
IMG_0230.JPG
Controller.png
Controller_board.png
The first step to building a RFID door lock with a basic Arduino is to bread board out a basic working arduino. Most Arduino pre-flashed ATMega 168 chips come with the default blink program pre installed. Connect a LED to digital output 13 and verify that everything is working.

The hardware portion of this RFID reader would be too simple if we used a regular arduino with built in USB programmer. Since I plan on putting this into the wall and not touching it again I dont want to use a big bulky $30 arduino board when I can buy a $5 ATMega 168 and make a much smaller custom PCB.

Because I chose to make a basic Arduino circuit myself I need an external USB->Serial FDIT programmer. I have included Eagle schematics of the controller with a power supply built from a 7805 voltage regulator. In testing I used a bread board power supply.

To get an arduino up and running all you really need is the ATMega168 with the arduino software flashed on it, 2x 22pF capacitors, 16mhz crystal, 10k ohm resistor, push button and a breadboard. The hookup for this is well known but I have included the entire schematic for the circuit.

The arduino is going to trigger 4 outputs, 1 each for Red/Green/Blue LEDs, and 1 to trigger the TIP31A to send 12vDC to the door lock. The arduino receives serial data in on its Rx line from the ID-20 RFID reader.

Controller_PCB.pdf(612x792) 12 KB

Step 3: Build the RFID Reader

Picture of Build the RFID Reader
reader.png
reader_board.png
Now that you have your arduino bread boarded and working you can put together the RFID reader portion of the circuit that will contain the ID-10 or ID-20 and RGB LED to indicate the status of the circuit. Remember that the reader will be outside and separate from the controller inside so that someone cannot easily break in.

To build this, we are going to send 5v/Ground over from the primary bread board to a secondary bread board we are building the Reader on. Also send over 3 wires from 3 of the arduino output pins to control the RGB LED, one for each color. One more wire, Brown in the pictures, will be a serial connection for the ID-20 to talk to the arduino's Rx serial input. This is a very simple circuit to connect. LED's get resistors and a few points on the ID-20 are tied to ground/5v to set the correct status.

To make it easier to breadboard the ID-10/ID-20 Sparkfun sells a Breakout board that allows you to attach longer pin headers that are spaced to fit a bread board. This part and the pinheaders and listed in the parts list.

The schematic should be strait forward and easy to follow.

reader_PCB.pdf(612x792) 8 KB

Step 4: Program!

Time to program your arduino. This can be a bit tricky using a basic arduino, you may have to press the reset button multiple times before and during the first part of the upload. A very important thing to remember, you WILL get an upload error if you do no temporarily disconnect the ID-20 serial line to the arduino's Rx line. The ATMega168 only has 1 Rx input and it uses it to upload code to talk to the programmer. Disconnect the ID-20 while programming then plug it back in when your done. I used a FTDI programmer which allows you to program the arduino via USB with only 4 wires. The Controller schematic shows a pin header connection to allow you to plug one in directly. Sparkfun also sells this part but many may already have it.

You can easily upload my code to your arduino and never look back but whats the fun in that? Let me explain the basic idea of how it works.

First of all, I did not want any external buttons/switches/etc and I did not want to reprogram the arduino every time I wanted to add a new card. Therefore I wanted to use only RFID to control the operation of the circuit as well as control over the door lock.

The program turns on the Blue LED to indicate it is ready to read a new card. When the card is read it decides if it is a valid card or not by comparing what it read in to a list of valid cards. If the user is valid, the arduino turns OFF the Blue LED and turns on the Green LED for 5 seconds. It also turns on another output high for 5 seconds. This output is connected to the TIP31A transistor and allows the tiny arduino to control a much larger 12v 300mA door lock without being damaged. After 5 seconds the door lock re-locks and the LED turns back to blue to wait for another card to be read. If the card is invalid then the LED changes to RED for a few seconds and back to Blue to wait for another card. 

It is important that the door lock still work even if the arduino loses power overnight or is reset. Therefore all valid card ID's are stored in EEPROM memory. The ATMega168 has 512 Bytes of EEPROM memory. Each RFID card has a 5 Hex Byte serial number and a 1 Hex Byte Check sum that we can use to verify there were no errors in the transmission between the ID-20 and the arduino.

Valid cards are stored in the EEPROM by using the first Byte as a counter. For example, if there are 3 valid cards stored the first Byte in the EEPROM would be 3. EEPROM.read(0); = 3. Knowing this, and the fact that each ID is 5 Bytes long we know that 1-5 is card one, 6-10 is card 2 and 11-15 is card 3. We can make a loop that looks through the EEPROM 5 bytes at a time and tries to find the card that was read in by the reader.

But how can we add new cards to the EEPROM after the circuit is installed?? I have read in one of the RFID cards I have and hard coded it to be the Master RFID card. So even if the entire EEPROM is wiped the master card will still function. Whenever a card is read, it checks first to see if it is the Master card, if not, then it continues to see if it is a valid card or not. If the card is the master card we have the arduino go into a "programming mode" where it flashes RGB and waits for another valid tag to be read. The next tag that is read is added to the next free spot in the EEPROM and the counter is incremented 1 if the card does not already exist in the EEPROM memory. The reader then returns to normal mode and waits for a new card to be read.

Currently I have not programmed a way to delete a card as the reasons for deleting a card would most likely be it was lost or stolen. As this would most likely be used with 1-10 people the easiest thing to do would be to hard program a Master Erase card that will wipe all cards from the EEPROM then re add them all, which only takes a few seconds. I have added code to wipe the EEPROM but I have not implemented this feature yet. .

The code is attached in a text file along with a copy of the parts list.

Step 5: Expand

This is only some of the cool stuff you can do with RFID. You could expand this much further with a LCD output, logging of who enters and when, network/twitter connection etc. I plan on making a finished PCB version of this circuit. I have never made a PCB before so I am still working on the design and layout of the parts. Once I have them complete I will post them as well. I encourage anyone to take the code I have written and modify it to do even more cool things!
1-40 of 300Next »
earlvanze6 months ago

For over a year I've been wanting to do this and I finally got around to it. Since I lived in a college dorm (now I'm in an apartment), we can't modify the locks or install an electric door strike, so I used a servo motor wired to the deadbolt with string instead. I have modified the original sketch so it works with a servo motor. I also connected a pushbutton switch so it can be unlocked from the inside. When the pushbutton switch is pressed or a tag is read, the servo motor attaches and instantly turns the deadbolt to unlock, and relocks it in 10 seconds. The servo motor detaches after relocking so that the regular key can be used in case of emergency (and to comply with building rules).

Anyway here's my modified sketch: https://www.dropbox.com/s/85ch1b2y5wp61di/RFID_Doo...

I tried cloning my own Arduino but something's wrong in my circuitry so I just used an Arduino Uno instead. I put the RFID circuit outside and wired it to the Arduino inside conveniently via a single Ethernet cable (used 6 out of the 8 wires). I also connected an RGB LED both inside and outside the door.

pcmofo (author)  earlvanze6 months ago

Awesome! Thanks for sharing your code.

pingywon4 years ago
I own a pizzeria and the delivery drivers come in and out of the back door all the time. I have taken your schematic and the modified version of your code (including the eraser card) and modded it myself a little further. I am currently installing this as a system on my back door. I have currently finished all the wiring and am just waiting for a few more parts from spark fun. I have made some changes to fit my actual wants and needs of the location, but overall it is the same lay-out. The whole project has proven REALLY fun so far and I hope to have it all wrapped up with in a week or so.
IMG_0492.jpgIMG_0491.jpg
pcmofo (author)  pingywon4 years ago
 Thats awesome! Glad to see you are getting some practical use out of my project. I am etching some prototype boards this week and hope to permanently install it on my garage brewery this week.
pingywon pcmofo4 years ago
So like I said it should be a week later and my project is all done. I have some pics and am uploading a "demo" video to you tube right now. I used RJ45 to run everything and with the 8pins there was one short coming of my version of the project. I will let all of you be the judge to see if you can figure it out. The whole system performs flawlessly....so far anyway.

If there is anyone who decides to do anything else with this code I would really love to see it or even help you test it.


The vid link doesnt show up as a reply. I'll make another post with it.

IMG_0502.jpgIMG_0503.jpgIMG_0504.JPGIMG_0506.jpgIMG_0509.jpgIMG_0514.jpgIMG_0515.jpgIMG_0516.jpg
pcmofo (author)  pingywon4 years ago
After a couple prototypes and attempts I have worked out all of the bugs and published the updated PCB designs and schematics. I also embeded a video on the main page showing the new boards and the system working in action. Im looking into getting boards made somewhere incase others would like to order them.
pcmofo (author)  pingywon4 years ago
 Wow, I am impressed. You did a really nice job of  throwing that together without using a PCB. I like the eraser card code as well. I cant wait to get mine up and running as well. I hope you had fun building this. It looks like it turned out really nice. 
pingywon pcmofo4 years ago
Thanks man. I really appreciate that. I havent soldered anything this "complicated" in about 2 years, so my soldering started out terrible and by the time I was done it was looking great. I wanted to go back and resolder the whole thing, but I decided to leave good enough alone.

The "outside board" with the rfid reader... I enclosed it in a water proof box, but I also took the time to "paint" all the connection with "Liquid Electrical tape" to help water/moisture proof the whole thing.

Like I had said before if anyone had an additions to the code or design, I would love to see it. Maybe even impliment some of it.
pcmofo (author)  pingywon4 years ago
 Nice! someone here made a PCB design to get the boards printed... I am going to print and etch my own reader board to fit a small electronic enclosure and mount it outside like you have done. It's under a patto so it should not be too exposed. For now I am going to leave the breadboard inside so I can play with the code more.

I designed the circuit diagram so you can still connect a programmer and reprogram it. I really like the idea of a master erase card. One idea I thought of is to have a "programming" master card... then a function card, like... "Add" "Erase" "Erase All" etc. which would allow more customized programming. I'm thinking stuff like one-time-access, access at a specific time of day or span of days.... say someone is coming to do electrical work.. they can go in and out all day but the card wont work the next day etc....

Also planning on using a networked RFID system to track and identify customers/beers we are brewing in the brewery.... so planning on using the same readers and tags for everything.... such that anyone carrying a empty keg into the brewery gets access via the keg because clearly they are helping carry heavy things and dont have time to mess with keys.... or the same tag for a friend may allow them to pour as much beer as they want and pay later but not access into the brewery unless I authorize it etc....

So basically I have lots of plans for RFID and this door reader is only the beginning. 

Working on an arduino remote car starter next... may or may not have RFID... but I expect to be playing around with both sets of code regardless soon. 
pingywon pcmofo4 years ago
I like the idea of one time use cards or "day pass" cards. In order for this system to meet my needs perfectly it would need to have an hours of operation type feature. So that my workers would not be able to enter the door in the middle of the night (11pm-7am) but at the same time I would like my card to work.
That is a feature I would like.
I also think im going to put a simple switch push button on the Arduino RX line so that I can push the button and break the connection between the ardunio and the ID-12 so that I can just jack in to the black box inside housing the ardunio to change the code. instead of having to curently open the box and disconnect the wire.
I was going to use software serial, but I just wanted to get the project done.

Please let me know as you make any new code. I would love you review it and possibly even help test it.
dsaddleme9 days ago

Hey guys!

I need help! Serious one..

I'm not a pro acc user hence i can't download any PDF. WOuld anyone be kind enough to mail me the PDF and the circuit diagrams and all the stuff required to make this project.

M a TE EnTC engineer. I need this project.

Thank you.

omersiar made it!10 days ago

Hello again,

I'm so sorry about that i spammed comments, it was by mistake. I tried several Browsers to send comment but no luck, now it seems working.

I have another 13.56MHz RFID Reader called RF - RC522 which talks with Arduino on SPI protocol, I tried make it to work with your code which is really cool, your EEPROM algorithm amazing. Thank you sharing your work, really inspired me.

RC522 Library for Arduino and Modified code on GitHub.

TAG Read.PNGIMG_20140801_175934.jpg
BrentS11 month ago

I'm in a similar situation, and this seems like a fun way to make life a lot easier. How much did this project end up costing you? And is there any way to make an analog bypass to this system?

pcmofo (author)  BrentS110 days ago

The physical key is still there. It still opens the door.

omersiar made it!26 days ago
(removed by author or community request)
pcmofo (author)  omersiar10 days ago

Nice work!

rhevierose26 days ago

Hi sir or anyone. I want to know what type of lock mechanism you used and how you connected it to the arduino? thank you.

mwessler1 month ago

When I first moved into my home, I knew I wanted to do something like this. Would it be easy to use NFC rather than RFID? I plan on getting the NFC ring (http://nfcring.com/) for other various uses, and being able to do this would be great!

Thanks!

Joe_Studer2 months ago

If I wanted to take this same concept, but apply it to a gate, what changes, if any, would I need/want to make?

This is what i get when i try to upload the code to my Arduino UNO with Atmega328 chip. Any help?

RFID_Door_Lock_Program.ino:127:13: error: #include expects "FILENAME" or <FILENAME>

RFID_Door_Lock_Program.ino: In function 'void loop()':

RFID_Door_Lock_Program:128: error: 'EEPROM' was not declared in this scope

RFID_Door_Lock_Program.ino: In function 'void readID(int)':

RFID_Door_Lock_Program:261: error: 'EEPROM' was not declared in this scope

RFID_Door_Lock_Program.ino: In function 'void writeID(byte*)':

RFID_Door_Lock_Program:277: error: 'EEPROM' was not declared in this scope

RFID_Door_Lock_Program.ino: In function 'void deleteID(byte*)':

RFID_Door_Lock_Program:314: error: 'EEPROM' was not declared in this scope

RFID_Door_Lock_Program.ino: In function 'int findIDSLOT(byte*)':

RFID_Door_Lock_Program:353: error: 'EEPROM' was not declared in this scope

RFID_Door_Lock_Program.ino: In function 'boolean findID(byte*)':

RFID_Door_Lock_Program:403: error: 'EEPROM' was not declared in this scope

I don't know about the rest without seeing your code. But the first line you probably forgot parentheses or angle brackets around your code.

E.g. if you are including the servo library, you would type at the top of your text editor not in a function:

#include <Servo.h>

or if its a header file you created, then put it in the same folder as your sketch and type:

#include "(whatever you called it).h"

Hey I am an Electrical engineering student, new to arduino, is it possible to change the simple arduino chip and components to the ARDUINO UNO?

pcmofo (author)  tylerboutilier7 months ago
Yes. All of the code will work on any arduino micro controller. You just need to use the right pins for serial and you can use any I/O for the leds and door unlock.
jiasheep10 months ago
Could you tell us the value of R1-R5 of the RFID Reader Board? Thank you!
pcmofo (author)  jiasheep10 months ago
The resisters R1-R5 on the RFID reader board will vary for each person. They control the voltage that is going to the tri-color led (R1-R3) and control the voltage for the buzzer and transister that activates the buzzer. You should use whatever values are recommended for the exact LED, transistor, and buzzer you have.
jiasheep pcmofo10 months ago
Thanks for the quick response :) If I'll be using a TRI-color LED with Vf=2.5v and If(green)=25mA If(blue&$red)=30mA--calc http://led.linear1.org/1led.wiz-- my R1=390 ohms, R2&R3=330 ohms. How about R4 and R5? How to compute?
vlasp0110 months ago
Where do you plug in the strike plate on the arduino uno r3? and, how can I do this with a PN532 NFC/RFID shield by Adafruit?
hi iam very much interested in this project and want to build one for myself

i have em-18 rfid reader module where it doesn't send the start byte and the stop byte as in particular
just transmits 12 digit ASCII code to the serial monitor
i want to implement this code with some changes according to my reader ,but its really confusing , could you help me out in this issue
my tags read 6B0037E8398D ,6B003819CC86, 0800692B5D17
i wanted to remove the start byte comparison ,stop byte and even the check sum
just wanted to compare tags and respectively add or del cards and want it opened for 15 + cards in my arduino mega
jiasheep1 year ago
Hi! Great Project :) One question though, did you use 1N4001 for D1 in the controller_PCB?
How many cards can it store? Thanks.
How many cards can it store? Thanks
Great write up. I do have one question for you (hoping you still receive updates about this post). Do you know if its possible to have rfid tags keep the door open as long as the tag is within range of the reader?
pcmofo (author)  JustinRSharp1 year ago
Yes and no. Yes you can do it, No it cant be done with this hardware or even general consumer grade hardware. I looked into doing a RFID setup for my car and its just not reliable enough or have enough range to be useful. Their are Active and Passive RFID tags. You would need an Active tag that has a battery and is always transmitting a signal (like a car rfid key) and you would need a receiver that has a strong enough range to cover the area you want to be inside. This typically means having a sensor both on the inside and outside of a building. Other setups have one on each side of the door and use both to figure out if your are inside or outside rather than constantly checking for your presence. You can always add a timer like wait 5 minutes or keep the door unlocked until you press a "lock" button etc.
jmaroney251 year ago
hey, this is probably a dumb question but I have an arduino uno already and was wondering if that would work. I know you said that you used an ATMEGA 168 and this has an ATMEGA 328, so is there anything different that I would need to do?

Thanks
bresser1 year ago
Is there any way to make this so that I can still open it with the key?
EET19821 year ago
Hello. I just received my locking mechanism for the project. It's exactly like yours. It seems to me that it will only work if the door knob is thumb latched from the inside and no way to unlock it physically from the outside. Otherwise, any turning of the knob, if the thumb latch is unlocked, will just open the door no matter if the electronic lock is engaged or not? Is that the way your door knob is set up? thumb latched on the inside at all times and just pull or push the door to open it? Thank you in advance for your insight. Take care and thank you for the great instructable!!!
pcmofo (author)  EET19821 year ago
This is discussed at some point in the comments. Many people questioned what would happen if the power went out or the security of the RFID. The answer of course is that the lock stays the same on the door knob but the door jam catch is replaced. This means their is two ways to open the door. Either with a key or with RFID. In the case of a key the door works like it did before. With RFID the door stays locked but the latch gives way and the door can open.

This is nice if you lose power or something goes wrong with the lock. In my garage I also use it to unlock the door if I keep going in and out.

You can also get other types of door handles. They have some just for apartment buildings that can be locked from the outside but the inside can simply twist to open the door and it will remain locked. This lets you leave without using RFID or unlocking the door.

If you want RFID only you can use a different type of door knob or use an electric deadbolt etc.
EET1982 pcmofo1 year ago
Thank you very much for the explanation. Helped allot.
What power supply did you use to power the Electric Strike?
What was your 12v power supply for the Electric Strike? Need a little help
1-40 of 300Next »