Slik åpner du garasjeporten med RFID

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.


Grunnleggende om RFID

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.


Etterspørselssignal styrer RFID-brikken

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.


RFID-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.


Prosjektkomponenter

  • Arduino (Omtrent alle 5V-modeller skal fungere, jeg brukte en Uno)
  • RFID-leserbrett med antenne
  • RFID-tagger (jeg fant at EM4100 125K Wiegand-nøkkelfobene er billige og enkle å finne på ebay)
  • bread~~POS=TRUNC
  • En standard LED
  • 220 ohm motstand (rød rød brun)
  • Relé (Aleph SD1A05AWJ)
  • Diode (1N4148)
  • Jumper Wires

Hvordan det fungerer

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.


The Build

Trinn 1. RFID-leseroppsettet

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.


Dataarket vil vise pin-outs

Følg disse trinnene for å koble til RFID-leserkortet.

  1. Wire bakken til bakken på leseren
  2. Wireffekt til leserenes strømpinne
  3. Wire Arduino pin 2 til TX-pin på RFID-kortet
  4. Wire Arduino pin 3 til RX pin
  5. Koble antennen til leseren
  6. Koble LED-anoden til pwr-ut-tappen på brettindikatoren.
  7. Koble katodestiftet til LED-lampen til bakken via motstanden

Min brødbrettoppsett er vist nedenfor.


Arduino koblet til RFID-leserkortet

Trinn 2. Reléoppsett

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.


Relé skjematisk
  1. Kjør pin 4 fra Arduino til pin 3 på reléet. Når den trekkes høyt, vil denne pin gi nok strøm til å lukke reléet.
  2. Kjør pin 7 på reléet til bakken.
  3. Legg dioden mellom pinnene 3 og 7 med malingsstrippen mot pinne 3 av reléet.
Tips: Når du bruker et relé eller egentlig alt som bruker et elektromagnetisk felt, må du alltid bruke en "flyback" diode for å beskytte systemet fra strømspissen når magnetfeltet kollapser.

Dette er mitt brødbrett med reléet kablet opp.

Brødbrett med RFID og reléoppsett

Trinn 3. Program Arduino

  1. Kopier koden fra slutten av denne opplæringen. Koden er grundig kommentert for å hjelpe deg å forstå hva som skjer i hvert trinn. Nær toppen av koden kan du se hvor det er et sted å endre listen over RFID-tagverdier. Vi kjører koden en gang og bølger din RFID-tag, slik at du kan kopiere og lime inn ID-en fra de autoriserte kodene i den endelige koden.
  2. Klikk laste opp i Arduino IDE
  3. Åpne Serial Monitor for Arduino IDE ved å trykke CTRL SHIFT M eller Velge menyen Verktøy> Seriell skjerm.
Tips: Kontroller at baudfrekvensen til seriell skjerm samsvarer med det vi har satt inn i setup () 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.


Testing av RFID-sløyfen

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.

Trinn 4. Åpning av garasjeporten

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:


Garasje døråpner terminaler
  1. Koble Pins 1 og 9 fra reléet på breadboard til terminaler på garasjeporten
  2. Bølg RFID-taggen din nær antennen
  3. Se døren åpen

Du har nå det grunnleggende bevis på konseptet for å åpne døren med en bølge av hånden din.

Trinn 5. Gjør det permanent

  1. Monter antennen et sted der den kan lese taggen gjennom døren eller veggen. RFID kan passere gjennom faste gjenstander, slik at en antenne kan bli skjult bak garasjemuren avhengig av materialet. Det kan ta litt prøve og feil å finne et sted der det kan lese taggen.
  2. Overfør kretsen til en paraply og lodd opp en permanent løsning
  3. Sett prosjektet i en boks og monter i garasjen din.

Kildekode for dette prosjektet

/ * 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; 

Sammendrag

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:

  • Jeg undersøkte forskjellene i typer RFID-teknologi
  • Jeg utforsket konseptet om hvordan RFID fungerer
  • Du fulgte et eksempel på å koble et RFID-leserkort til en Arduino
  • Les og skriv ut RFID-identifikatoren fra en ID-kode
  • Lagt et relé til kretsen for å lukke en kontakt når rett tag ble lest
  • Kablet reléet til en garasjeportåpner for å legge til RFID-basert tilgangskontroll