Radiofrekvensidentifikasjon, eller RFID, er en spennende teknologi som har blitt populær de siste årene. Det skaper muligheten til å merke noe med en svært liten passiv chip som deretter tillater ekstern lesing av informasjonen på den brikken. RFID-koder brukes ofte til sikkerhetsdørstrykkort, identifikasjon for tapt kjæledyr, og mer nylig nær feltkommunikasjon i smarttelefoner.
I denne opplæringen vil jeg forklare noen grunnleggende om hvordan RFID fungerer, beskriv noen forskjellige typer RFID, og vis hvordan du kan bygge en RFID garasjeportåpner.
RFID er en veldig kul teknologi som bruker energien til RFID-leserens signal for å koble taggen eller transponderen. Dette returnerer deretter et signal som inneholder innholdet i tagens minnebrikke.
Det finnes en rekke RFID-typer. Noen koder kan ha en liten mengde data skrevet til dem som kan leses senere. Andre er så sofistikerte som å kreve at leseren signalerer en krypteringsnøkkel før merket kan dekode og returnere innholdet. De fleste tagger inneholder imidlertid bare permanente unike ID-numre. Ytterligere informasjon om RFID er tilgjengelig på Wikipedia.
RFID-chipformater og frekvenser varierer betydelig. Det er en hel alfabet suppe av typer. Mange smarte telefoner leser NFC- og MIFARE-formater.
For dette prosjektet skal jeg imidlertid bruke EM4100 125K Wiegand type chip. Denne typen RFID bruker billige lesere og koder som er den primære årsaken til denne brikken i min pakke. Så lenge du har kompatible lesere og koder, vil imidlertid typen av RFID ingen betydning for dette prosjektet.
I dette prosjektet vil jeg bruke en RFID-tag og en Arduino til å åpne en garasjeport når en autorisert tag er sensert. Ved å bruke et lavt nivå RFID komponent er en ganske komplisert oppgave, så bruker vi et breakout board som gjør det lave nivået lesing og overfører tagkoden via serielle pinner. Slik fungerer de fleste RFID breakout boards. Denne opplæringen bruker en slik breakout board.
For denne opplæringen vil jeg brette ut designet for garasjeportenåpningen og lage et funksjonsbevis for konsept.
Prosessen er ganske enkel.
Først leser RFID-leserbrettet taggen og overfører koden til Arduino. Arduino leser deretter koden fra den serielle tilkoblingen og sammenligner den med en liste over autoriserte RFID-koder. Hvis merket er på den autoriserte listen, vil Arduino trekke en tapp høy for å gi 5V for å lukke et relé. Når reléet lukkes, kobles det til terminaler på garasjeportens kontaktkontakter. Garasjedøren åpner deretter.
Bruk databladet eller instruksjonene på RFID-leseren, koble opp strøm, jord, seriell og antennestifter. Nedenfor er pin-diagrammet til leseren jeg har. Vi bruker Arduino pins 2 og 3 for seriell kommunikasjon med RFID-kortet, slik at vi kan forlate pin 0 og 1 for konsollutgang.
Følg disse trinnene for å koble til RFID-leserkortet.
Min brødbrettoppsett er vist nedenfor.
Legg til reléet på brødbrettet. De to interne tappene kjører elekronen som vil lukke reléet. Du kan se i diagrammet nedenfor hvordan kjøring av nåværende gjennom pinnene 3 til 7 vil påvirke reléet.
Dette er mitt brødbrett med reléet kablet opp.
Brødbrett med RFID og reléoppsettsetup ()
funksjon. I dette eksemplet: 38400
. Du bør se noe slikt:
RFID GDO V0.1
Merkeleser: 3D00CFBB80
Kontrollsum: C9 - bestått.
3D00CFBB80
Dårlig merketegn. Gå vekk.
Kopier og lim inn din ID (3D00CFBB80
i dette eksemplet) inn i koden i goodTags-listen. Merk at en annen kode kan være på en ny linje så lenge den er omgitt av sitater og har et komma etter det. En enkelt kode liste kan se slik ut:
char * goodTags [] =
"3D00CFBB80",
;
Klikk på opplasting i Arduino IDE, og åpne deretter Serial Monitor for Arduino IDE ved å trykke CTRL SHIFT M eller Velge menyen Verktøy> Seriell skjerm.
Nå når du kjører koden vil du se noe slikt:
RFID GDO V0.1
Merkeleser: 3D00CFBB80
Kontrollsum: C9 - bestått.
3D00CFBB80
Åpning dør!
Nedenfor er et bilde av meg som tester RFID-taggen med reléet. Multimeteret er koblet til pinnene 1 og 9 i reléet, slik at det skal oppdage kontinuitet når reléet lukkes.
Med en multimeter tilkoblet, kan du høre pipet på multimeteret for å indikere kontinuitet og deretter en veldig svak tink og reléet klikker åpent igjen.
De fleste garasjeportåpnere opererer veldig enkelt ved å åpne når de har en kontakt lukket. Når du trykker på knappen på veggen, lukkes kontakten. På min garasjeportåpner har jeg terminaler hvor ledningene fra knappen er koblet til. Du kan se terminaler uthevet her:
Du har nå det grunnleggende bevis på konseptet for å åpne døren med en bølge av hånden din.
/ * RFID Garage døråpnerprøvekode av Ben Miller @VMfoo ReadKey-funksjonen inspirert og lånt delvis fra arduino lekeplass eksempel: http://playground.arduino.cc/Code/ID12 * / // inkludere SoftwareSerial-biblioteket slik at du kan bruk dens funksjoner: #include // forlate maskinvarens serielle porter for feilsøking #define rxPin 2 // pin for å motta data fra RFID-leser #define txPin 3 // sendepen for softserial initialisering #define doorPin 4 // pin for å utløse relé / / sett opp en ny seriell port NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); byte pinState = 0; // for innkommende serielle data int innkommendeByte = 0; // karakter array for verdien av RFID-taggen char tagValue [10]; // Hvilke tagverdier er autorisert char * goodTags [] = "3D00CFBB80", // "######", // legg til en annen kode ved å erstatte # s med koden din og uncommenting denne linjen; // Beregn antall koder i arrayet over int tagCount = sizeof (goodTags) / sizeof (goodTags [0]); tomt oppsett () // definer pin modi for åpent relé pinMode (doorPin, OUTPUT); // angi datahastigheten for SoftwareSerial-porten RFIDPort.begin (9600); Serial.begin (38400); // seriell monitor rate Serial.println ("RFID GDO V0.1"); // hello world void loop () // loop og les om (RFIDPort.available ()) if (readKey ()) // merketikett hvis (goodTag ()) // hvis dette er tillatt openDoor (); ellers Serial.println ("Dårlig merket. Gå bort."); int goodTag () for (int i = 0; i < tagCount; i++) //walk through the tag list if(strcmp(tagValue, goodTags[i]) == 0) return 1; return 0; void openDoor() Serial.println("Opening Door!"); digitalWrite(doorPin, HIGH); delay(500); // half a second is plenty of time to let trigger the contact digitalWrite(doorPin, LOW); //to prevent "bounce" or secondary reads if the tag is still close to the reader //we delay 3 seconds delay(3000); int readKey() byte i = 0; byte val = 0; byte checksum = 0; byte bytesRead = 0; byte tempByte = 0; byte tagBytes[6]; // "Unique" tags are only 5 bytes but we need an extra byte for the checksum // char tagValue[10]; this is defined globaly to simplify code if((val = RFIDPort.read()) == 2) // Check for header bytesRead = 0; while (bytesRead < 12) // Read 10 digit code + 2 digit checksum if (RFIDPort.available()) val = RFIDPort.read(); // Append the first 10 bytes (0 to 9) to the raw tag value // Check if this is a header or stop byte before the 10 digit reading is complete if (bytesRead < 10) tagValue[bytesRead] = val; if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) break; // Stop reading // Ascii/Hex conversion: if ((val >= '0') && (val <= '9')) val = val - '0'; else if ((val >= 'A') && (val <= 'F')) val = 10 + val - 'A'; // Every two hex-digits, add a byte to the code: if (bytesRead & 1 == 1) // Make space for this hex-digit by shifting the previous digit 4 bits to the left tagBytes[bytesRead >> 1] = (val | (tempByte << 4)); if (bytesRead >> 1! = 5) // Hvis vi er i checksum byte, checksum ^ = tagBytes [bytesRead >> 1]; // Beregn sjekksummen ... (XOR); ellers tempByte = val; // Lagre det første heksesifferet først; bytesRead ++; // Klar til å lese neste siffer // Send resultatet til verten koblet via USB hvis (bytesRead == 12) // 12-sifret leser er fullført tagValue [10] = '\ 0'; // Null-terminate strengen Serial.print ("Tag read:"); for (i = 0; i<5; i++) // Add a leading 0 to pad out values below 16 if (tagBytes[i] < 16) Serial.print("0"); Serial.print(tagBytes[i], HEX); Serial.println(); Serial.print("Checksum: "); Serial.print(tagBytes[5], HEX); Serial.println(tagBytes[5] == checksum ? " -- passed." : " -- error."); Serial.println(tagValue); Serial.println(); return 1; //return value to indicate that we read something bytesRead=0; return 0;
I denne opplæringen skisserte jeg grunnleggende om RFID-teknologi og hvordan du kan bruke den til dine egne prosjekter. Selv om komponentene på lavt nivå som leser RFID, kan være vanskelig for hobbyister å bruke, tillater RFID-bryterbrett å bruke RFID veldig enkelt i prosjekter med Arduino eller til og med en Raspberry Pi via en seriell port. Når en ID er lest fra en tagg, er det enkelt å handle på informasjonen. I dette eksemplet aktiverte vi et relé for å åpne en garasjeport.
I tillegg: