One day I just needed an access control system and reservation calendar to a common use sauna, and it had an electric lock (24VAC) already in place.
Hardware (links to Finnish shops):
- Raspberry Pi 3B
- Enclosure for Raspberry Pi
- Raspberry Pi 7″ TFT
- Enclosure for TFT:lle
- NFC reader
- Relay card module
- Jumper wires
- Good 5V/2A-2.5A PSU, which really gives enough current for RasPi, TFT, NFC-reader and the relay card module
- (or four diodes, capacitor & LM2596 -based DC-DC -variable step-down power supply – in short VAC->VDC transformer + psu, if you steal current from the 24VAC electric lock – not part of this exercise)
- 3G/4G -(usb)dongle & subscription
Stage 1 (memory card):
Raspberry Pi got the newest Raspbian Jessie, which was at the moment in version 2017-06-21. Kernel for the distribution is 4.9.28-v7+.
Stage 2 (assembly):
- detach controller from the TFT (TFT-enclosure required this)
- assemble the TFT enclosure
- attach the controller to the TFT, make sure both cables are in place
- drill holes to the bottom of RasPi enclosure (6mm drill), to use TFT -attachment points
- insert memory card to RasPi
- attach RasPi with it’s enclosure to TFT
- attach the cable from TFT to RasPi, along with 5V(pin4) and Gnd(pin6) with jumper wires
- attach NFC-reader with jumper wires to RasPi, you’ll use pins 1,3,5,11,12,15,16,19,21-26 (f.ex 3.3V, Gnd, i2c & SPI)
(Explore NFC Board Schematic)
- attach relay card module to RasPi, relay needs ~80mAh of current so take note of this when deciding the PSU
pins 2 (5V -> VCC), 7 (GPIO -> In1) and 9 (Gnd -> Gnd) are needed
- attach the relay between the another power cable going to the electric lock
Stage 3 (software):
Reader uses SPI, so enable SPI at raspi-config. TFT will rotate by adding display_rotate=1 (90 degrees) or display_rotate=3 (270 degrees) to /boot/config.txt – and console font can be made bigger with dpkg-reconfigure console-setup.
For actual use you need a small stack of software. Relay module must be controller (to open/close door) and NFC-card must be read and validated against some user database. And unless you want to keep the user database up-to-date by hand, there should be something for that also…
My solution was a simple python-service, which reads the NFC-card, validates is against data in MariaDB and after that tells the result on screen & activates the relay if necessary. Almost up to date code can be found at https://macronet.fi/dev/nfc/ (maybe later at github also) – it might work, or not.
Library used for reading the NFC-card is nxppy -that and all other requirements are easy to install:
# sudo apt install python-dev python-pip python-mysqldb cmake mariadb-server-10.0
# pip install nxppy
Stage 4 (installation):
Install the system to the place you want, so that you can show a card to the reader. This might need some cables if you want to take the reader further away – please make note that the reader requires 14 wires (haven’t actually tested if it works without i2c, because it uses SPI) so it’s like 2 cat5e cables.
Stage 5 (why internet connection? and then what?)
Make RasPi to call home/VPN, so that you are able to fix problems remotely.
Or “forget” a wireless keyboard receiver to USB-port and use your new NFC-enabled access control system as an IRC-client.