Publicerad Lämna en kommentar

Enkelt låssystem med NFC Shield för Arduino

Om man vill använda sitt chip till något som det inte finns någon lösning för är det inte omöjligt att man själv kan bygga en lösning för problemet. Har man motivationen och kan lite elektronik och programmering kan man komma ganska långt. Då behöver man bara hårdvaran. Vi kommer skriva om den hårdvara som finns i dagsläget på marknaden och som antingen fungerar bra eller åtminstone hyfsat bra med chippen, och vi börjar med läsaren som kallas för NFC Shield V2.1. Detta är en (som kan tolkas ur namnet på den) en NFC (13,56 MHz) shield för Arduino och har utvecklats av Seeed Studio. Det är open source hårdvara så dokumentationen för läsaren är väldigt bra. Det är en läsare som fungerar ovanligt bra med chippen NTAG216 och Mifare Classic. Eftersom det är en shield finns det inte mycket att tänka på för att komma igång, och en annan bra grej med den här shielden är att själva antennen hänger löst i en tråd, så det är lättare att placera den på ett sätt som passar ens tilltänkta användningsområde bättre. Här visar vi hur du kan använda denna shield för att läsa av ett chip (eller en nyckeltagg/kort) för att sedan tända en LED, baserat på om id-numret på chippet stämmer med det numret som finns sparat i koden. Istället för att tända en LED skulle man självklart kunna låsa upp ett lås istället. Denna applikation finns även beskrivet på dokumentation-sidan för shielden.

NFC shield för Arduino
NFC Shield V2.1 från Seeed Studio.

Hårdvara och material

  • 1 st Arduino (vilken modell som helst, förutom Intel Edison)
  • 1 st NFC Shield V2.0 eller V2.1
  • 1 st Kopplingsplatta
  • 2 st LED (förslagsvis en röd och en grön)
  • 2 st 1kΩ resistor
  • Kopplingstråd

Installera nödvändiga programbibliotek

Innan vi börjar koppla ihop allting behöver vi installera några programbibliotek. Om du inte redan har installerat Arduinos IDE kan du ladda ned det här och installera enligt instruktionerna för ditt operativsystem (det finns även en online-editor, men jag har inte testat den). Sedan behöver vi ladda ned programbiblioteken för att kunna använda NFC shielden.

  1. Stäng ned IDEn om det inte redan är nedstängt
  2. Ladda ned zipfilen programbiblioteket för PN532 och extrahera filerna.
  3. Kopiera mapparna för PN532, PN532_HSU, PN532_SPI, and PN532_I2C till mappen i din Arduino-mapp som heter libraries.
  4. Ladda ned Dons NDEF programbibliotek och extrahera filerna.
  5. Byt namn på mappen NDEF-master till NDEF och kopiera även denna mapp till mappen libraries i din Arduino-mapp.
  6. Starta nu Arduinos IDE. Nu ska du kunna se NDEF och PN532 som alternativ under File > Examples.

Läsa av ett chip med NFC Shield

Nu kan vi ta reda på vilket id-nummer som ditt chip har, och därefter kan vi spara den i koden och jämföra med det id-numret som vi kommer läsa från ditt chip. Sätt ihop din shield och sätt den på din Arduino, om det inte redan levereras som ett färdigt paket. Kopiera sedan koden nedan till din Arduino IDE och ladda upp koden till din Arduino.

#include <SPI.h>
#include "PN532_SPI.h"
#include "PN532.h"
#include "NfcAdapter.h"

PN532_SPI interface(SPI, 10); // create a PN532 SPI interface with the SPI CS terminal located at digital pin 10
NfcAdapter nfc = NfcAdapter(interface); // create an NFC adapter object

void setup(void) {
 

Serial.begin(115200); // begin serial communication
    Serial.println("NDEF Reader");
    nfc.begin(); // begin NFC communication
}

void loop(void) {

    Serial.println("\nScan an NFC tag\n");
    if (nfc.tagPresent()) // Do an NFC scan to see if an NFC tag is present
    {
        NfcTag tag = nfc.read(); // read the NFC tag into an object, nfc.read() returns an NfcTag object.
        tag.print(); // prints the NFC tags type, UID, and NDEF message (if available)
    }
    delay(500); // wait half a second (500ms) before scanning again (you may increment or decrement the wait time)
}

Sedan behöver du göra följande:

  1. Öppna Serial monitor-fönstret under Verktyg > Seriell Monitor.
  2. Sätt baudrate till 115200.
  3. Håll nu läsarens antenn mot ditt chip. Id-numret på chippet och annan information kommer läsas av och printas ut i monitorn (se bilden nedan).
  4. Anteckna id-numret på chippet, vilket är markerat i bilden.

Dörrlåssystem med NFC Shield

Nu kan vi fortsätta med att bygga dörrlåssystemet. Det här är ett väldigt enkelt exempel. Systemet kommer läsa av id-numret av ett chip (eller kort) och jämföra det med ett id-numer som finns sparat i en variabel i koden. Om numret i variabeln stämmer överens med numret som finns på chippet kommer den gröna LEDn att blinka. Annars börjar den röda LEDn blinka.

Sätt ihop alla delar på enligt schemat nedan.

Kopplingsschema för Arduino
Kopplingsschema för enkelt dörrlåssystem. Bild från seeedstudio.com

Öppna sedan upp en ny sketch och kopiera in koden nedan:

    #include <SPI.h>
    #include "PN532_SPI.h"
    #include "PN532.h"
    #include "NfcAdapter.h"

    String const myUID = "1B B3 C6 EF"; // replace this UID with your NFC tag's UID
    int const greenLedPin = 3; // green led used for correct key notification
    int const redLedPin = 4; // red led used for incorrect key notification

    PN532_SPI interface(SPI, 10); // create a SPI interface for the shield with the SPI CS terminal at digital pin 10
    NfcAdapter nfc = NfcAdapter(interface); // create an NFC adapter object

    void setup(void) {
        Serial.begin(115200); // start serial comm
        Serial.println("NDEF Reader");
        nfc.begin(); // begin NFC comm

        // make LED pins outputs
        pinMode(greenLedPin,OUTPUT);
        pinMode(redLedPin,OUTPUT);

        // turn off the LEDs
        digitalWrite(greenLedPin,LOW);
        digitalWrite(redLedPin,LOW);
    }

    void loop(void) {

        Serial.println("Scanning...");
        if (nfc.tagPresent()) // check if an NFC tag is present on the antenna area
        {
            NfcTag tag = nfc.read(); // read the NFC tag
            String scannedUID = tag.getUidString(); // get the NFC tag's UID

            if( myUID.compareTo(scannedUID) == 0) // compare the NFC tag's UID with the correct tag's UID (a match exists when compareTo returns 0)
            {
              // The correct NFC tag was used
              Serial.println("Correct Key");
              // Blink the green LED and make sure the RED led is off
              digitalWrite(greenLedPin,HIGH);
              digitalWrite(redLedPin,LOW);

              delay(500);
              digitalWrite(greenLedPin,LOW);
              delay(500);
              digitalWrite(greenLedPin,HIGH);
              delay(500);
              digitalWrite(greenLedPin,LOW);
              // put your here to trigger the unlocking mechanism (e.g. motor, transducer)
            }else{
              // an incorrect NFC tag was used
              Serial.println("Incorrect key");
              // blink the red LED and make sure the green LED is off
              digitalWrite(greenLedPin,LOW);
              digitalWrite(redLedPin,HIGH);

              delay(500);
              digitalWrite(redLedPin,LOW);
              delay(500);
              digitalWrite(redLedPin,HIGH);
              delay(500);
              digitalWrite(redLedPin,LOW);
              // DO NOT UNLOCK! an incorrect NFC tag was used.
              // put your code here to trigger an alarm (e.g. buzzard, speaker) or do something else
            }
        }
        delay(2000);
    }

På rad 6 hittar du variabeln myUID. Ändra denna till ditt eget UID som du läste av i första delen. Ladda sedan koden till din Arduino. Öppna Seriell Monitor igen och läs först av ditt eget chip. Den gröna LEDn ska börja blinka. Läs sedan av till exempel ditt busskort. Den röda LEDn ska börja blinka.

Detta går sedan att bygga ut och koppla till exempel diverse lås. Resultatet går se i Youtube-videon nedan.

Publicerad Lämna en kommentar

Så installerar du libnfc på Ubuntu 18.04

NFC-läsaren ACR122U är en populär läsare som kan användas med programbiblioteket libnfc.

Programbiblioteket libnfc behövs för att kunna skriva till och läsa från bland annat ett Mifare-kort av typen som kallas för generation 1 (men kan göra mycket mer än så också). libnfc finns för alla vanligt förekommande operativsystem. Detta programbibliotek är möjligen det mest populära när man vill koppla en NFC-läsare till sin dator och använda den på olika sätt. Däremot var det länge sedan libnfc uppdaterades och de beskrivningar som finns av hur man installerar programbiblioteket börjar bli utdaterade. Det är inte helt självklart hur man faktiskt installerar den, och speciellt inte om man vill att den ska lira snällt med andra mjukvaror. I den här guiden kommer vi beskriva hur man installerar libnfc på Ubuntu 18.04 LTS på bästa möjliga sätt.

Vad du behöver

1. En dator med en Linux-distribution installerat (eller Windows med en virtuell maskin). I den här guiden använder vi Ubuntu 18.04.2 LTS.
2. En NFC-läsare, och vi rekommenderar ACR122U.

Ladda ned och installera libnfc

Man kan installera libnfc på flera olika sätt. Vi rekommenderar att man laddar ned den senaste utvecklingsversionen från GitHub och kompilerar koden själv. Vi följde instruktionerna för installation av libnfc som finns på denna sida, men det funkar inte att följa instruktionerna rakt av, så vi gjorde med några variationer som är beskrivet här nedan.

1. Ladda ned källkoden från GitHub.

2. Extrahera mappen från zipfilen.

3. Öppna terminalen och byt mapp till libnfc-mappen som du precis laddade ned och extraherade.

4. Se till att installera dh-autoreconf med

sudo apt-get install dh-autoreconf

5. Kör sedan autoreconf i den mappen där alla filer för libnfc finns med

autoreconf -v -i -s

6. Nu ska du köra ./configure. Men det finns vissa saker att tänka på innan du gör det. För det första kommer configure kontrollera att du har diverse andra programbibliotek installerade innan den skapar makefilen. Vi saknade doxygen. Det var bara att installera med sudo apt-get install doxygen.

Det andra man behöver tänka på är var man vill installera nfclib. Vi rekommenderar att man installerar enligt kommandot nedan då den binära filen bör hamna i en mapp som vanligtvis finns med i PATH-variabeln (då kan operativsystemet hitta det). Och konfigurationsfilerna hamnar i etc-mappen (vilket är standard). Om du är nöjd med detta kan du köra följande kommando

./configure --enable-doc --prefix=/usr --sysconfdir=/etc

Förhoppningsvis får du inga felmeddelanden. Om det kommer ett felmeddelande om att det saknas ett programbibliotek så kan du prova om du kan installera det med sudo apt-get install.

7. Kör kommandot make. Koden kommer nu att kompileras.

Testa om libnfc kan hitta läsaren och läsa ett kort
Innan vi forsätter installationen ska vi testa så att libnfc kan hitta läsaren och även läsa av ett kort. I mappen utils finns det verktyg för att testa dessa saker.

1. Sätt in din läsare i USB-porten och skriv i terminalen:

utils/nfc-scan-device -v

Du kommer troligen få ett felmeddelande i stil med:

Unable to claim USB interface (Device or resource busy)

Felmeddelandet innebär att en modul håller USB-gränssnittet upptaget. Följ instruktionerna nedan för att lösa problemet.

2. För att se vilken modul som hållet gränssnittet upptaget skriv

lsmod | grep nfc

Du får en output i likhet med:

nfc 118784 1 pn533

För att ta bort denna modul (tillfälligt) skriv:

sudo rmmod pn533_usb pn533

3. Testa igen att skriva:

utils/nfc-scan-device -v

Denna gång bör du få ett meddelande i stil med:

1 NFC device(s) found:
- ACS / ACR122U PICC Interface:
acr122_usb:002:004

4. Lägg nu ett Mifare-kort på läsaren. Vi ska testa om nfclib kan använda läsaren för att läsa av kortet. Skriv i terminalen:

utils/nfc-list

Du får grundläggande information om chippet i stil med:

NFC device: ACS / ACR122U PICC Interface opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 02
UID (NFCID1): 8e 37 b1 51
SAK (SEL_RES): 18

Du kanske även får felmeddelandet Command Code verification failed. Vi kunde inte någon lösning på detta felmeddelande och fortsatte installationen utan att ha löst problemet. Det verkar lösa sig efter att man genomfört det sista steget.

Slutför installationen av libnfc

Nu kan du avsluta installationen av nfclib genom att skriva följande i terminalen:

sudo make install

Nu ska libnfc vara installerat. Du kan testa genom att lägga ett kort på läsaren och skriva

nfc-list

Den här gången behöver man inte skriva utils före efter som operativsystemet kommer leta efter verktyget i /usr mappen som du angav när du installerade programmet. Om du återigen får information om kortet så har installationen lyckats.

Det finns inget program/kommando som heter nfclib. libnfc består av en rad olika program/kommandon/verktyg och en lista på dessa finns här. Det finns bland annat verktyg att skriva och läsa från Mifare Classic- och Ultralight-kort. Vi kommer visa hur dessa verktyg fungerar i kommande inlägg.

Publicerad Lämna en kommentar

Så här kan du kopiera extra nyckeltaggar

Det var enklare förr. Behövde man en extra nyckel gick man till nyckelshoppen i centrum och gav dem sin fysiska nyckel och så kunde de kopiera den på någon timme. Nu rör sig samhället bort från fysiska metallnycklar. Först ut var kontoren och andra arbetsplatser där man använder kortnyckel eller taggar för att identifiera sig och komma in på sin arbetsplats. De senaste åren har det även kommit produkter för privatpersoner där man kan byta ut låset på sin dörr mot ett elektriskt dörrlås och på så sätt slippa den metallnycklar. De två mest populära elektroniska dörrlåsen i Sverige är Yale Doorman från Assa Abloy och ID Lock från tillverkaren med samma namn. För dessa lås använder man inte en metallnyckel. Man använder nyckelbrickor. För alla är det inte självklart hur man går tillväga när man behöver extra nyckelbrickor.

Det kan även vara så att man bor ett en bostadsrätt eller ett hyreshus och behöver fler nyckelbrickor, men det är inte alltid klart vem som är den ansvarige och som kan dela ut fler nyckelbrickor.

Det finns även många teknikintresserade som har RFID som hobby och som skulle vilja kunna kopiera nyckelbrickor. Även personer som jobbar med installationsteknik kan eventuellt ha nytta av att kunna kopiera nyckelbrickor.

Observera däremot att om du bor i ett bostadshus eller hyreshus så ska du av säkerhetsanledning alltid följa de regler som gäller för extra nyckelbrickor. Om du säga osäker fråga ansvarige.

Det här är en snabbguide i hur man kan kopiera olika typer av nyckelbrickor. Till att börja med finns det olika typer av tekniker, och hur man kan kopiera en viss nyckelbricka beror på vilken teknik som används. Vissa nyckelbrickor går inte att kopiera överhuvudtaget. Detta gäller till exempel Assa Abloys nyckelbrickor för Yale Doorman V2N. Assa har använt en egen teknik för dessa nyckelbrickor och använder en kryptering som har inte knäckts, vilket för att de inte går att kopiera. Man kan bara köpa extra av dessa nyckelbrickor från detaljhandeln. Från den som behöver nyckelbrickor för Yale Doorman V2N så säljer vi på Chipster dessa i vår webbutik.

ID Lock som är en direkt konkurrent till Yale Doorman har valt precis motsatt väg vad gäller nyckelbrickor. De använder inte en egen teknik. De använder högfrekvens-tekniker och alla högfrekvens-tekniker funkar med ID Lock. Detta innebär att du kan använda både NFC-kompatibla nyckelbrickor, så som Mifare-baserade nyckeltaggar. Detta innebär att du till och med lägga in ditt busskort som en nyckel i ID Lock. Har du en ID Lock och behöver fler nyckelbrickor rekommenderar vi att du i första hand använder dina befintliga högfrekvens-taggar eller kort. Du kan även köpa högfrekvens-taggar och kort (högfrekvensmodellerna kallas antingen Mifare eller NFC/NTAG). Detta eftersom att det krävs att man är ganska teknisk insatt för att lyckas kopiera högfrekvenstekniken.

Om systemet dörrlåssystemet eller inpasseringsystemet är baserat på lågfrekvenstekniken (även kallat den gamla tekniken eller EM-tekniken) så har man tur, för dessa taggar är väldigt lätta att kopiera. Eftersom det här är den gamla tekniken finns den inbyggd i nästan alla äldre byggnader, såväl som kontor som bostadshus. Har man en tagg som är baserat på EM-tekniken, såsom EM4100 eller EM4200 som är vanligt förekommande i Sverige, så behöver man endast en RFID-programmerare och en EM4305-tagg. Vi rekommenderar denna enkla RFID-programmerare som endast har två knappar, en för att läsa taggen man vill kopiera och en för att skriva till taggen man vill kopiera till. EM4305-taggen är en tagg som går att skriva till, vilket innebär att man kan kopiera en tagg till den. Se videon nedan för hur man kopierar ett EM4200-kort till en EM4305-tagg.

Om man behöver kopiera ett så kallat HID-kort så behöver man använda den avancerade läsaren. Och man kan bara skriva till T5577-chippen.

Men hur vet man om låssystemet eller passersystemet är baserat på högfrekvens eller lågfrekvens? Det finns inget enkelt sätt att bekräfta vilken teknik som används. Man kan fråga den som är ansvarig för systemet. Men dessa brukar själva sällan veta. Man kan även kolla på läsaren och försöka se om modellen står på läsaren. Står det “MF” i modellnamnet är det ett högfrekvenssystem (eftersom MF står för Mifare). Står det “EM” eller “Prox” så är det lågfrekvenssystem. Man kan även försöka läsa av taggen med sin mobiltelefon. Alla moderna mobiltelefoner har inbyggd NFC-läsare (högfrekvens-läsare). Om du lyckas läsa av din tagg är det högfrekvenssystemet. Om du inte lyckas läsa av din tagg är det troligen (inte säkert) lågfrekvenssystemet.

Om man behöver hjälp och råd kring att välja en taggar, kort eller programmerare så hjälper vi gärna till att reda ut i djungeln. Kontakta oss via kontakt-sidan.