**S**imple **N**etwork**A**ble **R**FID **C**ontroller

SNARC is a board developed by Lawrence “Lemming” Dixon for HSBNE and for other people or groups who are interested in a cheap and easy to implement RFID based access control system.

The board is designed to be as simple as possible to implement, but also as flexible as possible. It uses an ATMega 328p micro-controller hooked to a Wiznet wiz820io Ethernet module. All the pins of the ATMega are either used on-board for various functions or broken out to various headers around the board. Functionally the board is very similar to an Arduino, it can be used for a basic locally authenticated RFID system, or it can be a fully networked access control system with other sensors attached to the board for data logging or environmental monitoring. The board is also quite small at 40mm x 65mm (some components overhang the edges slightly) Approximate height of the board is about 25mm to the top of the tallest component.

The on-board functions are:

  • ATMega 328p Micro-controller with 32KB Flash, 2KB SRAM and 512B EEPROM. Same as the one on an Arduino
  • Socket for Wiz820io SPI Ethernet Module. This module uses the newer W5200 chip from Wiznet, it is implemented in the same fashion as the Arduino Ethernet shield. Please be aware there is a newer library for it. It's attached at the bottom of the page. Pins 5, 15, 16, 17, 18 & 19 are connected (Arduino pins 3, 9, 10, 11, 12 & 13) to the two sockets for this module. Pin 5(D3) is used as an interrupt to allow the Ethernet module to signal that there is traffic waiting. Pin 15(D9) is used to optionally power down the Ethernet module if you want to. Pins 16, 17, 18 & 19 (D10 - D13) are the SPI pins used for serial communication with the module.
  • N Channel MOSFET output on pin 6 of the ATMega, if you are using the Arduino IDE it is Digital Pin 4. This is connected directly across the main power rails on the board, so will switch the input voltage (Vcc) across the 2 pins on the screw terminals. There is a 1n4004 Diode behind this to catch any inductive spikes at switch off.
  • RFID header. For an RFID reader or other TTL serial device. This is attached to the UART on the ATMega. If you need to use these pins for another purpose, RX maps to pin 2/digital pin 0. TX maps to pin 3/digital pin 1. Pins are labeled.
  • Status LED's. There are two Status LED's on the board. 1 Red and 1 Green. These are attached to pins 11 and 12. These map to Digital pins 5 and 6 for an Arduino. You turn on the respective LED's by writing the pin high. Pin 11 is the red LED, pin 12 is the green LED.
  • E-Stop header. This is attached to pin 4/Digital pin 2. This is for using the board in an access control scenario in a machine shop. Pin 1 is connected to one of the two interrupt pins on the ATMega to allow it to be used to interrupt other operation and switch things off as fast as possible. The 2nd pin is connected to ground. You will need to write the pin high after setting it as an input so the internal pull up resistor is enabled in the ATMega. Pin 1 is marked with a small “1” on the board.
  • On-board Vreg's. There are two voltage regulators on the board, one 5v running off the main power rail, and one 3.3v running from the output of the 5v regulator. The 5 volt regulator is designed for a wide input voltage and can handle upto 24v input, but will need to be heatsinked at anything above 12v. It is capable of upto 1A, but this varies with the input voltage. The 3.3v regulator is rated to 500mA, but please keep in mind this is being drawn from the 5V line. Power needs for the board about 400mA on the 5v line, 200mA of this is to run the Ethernet module. These voltages can be accessed at the marked Vio header, there is also 5v on the ICSP, D7 D8 & RFID headers.
  • ICSP header. This can be used to program the board and is used to load the Arduino bootloader on to the board at manufacturing time. This can also be used to access the SPI bus, Pin1 is marked with a small “1” on the board.
  • FTDI header. Again this is used as a programming interface. Standard FTDI pinout, pin 1 is marked with a small 1 on the board.
  • GPIO. The “AREF - A5” header located between the MoSFET outputs and the ATMega. These map exactly as the names would suggest. AREF - A5 is connected to the 6 ADC pins on the ATMega, the first pin of this header is also the AREF pin. Pin 1 is again marked with a small “1” on the board. The analogue pins are here only as a convenience, I would not recommend relying on them for supreme accuracy. They can also be used as digital IO pins.
  • Soft Serial Header. This header breaks out pins 13 and 14 of the ATMega, (D7 and D8 in Arduino IDE), the other two pins on the header are 5v and GND. This allows for you to plug in another serial device and use it as a soft serial interface. If not used as soft serial it can be used as standard GPIO. Pins are labeled.
  • Reset button. This should be pretty self explanatory, this will reset the ATMega and the Wiz820io module at the same time.

Schematic Diagram

Schematic Diagram SNARC

SNARC First Prototype powered and running code.

FIRMWARE for this Hardware can now be found here: ( it's Arduino Compatible ! )

There are currently three different possible “usage” scenario/s supported by this firmware: Overview: (1) Standalone system, with fixed list of pre-programmed keys. Static key-list is programmed at the same time as the firmware. (2) Standalone system, with “console” interface that allows programming new key/s on-demand via the USB inteface. (3) Network-enabled system, which queries a centralised “authentication server” ( written in PHP or similar ) on demand to verify key/s, and cache/s them locally after first use for reliability.


  • The first batch of boards that use a 328-PU instead of the 328P have a known ERRATA:
  • You can recognise these boards as they have the MOSFET at right angles to the Vreg's
  • When programming via the ICSP header , you need to edit your avrdude.conf as per the following link before it will work:
  • If you instead use the 5V/RX/TX/GND header to connect to an FTDI cable, then you can use the pre-programmed bootloader without any need for the above change. ( just like early arduino's, you'll need to press reset buttton during upload process to trigger the bootloader unless you also connect the reset wire to the reset button. More details for the break-out for FTDI interface is pending.
  • If you wish to do a one-off re-program of the bootloader (via ICSP) , you will need to make the change above ( to avrdude.conf) as per the ICSP, then program the duelonomove bootloader from the Arduino IDE, and afterwards change the avrdude.conf back to its original afterwards.


  • On these boards the MOSFET is connected to pin 23/Analogue 0. If using the Arduino IDE this can be addressed as D14.