Difference between revisions of "RFID entry system"

From i3Detroit
Jump to: navigation, search
(Hardware)
(Software)
Line 5: Line 5:
 
==Software==
 
==Software==
 
The original code is here: http://www.accxproducts.com/wiki/index.php?title=Open_Access_3.0
 
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
 
Whole git repository

Revision as of 20:45, 5 April 2013

Contents

Description

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...

Documentation

Software

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

https://github.com/abzman/RFID-entry-system


New library written to control SCC 1080

https://github.com/abzman/RFID-entry-system/tree/master/libraries/SCC_1080


Modified sketch to get information about sd card

https://github.com/abzman/RFID-entry-system/tree/master/CardInfo2


Modified sketch to dump readme.txt from sd card

https://github.com/abzman/RFID-entry-system/tree/master/DumpFile2


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

https://github.com/abzman/RFID-entry-system/tree/master/RFID_test


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

https://github.com/abzman/RFID-entry-system/tree/master/RTC_test


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

https://github.com/abzman/RFID-entry-system/tree/master/RS485_test


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

https://github.com/abzman/RFID-entry-system/tree/master/RS485_mdb_test


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

https://github.com/abzman/RFID-entry-system/tree/master/RS485_mdb_test2


Example using SCC-1080

https://github.com/abzman/RFID-entry-system/tree/master/RS485_mdb_test3


Example using SCC-1080 as a telnet client

https://github.com/abzman/RFID-entry-system/tree/master/RS485_mdb_test4


Non-functional SCC 1080 read test (early)

https://github.com/abzman/RFID-entry-system/tree/master/rs485_read_test


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

https://github.com/abzman/RFID-entry-system/tree/master/rs485_read_test2


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

https://github.com/abzman/RFID-entry-system/tree/master/rs485_read_test3


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

https://github.com/abzman/RFID-entry-system/tree/master/rs485_mdb_read_test


Failed (for now) attempt to poll for key presses

https://github.com/abzman/RFID-entry-system/tree/master/rs485_mdb_read_test2

Hardware

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 Parallel port
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 D0
49 Digital 23 D1
50 Digital 24 D2
51 Digital 25 D3
52 Digital 26 D4
53 Digital 27 D5
54 Digital 28 D6
55 Digital 29 D7
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 /Line Feed
67 Digital 41 Error
68 Digital 42 Reset
69 Digital 43 Ack
70 Digital 44/PWM /Busy
71 Digital 45/PWM Paper Out
72 Digital 46/PWM Select
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 Gnd
81 Gnd Gnd

Design Specs

Hardware

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

Software

  • 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)

TODO

Finalize design document

Software

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

Electrical

  • 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.

Chassis

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

Data

  • 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.