Arduino snakker RFID

RFIDs kan brukes i mange programmer som gjenkjenner gjenstander eller personer, for eksempel for å kontrollere tilgangen til en dør. Selvfølgelig er det nå rimelig maskinvare, sine egne prosjekter med RFID-brikker og RFID-lesere tillatt.

Skaperen av begrepet IOT (Internet of Things), Kevin Ashton, jobbet på Auto-ID Center ved Massachusetts Institute of Technology (MIT). Han har satt i gang en internasjonal standard for RFID. Mellom Tingenes internett og av RFID-teknologi, er det derfor en historisk referanse. I denne saken er derfor å vokse sammen det som hører sammen.

Men hva er RFID, og ​​hva er det for? La meg bla til dette emnet i den virtuelle leksikon.

RFID (. Norsk radiofrekvensidentifikasjon) som er betegnet i henhold til Wikipedia:

" [...] en teknologi for sender-mottager-systemer for automatisk og kontaktløs identifisering og lokalisering av objekter og dyr med radiobølger.
En RFID-system består av en transponder (vanligvis kalt radiomerkings) som er plassert på eller i objektet eller levende vesen, og et identifikasjonskode og en leser for å lese denne koden.
RFID-transpondere kan være så liten som et riskorn og er implantert, slik som dyr eller mennesker."

Sporing av dyr turer med RFIDs ved University of OklahomaSporing av dyr turer med RFIDs ved University of Oklahoma(Bilde: www.animalmigration.org)

"Videre er det mulighet for RFID-tran på en spesiell trykkeprosess stabile kretser av polymerer for å fremstille. Fordelene med denne teknikken skyldes en kombinasjon av liten størrelse, sin lave profil utvalg alternativ (f.eks. Som i den nylig innførte 01.11.2010 identitetskort i Tyskland) og den lave prisen på transponderne (delvis prosent område). Denne nye teknologien har potensial til å erstatte mye brukt i dag strekkode.
Koblingen skjer ved hjelp av varme som genereres av leseren magnetiske vekselfelter i kort rekkevidde eller høyfrekvente radiobølger. Således ikke bare tilveiebringer data som skal overføres, men også transponderen med energi. For å oppnå større avstander aktive transpondere med sin egen strømforsyning blir brukt, som er forbundet med høyere kostnader. [...]"

I hverdagen møter vi RFID nå allestedsnærværende. For eksempel når scanning av varer i kassa eller når du betaler via NFC terminaler. I dag RFID maskinvare og kortene er så billig at deres bruk er lønnsomt selv i en verden av Maker, taler for dine egne prosjekter.

RFID RC522 Set

Et attraktivt priset sett for egen eksperimentering handler under søkeordet RFID RC522. Dette settet inkluderer hardware-modul, en S50 RFID / NFC-kort, en blå transponder som en nøkkel ring, og topper (vinklet, rett) får du for bare 5 euro på ebay.

En RFID RC522 sett består av en leser, to RFID-brikker og topper for lodding En RFID RC522 sett består av en leser, to RFID-brikker og topper for lodding

SPI bus som skal kobles og omtrent 6 cm x 4 cm bred modulen krever 3,3 V matespenning, forbruker operasjonsstrøm 10 til 30 mA, og har en hvilestrøm på 80 mikroampere. Overføringsfrekvensen er 13,56 MHz.

https://home.ctw.utwente.nl RFID RC522 og dens pintilordning(Bilde: https://home.ctw.utwente.nl)

De som ønsker å bruke andre typer kort / RFIDs med RFID-leseren har et valg mellom hvilke typer S50, S70, Ultralight, Pro, og Desfire.

prosjektet

Som alltid bør praksisen være i forgrunnen. Det innebærer simulering av en døråpning system. Rollen av låsemekanismen inntar en servomotor. En rød og en grønn LED å visualisere status. I utgangspunktet er døren låst, og den røde LED-lys. Skissen venter på folk som bruker RFID-brikke for å få adgang. Gjenkjenner krets, en RFID-brikke i sin nærhet, det utlesning deres verdi.

Kretsen under test Kretsen under testDiagnostisk utgangen under operasjonDiagnostisk utgangen under operasjon

Bill of Material

For å gjennomføre prosjektet som beskrives her, trenger du følgende materialer:

Forbindelser RFID-leser og Arduino Mega eller Uno

I en Arduino Mega følgende tilkoblinger er nødvendig.

Arduino Mega RFID RC522 (RFID-leser)
GND GND
5 RST
3.3 V 3.3 V
53 SDA
52 SCK
51 Mosi
50 Miso

Når Uno du trenger å endre kretsen og sette noe SDA til digital pin 10, SCK på 13, Mosi til 11 og Miso on 12th Videre forbinder RST fra RFID-leseren med digital tapp 9 av FN, hvilket resulterer i:

Arduino RFID RC522 (RFID-leser)
GND GND
9 RST
3.3 V 3.3 V
10 SDA
13 SCK
11 Mosi
12 Miso

kretsen

I kretsen følgende forbindelser tilsettes. Viser tilkoblinger for Arduino Mega er. Når Uno bare bruke andre digitale utganger.

Samlet derfor resulterer i følgende krets:

Krets med Mega, RFID RC522, Servoe motor, LED Krets med Mega, RFID RC522, servomotor, LED

Normalt kan RFID-leser typen MFRC522 enkelt betjenes med 3,3 V spenning på Arduino plater, mens resten tilkoblingene for SPI-bussen av modulen direkte på Arduino styret. For å være på den sikre siden, kan du bruke et logisk nivå omformer, som vi har lært å kjenne ham, for eksempel i kretsene til Bluetooth. Forkortelsen MF i MFRC522 er veien for familien MIFARE NXP Semiconductors, produsenten av brikken. For detaljer, også på denne Wikipedia siden. En engelsk dataark det via denne linken.

bibliotek

Det er ikke verdt å programmere brettet med MFRC522 chip selv systemnivå, som Miguel Balboa tilbyr et bibliotek for dette formålet, som du finner på denne GitHub siden. Nedlasting biblioteket via lenken nedenfor. Deretter kan den ekspanderte bibliotek importere (katalog RFID-master) i Arduino IDE.

Naviger til IDE til Sketch | Inkluder Bibliotek | Legg ZIP Bibliotek og skriv inn banen til biblioteket.

første Sketch

Først bør en første skisse tillate å lese ID-ene for RFID-brikker. brukeren nærmer seg RFID-kortet til leseren modulen, programmet er i sløyfen () - fra deres ID sløyfe.

Det er best å starte Sketch, åpner serie monitor, holde sine RFIDs i nærheten av leseren, og å huske IDer av kortene sine. En ID du trenger for selve prosjektet, og har sin verdi det sesam butikken som en variabel (se program under).

Du må også endre noen pinner i skissen, du bør bruke i stedet for Arduino Mega annet bord som FN. I tillegg var det allerede i ovennevnte forklaring notater.

/////////////////////////////////////////////////
//
// Les og skriv ut RFID-brikker
// basert på MFRC422 leser
// (c) Michael Stal, 2016
//
//////////////////////////////////////////////////


#include // Import SPI Bibiothek
#include // Import RFID Bibiothek
#include // Import servo bibliotek

///////// variabler MFRC522 //////////////////////
const int SDAPIN = 53; // Uno => pin 10
const int RSTPIN = 9; // Uno => pin 9
MFRC522 RFIDReader (SDAPIN, RSTPIN); // RFID mottaker

//////////////////////////////////////////////////
//
// setup ()
// initial SPI,
// Serial Monitor,
// RFID-leser
//
//////////////////////////////////////////////////

void setup ()
{
Serial.begin (9600); // Serial Connection
SPI.begin (); // bygge SPI-tilkobling
rfidReader.PCD_Init (); // RFID-lesere initial.
}


//////////////////////////////////////////////////
//
// sløyfe ()
// Venter på RFID deteksjon
//
//////////////////////////////////////////////////

void sløyfe ()
{
// anerkjent kort og lese
(If (rfidReader.PICC_IsNewCardPresent) && rfidReader.PICC_ReadCardSerial ()) {

Serial.print ("Kjennes RFID TAG => ");

// Les byte av ID og utgang
Serial.print ("/");
for (byte i = 0; i < rfidReader.uid.size; i ++) {
Serial.print (rfidReader.uid.uidByte, HEX);
Serial.print ("/");
}
Serial.println ();
}
}

Som utgang vises på serie overvåke verdiene av de oppdagede RFID-kort:

Utstedelse av RFID leasers på serie monitorUtstedelse av RFID leasers på serie monitor

Prefiksene PCD og PICC i biblioteket rutinene er veien for Proximity Kobling enhet og for Proximity Integrated Circuit Card. Den tidligere refererer til leseren, den sistnevnte RFID-kortet.

Programmet for prosjektet

For selve prosjektet, kan vi bruke den øvre skisse som base.

Den variable [i] sesam (i den nedre oppføring i rødt) tilfelle inneholder ID-en til en RFID-transponder av forfatteren. Denne variabelen Selvfølgelig bør du erstatte den med ID-en egen RFID-kort som du har skrevet i den siste testoppsettet.

Følgende skisse implementert akkurat det scenariet som er beskrevet ovenfor.

I setup ()

I løkke ()

De andre metoder / rutiner er selvforklarende.

Den diagnostiske utgang du kan se serie skjerm på 9600 baud.

//////////////////////////////////////////////////
//
// Demo for RFID-brikker
// basert på MFRC422 leser
// (c) Michael Stal, 2016
//
//////////////////////////////////////////////////


#include // Import SPI Bibiothek
#include // Import RFID Bibiothek
#include // Import servo bibliotek

///////// variabler MFRC522 //////////////////////
const int SDAPIN = 53; // Uno => pin 10
const int RSTPIN = 9; // Uno => pin 9
MFRC522 RFIDReader (SDAPIN, RSTPIN); // RFID mottaker

///////// aktuatorer: lysdioder, strøm ///////////////////
const int REDLED = 13; // Uno -> pin 8
const int GREENLED = 12; // Uno -> pin 7
const int SERVOPIN = 11; // Uno -> pin 6
Strøm døren; // dørlås (servo)

//////// ID riktig RFID-brikker //////////////
sesam byte [] = {0x26, 0xA7, 0xFB, 0x48};



//////////////////////////////////////////////////
//
// setup ()
// initial SPI,
// Serial Monitor,
// RFID-leser
//
//////////////////////////////////////////////////

void setup ()
{

door.attach (SERVOPIN);
pinMode (REDLED, OUTPUT);
pinMode (GREENLED, OUTPUT);
pinMode (SERVOPIN, OUTPUT);

Serial.begin (9600); // Serial Connection

SPI.begin (); // bygge SPI-tilkobling

rfidReader.PCD_Init (); // Initial. RFID-leser
Serial.println ("Tuerkontrolle aktivert");
}



//////////////////////////////////////////////////
//
// acceptedRFID ()
// true lese RFID
// med forhåndsinnstilt ID matchet?
//
//////////////////////////////////////////////////

bool acceptedRFID (byte uid [4]) {
retur
(RfidReader.uid.uidByte [0] == sesam [0]) &&
(RfidReader.uid.uidByte [1] == sesam [1]) &&
(RfidReader.uid.uidByte [2] == sesam [2]) &&
(RfidReader.uid.uidByte [3] == sesam [3]);
}

//////////////////////////////////////////////////
//
// åpen dør ()
// servo 180 ° omdreining i retningen
//
//////////////////////////////////////////////////

ugyldig åpen dør () {
for (int pos = 0; pos <= 180; pos ++) {
door.write (pos);
forsinkelse (20);
}
}

//////////////////////////////////////////////////
//
// tett dør ()
// servo 180 grader i motsatt retning vende
//
//////////////////////////////////////////////////

ugyldig tett dør () {
for (int pos = 180; pos >= 0; pos--) {
door.write (pos);
forsinkelse (20);
}
}

//////////////////////////////////////////////////
//
// signal døren låst ()
// tilgangs blokkert =>
// røde LED-lys
// ikke grønn
//
//////////////////////////////////////////////////

void døren låst signal () {
digital write (REDLED, HIGH);
digital write (GREENLED, LOW);
}

//////////////////////////////////////////////////
//
// signalAccessGranted ()
// tilgangs innvilget =>
// grønn LED-lys,
// red ikke
//
//////////////////////////////////////////////////

void signalAccessGranted () {
digital write (REDLED, LOW);
digital write (GREENLED, HIGH);
}

//////////////////////////////////////////////////
//
// signalAccessRefused ()
// Access denied =>
// rød LED blinker 5x
//
//////////////////////////////////////////////////

void signalAccessRefused () {
for (int i = 0; i < 5; i ++) {
digital write (REDLED, HIGH);
forsinkelse (250);
digital write (REDLED, LOW);
forsinkelse (250);
}
}


//////////////////////////////////////////////////
//
// sløyfe ()
// Venter på RFID deteksjon
// reaksjon avhenger ID sammenligning
//
//////////////////////////////////////////////////

void sløyfe ()
{
// Red signal
signal døren låst ();

// anerkjent kort og lese
(If (rfidReader.PICC_IsNewCardPresent) && rfidReader.PICC_ReadCardSerial ()) {

Serial.print ("Kjennes RFID TAG => ");

// Les byte av ID og utgang
Serial.print ("/");
for (byte i = 0; i < rfidReader.uid.size; i ++) {
Serial.print (rfidReader.uid.uidByte [i], HEX);
Serial.print ("/");
}

Serial.println ();

// Sjekk om kortet med variabel kamper sesam
if ((acceptedRFID rfidReader.uid.uidByte)) { // ja =>
// indikere tillatt tilgang
signalAccessGranted ();
Serial.println ("Tilgang lov => oeffnen Tuer");
// åpne Tuere
åpen dør ();
Serial.println ("la døren åpen 3 sekunder");
// 3 sekunders pause
forsinkelse (3000);
Serial.println ("lukk døren");
// lukker Tuere igjen
nær døren ();
}
annet // no =>
{
Serial.println ("ingen tilgang");
// Rød LED blinker som en advarsel
signalAccessRefused ();
}
}
}

utvidelsesmuligheter

Selvfølgelig, jeg slipper deg denne gangen ikke uten forslag til utvidelser. Du har flere alternativer som for eksempel:

sammendrag

Med RFID-lesere og koder, kan noen interessante prosjekter bli opprettet. Sikkerhetssystemer for å detektere organismer eller driftsløsøre mange programmer er mulig. Denne sekvensen kunne bare illustrere av isfjellet. For profesjonelle og sikkerhetskritiske applikasjoner, men er forventet å nå sine grenser rimelig RC522 styret. Her er nødvendige dyrere og kraftigere alternativer. For å samle erfaringer og mange make-prosjekter muligheten for chip, men rik tatt. Ha det gøy å eksperimentere!