Megadoor
Creator: |
Contents
Overview
"I don't even know how this happened." - ctag
We're making yet another door auth system. This one will use microcontrollers and NFC.
Deployments
This is currently deployed on the front and back doors without the secondary CPU necessary for NFC interaction. The NFC component will eventually be reworked into a stand-alone unit that can trigger an arbitrary door backpack. Either deployment is controllable from makerbaker.
Hardware
Portable Tester
Has an LED wired in as the door lock. Opening the door blinks the LED.
V2.0
Coming soon.
Features:
- Single/cleaner breadboard circuit
- 32KB external EEPROM for user credentials
- Lasercut wall mount
V1.0
Hacked together by hfuller and ctag during a two-day sprint. Reads the NFC antenna on the front door and unlocks when a valid card is present. USB authentication is patched through from the original Pi for now.
ATmega DIP Pin | Arduino Pin | Function/Connection |
---|---|---|
15 | D9 | Door Unlock Transistor |
28 | A5 | NFC -> SCL |
27 | A4 | NFC -> SDA |
12 | D6 | NFC -> IRQ |
11 | D5 | NFC -> RST |
Software
Oh boy.
Variable Sizes
int: 2 uint8_t: 1 uint16_t: 2 uint32_t: 4 uint64_t: 8
EEPROM
For reference: from EEPROM.h
//Basic user access methods. EERef operator[]( const int idx ) { return idx; } uint8_t read( int idx ) { return EERef( idx ); } void write( int idx, uint8_t val ) { (EERef( idx )) = val; } void update( int idx, uint8_t val ) { EERef( idx ).update( val ); } //STL and C++11 iteration capability. EEPtr begin() { return 0x00; } //Standards requires this to be the item after the last valid entry. //The returned pointer is invalid. EEPtr end() { return length(); } uint16_t length() { return E2END + 1; }
NFC
USB
SIAM32 USB HC
A fascinating student project to implement USB Host Control for Atmega32 systems.
With some help from friends on IRC, the code compiles, but is in somewhat bad shape, and only targets atmega32 and not atmega328p which is what we have.
USB Host Shield
We could buy a USB Shield. It feels like cheating, but is also the most feasible option right now. Also kinda pricey.
https://github.com/felis/USB_Host_Shield_2.0
https://www.circuitsathome.com/products-page/arduino-shields
USB Host Library
We could try one of the USB software libraries for the ATmega328 line of controllers. These all seem to target the chip as the downstream device, rather than the Host Controller.
https://www.obdev.at/products/vusb/index.html
http://www.fourwalledcubicle.com/LUFA.php
https://dicks.home.xs4all.nl/avr/usbtiny/
AT90USBKEY2
We could buy a board specifically designed for USB Host development. Compatible with the LUFA library listed above. This could either replace the atmega328p, or work ancillary to it.