NFC Scanner voor toegangscontrole


 

Deuren en Sloten

Omdat ik al geruime tijd de deuropeners had geautomatiseerd, lag het voor de hand om een toegangssysteem te bouwen wat automatisch de deuren opende als een bevoegd iemand voor de deur stond. Ik heb verschillende methoden bekeken:
  • gezichtsherkenning
  • vingerafdrukscanner
  • RFID en/of de opvolger, NFC

Toen ik de kans kreeg om goedkoop een aantal NFC/RFID scanners aan te schaffen, ben ik met het laatste idee aan de haal gegaan. Het bleek redelijk makkelijk om zowel met Arduino als onder Python de 'tags' uit te lezen:

Arduino: 

Hierbij gebruik ik de Adafruit PN532 library, die zowel SPI als I2C ondersteunt; ik gebruik i2c.

#include <Adafruit_PN532.h>
#define PN532_IRQ   (2)
#define PN532_RESET (3)

Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

void setup(void) {

  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }

  nfc.SAMConfig();
}

void loop(void) {
  uint8_t success;                         
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; 
  uint8_t uidLength;                       
  bool authenticated = false;

success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);

nfc.PrintHex(uid, uidLength);

}    

Python:

Hierbij gebruik ik de py532 library (https://pypi.org/project/py532lib/)
 
#!/usr/bin/python3
from py532lib.i2c import *
from py532lib.frame import *
from py532lib.constants import *
from py532lib.mifare import *
 
#pn532 = Pn532_i2c()
pn532 = Mifare()
pn532.SAMconfigure()
pn532.set_max_retries(MIFARE_SAFE_RETRIES)

while True:
  card_uid = pn532.scan_field()
  if card_uid:
    address = pn532.mifare_address(0,1)
    try:
      pn532.mifare_auth_b(address,MIFARE_FACTORY_KEY)
      try:
        data = pn532.mifare_read(address)
        pn532.in_deselect()
        uid_string=""
        for i in card_uid:
          uid_string+='%x' % i
        print(uid_string)
      except:
        print("read error")
    except:
      print("auth error") 
 

 Opzet toegangscontrole

Uiteindelijk heb ik voor het bouwen van de NFC-scanner een raspberry pi W gebruikt, omdat het in Python nog iets makkelijker was om dit te bouwen (hier had ik al ervaring mee bij het bouwen van een LEDmatrix sturing, en omdat de Raspberry pi W klein genoeg was om in een geschikte buitenbehuizing te bouwen.
De 'slimme deurbel' bestaat uit de volgende componenten:
  • Een knop voor de deurbel
  • Een NFC scanner, geplaatst direct achter de plastic behuizing
  • Een raspberry pi cameramodule via een klein, afgeschermd gaatje in de behuizing
  • Een voedingsmodule, bestaande uit een brugcel met condensator, met daarachter een DC-DC converter om naar 5V te converteren voor de Raspberry pi

Reacties

Populaire posts van deze blog

Automatisering in Home Assistant