Megadoor

From Makers Local 256
Jump to: navigation, search

Creator:
hfuller
Status:
NFC Auth Implimented
Born On:
17:28, 23 February 2016 (CST)
Last Updated:
08:48, 02 August 2021 (CDT)

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

Door lock 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

Original breadboarded system

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.

http://www.digikey.com/product-search/en/programmers-development-systems/evaluation-and-demonstration-boards-and-kits/2622039?k=AT90USB647