Difference between revisions of "RFID entry system"

From i3Detroit
Jump to: navigation, search
(Software)
(Software)
Line 581: Line 581:
 
* write code for user database download
 
* write code for user database download
 
* write code for logging things
 
* write code for logging things
 +
* write code for sending out e-mails/phonecalls based on errors
  
 
==Electrical==
 
==Electrical==

Revision as of 18:32, 30 June 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 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...

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 [[1]]


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


Current best working code [[3]]


Test of the keypad matrix scanner based on a 4017 [[4]]


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


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


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


Old test of the 595 based 44780 [[8]]

Hardware

OpenAccess Control v3.0 (6 relays populated)

Arduino Mega 2560

HD44780 on a 74hc595

pay phone keypad on a 4017 matrix scanner

Generic Wiegand RFID readers

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

Hardware

Open Access Control with Ethernet shield and mods
  • Inside
    • Arduino mega 2560
    • Open Access Control 3.0
    • BeagleBone
    • 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
    • Backlit 2x16 HD4470 parallel character LCD
    • Pay phone keypad
    • RFID reader at pocket height
    • RFID reader at keypad height
Whole system

Software

  • Logging
    • Where to log
      • Serial to log file on beaglebone (periodically uploaded to server [daily?])
      • Dot matrix printer near door
    • What to log
      • Startup
      • Successful/failed entry
      • Card temp ban (three failed entry attempts)
      • Successful/failed new user
      • Successful/failed user database (EEPROM) push/pull
      • Beaglebone space almost full
      • Log file deleted
      • Button pressed to exit the building
      • Goes into/out of doorbell mode
      • Goes into/out of door hold mode
      • Periodic battery 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
  • RTC
    • Used for logging and daily tasks
    • Set by NTP
  • Doorbell function
    • Sets off buzzer when button (#) is pressed
    • Opens door when in event mode
  • User database
    • EEPROM
    • Pushed from beaglebone CRM
    • Keep at least all the user databases from the last 24 hours on the beagle bone
    • Fields in CSV
      • Name
      • Privilege byte (determines certain powers, like event mode)
      • PIN salted with card id MD5 hashed
  • Card swiped procedure
    • Swipe card
    • Print greeting; "welcome"
    • Wait for timeout (1 minute)
    • Prompt for PIN
    • Asterisks display on screen
    • <*> backspaces
    • End with <#>
    • If invalid prompt again
    • If 3 failed entries prompt beaglebone to call/text/e-mail owner of card and/or administrator
  • New user add procedure
    • Card in existing card from someone who can add new users
    • Press specific button (5) while the door is unlocked to add new user
    • Swipe new card
    • Wait for timeout (1 minute)
      • If timeout do nothing
    • Enter new PIN
    • Press <#>, open door
    • Card added with priv byte 1 in an availible spot
        • Push user to beaglebone to push back to CRM
  • 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...
  • Failure modes
    • Server hosed, able to dump user database and log files from beaglebone
    • New reader, blank eeprom, populate from beaglebone
    • No server present, keep logging until beaglebone size reached, then delete oldest logs
    • No eeprom present, only hardcoded hashes in the code work

TODO

Finalize design document

Software

  • write code for NTP RTC setting
  • write code for user database upload
  • write code for user database download
  • write code for logging things
  • write code for sending out e-mails/phonecalls based on errors

Electrical

  • 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 and LCD pins, so they can be (opto?)isolated as they come inside.

Chassis

  • Design/select interior mounting box
  • Construct 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.