Difference between revisions of "RFID entry system"

From i3Detroit
Jump to: navigation, search
Line 79: Line 79:
Failed (for now) attempt to poll for key presses
Failed (for now) attempt to poll for key presses

Revision as of 01:24, 5 April 2013


This system will replace the current one, it is projected to be network connected and control all entry and exit through the front door. It is based around an arduino mega 2560, Open Access Control 3.0, and an ethernet shield, allowing the logging of everything to do with the door. The network connectivity means easy integration with proposed EMS/Fire emergency buttons. This also means integration with the CRM for automatic control of access, easy new user addition, reporting of failed entry attempts, reporting of power outages, etc...



The original code is here: http://www.accxproducts.com/wiki/index.php?title=Open_Access_3.0

Whole git repository


New library written to control SCC 1080


Modified sketch to get information about sd card


Modified sketch to dump readme.txt from sd card


Sketch to test RFID reader, outputs on serial and http web page at


Sketch to read from the RTC, commented out lines to set RTC


Early test of SCC 1080 displays, single connection mode (surpassed by later RS485_mdb_test3/4)


Early test of SCC 1080 displays, mdb mode (surpassed by later RS485_mdb_test3/4)


Early test of SCC 1080 displays, mdb mode (surpassed by later RS485_mdb_test3/4)


Example using SCC-1080


Example using SCC-1080 as a telnet client


Non-functional SCC 1080 read test (early)


Reads key presses using polling loop in full duplex mode (single unit)


Reads key presses using polling loop in full duplex mode (mdb)


Reads key presses using polling loop in full duplex mode (mdb, 2 displays)


Failed (for now) attempt to poll for key presses



OpenAccess Control v3.0 (6 relays populated)

Arduino Mega 2560

off-brand Wiznet W5100 ethernet shield (pin 4 re-mapped to pin 11, SPI wired around Open Access Shield to pins 50, 51, 52)

Static Controls Corporation 1080 displays (RS485)

Generic Wiegand RFID reader

EM4100 card reader, outdoor with keypad

Backlit 2x16 HD4470 parallel character LCD

Pay phone keypad

Arduino Mega pin usage
Arduino Mega Open Access Ethernet/SD
0 Reset Reset button (covered by ethernet shield) Reset button
1 3.3v 3.3v
2 5v 5v 5v
3 Gnd Gnd Gnd
4 Gnd Gnd Gnd
5 Vin
6 Analog 0 Alarm 0 full size SD WP, unused but pulled up to 5v
7 Analog 1 Alarm 1 full size SD CD, unused but pulled up to 5v
8 Analog 2 Alarm 2
9 Analog 3 Alarm 3
10 Analog 4 Alarm 4
11 Analog 5 Alarm 5
12 Analog 6 Alarm 6
13 Analog 7 Alarm 7
14 Analog 8 Alarm 8
15 Analog 9 Alarm 9
16 Analog 10 Alarm 10
17 Analog 11 Alarm 11
18 Analog 12 Alarm 12
19 Analog 13 Alarm 13
20 Analog 14 Alarm 14
21 Analog 15 Battery Voltage monitor (has a 4:1 voltage divider)
22 Digital 0/PWM/RX0
23 Digital 1/PWM/TX0
24 Digital 2/PWM/interrupt 0 Reader 2, D0 Optional solder jumper "int" to get interrupts from the W5100
25 Digital 3/PWM/interrupt 1 Reader 2, D1
26 Digital 4/PWM Reader 2, LED1
27 Digital 5/PWM Reader 2, LED2
28 Digital 6/PWM Reader 2, Buzzer
29 Digital 7/PWM Reader 1, Buzzer
30 Digital 8/PWM Reader 1, LED2
31 Digital 9/PWM
32 Digital 10/PWM SS(ethernet)
33 Digital 11/PWM SS (SD) (I moved it from Digital 4 to avoid conflict)
34 Digital 12/PWM
35 Digital 13/PWM/LED Yellow LED
36 Gnd
37 Aref
38 Digital 14/TX3 RS485 TX
39 Digital 15/RX3 RS485 RX
40 Digital 16/TX2 RS485 transmit/receive
41 Digital 17/RX2 Reader 1, LED1
42 Digital 18/TX1/interrupt 5 Reader 1, D1
43 Digital 19/RX1/interrupt 4 Reader 1, D0
44 Digital 20/SDA/interrupt 3 SDA (RTC/AT24C1024)
45 Digital 21/SCL/interrupt 2 SCL (RTC/AT24C1024)
46 5v 5v
47 5v 5v
48 Digital 22
49 Digital 23
50 Digital 24
51 Digital 25
52 Digital 26
53 Digital 27
54 Digital 28
55 Digital 29
56 Digital 30
57 Digital 31 Relay 0 through ULN2803
58 Digital 32 Relay 1 through ULN2803
59 Digital 33 Relay 2 through ULN2803
60 Digital 34 Relay 3 through ULN2803
61 Digital 35 Relay 4 through ULN2803
62 Digital 36 Relay 5 through ULN2803
63 Digital 37 Relay 6 through ULN2803 (unpopulated relay)
64 Digital 38 Relay 7 through ULN2803 (unpopulated relay)
65 Digital 39
66 Digital 40
67 Digital 41
68 Digital 42
69 Digital 43
70 Digital 44/PWM
71 Digital 45/PWM
72 Digital 46/PWM
73 Digital 47
74 Digital 48
75 Digital 49
76 Digital 50/MISO MISO (wired manually because Open Access does not pass ICSP)
77 Digital 51/MOSI MOSI (wired manually because Open Access does not pass ICSP)
78 Digital 52/SCK SCK (wired manually because Open Access does not pass ICSP)
79 Digital 53/SS Has to be set as output (can't be used for anything else?)
80 Gnd Gnd
80 Gnd Gnd

Design Specs


Open Access Control with Ethernet shield and mods
  • Inside
    • Arduino mega 2560
    • Open Access Control 3.0
    • Knock off ethernet shield (rewired for compatibility with Open Access)
    • SCC 1080
    • Big blinking light
    • Buzzer/siren
    • Exit button
    • Power supply (signal about whether or not it's on)
    • Door magnet (actuator and feedback pin)
SCC 1080 display
  • Outside
    • SCC 1080
    • RFID reader at pocket height
    • RFID reader with keypad at... keypad height
Whole system
  • Outside alternate proposal
    • Backlit 2x16 HD4470 parallel character LCD
    • Pay phone keypad
    • RFID reader at pocket height
    • RFID reader at keypad height


  • Logging
    • Where to log
      • Inside display (file navigable by arrows)
      • Log file on SD card (periodically uploaded to server [daily?])
      • Dot matrix printer near door (easy to convert serial to parallel with bit masks)
    • What to log
      • Startup
      • Successful/failed entry
      • Card temp ban (three failed entry attempts)
      • Successful/failed new user
      • Successful/failed CSV push/pull
      • Successful/failed log file push/pull
      • Card space almost full
      • Log file deleted
      • Button pressed to exit the building
      • Goes into/out of event mode
      • Periodic voltage measurements
      • Voltage drops below threshold
    • How to log
      • log file named with current rtc date at the beginning of the day
      • Append all day long
      • Push at the end of the day
      • Delete x-days old files
      • Start new file with new date (automatically)
      • Same subroutine logs to lpt port
      • LCD is basically a browser for the log file on the SD card
  • RTC
    • Used for logging and daily tasks
    • Set by NTP if possible
  • Doorbell function
    • Sets off buzzer when button (enter?) is pressed
    • Opens door when in event mode
  • User database
    • CSV on SD card
    • Pulled from CRM on command (telnet)
    • Keep at least all the user databases from the last 24 hours
    • Fields in CSV
      • Name
      • Privilege byte (determines certain powers, like event mode)
      • PIN salted with card id (and maybe date?) MD5 hashed
      • Maybe store card id to allow personalized greeting
  • Card swiped procedure
    • Print personalized greeting; "hello <name>" if we decide to store card id in CSV
    • Prompt for PIN
    • Asterisks display on screen
    • <esc> backspaces
    • End with <enter>
    • If invalid prompt again
    • If 3 failed entries call/text/e-mail owner of card and/or administrator
  • New user add procedure
    • Push used database CSV with new user name and priv byte
    • Wait for timeout (10 minutes?)
      • If not timed out, next card not in system is assigned to blank user
        • If more than one blank user prompt with "hello <name>", escape to go to next blank user
      • If timeout revert database
    • Prompt for pin
    • Again
      • If succeed
        • Welcome
        • Push CSV back to server
      • If failed prompt to retry (enter vs escape)
      • If no retry revert database
  • FTP push and pull
    • Push log files
    • Pull user database
    • Push user database
    • Since the arduino can more easily be a client than a server, it will be commanded to pull by telnet
  • Telnet login
    • Prompt for username and password
    • Hash them and check against admin.txt on sd card
    • If successfull, get a command
      • Pull FTP file
      • Go into a special mode
      • Dump log files
      • Dump CSV
      • etc...
  • Battery voltage
    • Check every couple of minutes minimum
    • If below threshold turn on light, alarm, something
    • Log voltage (even if normal) every day
  • Power supply
    • If power goes out trigger alarm, maybe alert server
  • Exit button
    • Press it to exit building, unlocks door for 5(?) seconds
  • Door magnet
    • Monitor if magnetic field is down when it shouldn't be
    • If it is, alarm server, audible/visual alarm, send e-mail, etc...
  • Send e-mail
    • FTP a file to server containing error message and who to e-mail
    • cron job on server picks it up and sends it out
  • Call people
    • FTP a file to server containing error message and who to call
    • cron job on server picks it up and voip and espeak(?) calls people
  • Failure modes
    • Server hosed, able to dump CSV and log files
    • New reader, blank sd card, FTP pull CSV
    • No server present, keep logging until card size reached, then delete oldest logs
    • No sd card present, let server handle card id and pin hashing and send back what to do
    • No sd or server, use eeprom to read board members' card id, pin, and name (maybe)


Finalize design document


  • Post example code for NTP
  • Post example code for CSV parsing
  • Post example code for MD5
  • Determine network protocol to use
  • get buttons working as input on the SCC 1080s


  • Work out light and sound outputs
  • Work out power supply status and door magnet status inputs
  • Do something electrically sensible with the keypad's row/col pins, so they can be (opto?)isolated as they come inside.


  • Design/select interior mounting box
  • Design/select exterior mounting box


  • Figure out a mapping between the printed 65535:65535 format used by the existing keypad (and the CRM) and individual bits in the Wiegand message.