Difference between revisions of "RFID entry system"

From i3Detroit
Jump to: navigation, search
Line 24: Line 24:
Sketch to read from the RTC, commented out lines to set RTC
Sketch to read from the RTC, commented out lines to set RTC
New library written to control SCC 1080
Example using SCC-1080
Example using SCC-1080 as a telnet client (not useful without ethernet shield)
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)
Line 51: Line 32:
Working printer test, takes serial in and outputs to the parallel port
Working printer test, takes serial in and outputs to the parallel port
Broken, or otherwise outdated
Sketch to test RFID reader, outputs on serial and http web page at (not useful without ethernet shield)
Failed (for now) attempt to poll for key presses
Non-functional SCC 1080 read test (early)
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)

Revision as of 12:30, 29 June 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 a beagle bone (or pi), 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

Parallel port documentation: http://nemesis.lonestar.org/reference/computers/interfaces/centronics.html

Whole git repository [[1]]

Library I borrowed from http://awtfy.com/ and modified slightly to parse comands [[2]]

Current best working code [[3]]

Sketch to read from the RTC, commented out lines to set RTC [[4]]

Sketch to test RFID reader, outputs on serial [[5]]

Working printer test, takes serial in and outputs to the parallel port [[6]]


OpenAccess Control v3.0 (6 relays populated)

Arduino Mega 2560

Static Controls Corporation 1080 display (RS485)

Generic Wiegand RFID reader

EM4100 card reader, outdoor with keypad

Dot matrix printer (Panasonic KX-P1124)

Arduino Mega pin usage
Arduino Mega Open Access Parallel port
0 Reset Reset button
1 3.3v
2 5v 5v
3 Gnd Gnd
4 Gnd Gnd
5 Vin
6 Analog 0 Alarm 0
7 Analog 1 Alarm 1
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/USB serial
23 Digital 1/PWM/TX0/USB serial
24 Digital 2/PWM/interrupt 0 Reader 2, D0
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 Exit button (to ground)
32 Digital 10/PWM
33 Digital 11/PWM
34 Digital 12/PWM
35 Digital 13/PWM/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 /Strobe
66 Digital 40 /Busy
67 Digital 41 D0
68 Digital 42 D1
69 Digital 43 D2
70 Digital 44/PWM D3
71 Digital 45/PWM D4
72 Digital 46/PWM D5
73 Digital 47 D6
74 Digital 48 D7
75 Digital 49
76 Digital 50/MISO
77 Digital 51/MOSI
78 Digital 52/SCK
79 Digital 53/SS
80 Gnd Gnd Gnd
81 Gnd Gnd

Design Specs


Open Access Control with Ethernet shield and mods
  • Inside
    • Arduino mega 2560
    • Open Access Control 3.0
    • BeagleBone (pi for now)
    • 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)
    • Dot matrix printer (Panasonic KX-P1124)
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 RTC setting
  • Post example code for CSV parsing
  • get buttons working properly as input on the SCC 1080s


  • Work out light and sound outputs
  • Work out power supply status and door magnet status inputs
  • Populate remaining relays
  • Populate second Open Access board
  • 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.