Så här öppnar du din garageport med RFID

Radio Frequency Identification, eller RFID, är en spännande teknik som har blivit populär de senaste åren. Det skapar förmågan att märka något med ett mycket litet passivt chip som då tillåter fjärrläsning av informationen på det chipet. RFID-taggar används vanligtvis för säkerhetsdörrkort, identifiering för förlorade husdjur och mer nyligen närliggande fältkommunikation i smartphones.  

I denna handledning ska jag förklara några grunder om hur RFID fungerar, beskriv några olika typer av RFID och visa hur du kan bygga en RFID garageportöppnare.


Grunderna för RFID

RFID är en riktigt cool teknik som använder energin i RFID-läsarsignalen för att driva taggen eller transpondern. Detta returnerar sedan en signal som innehåller innehållet i taggens minneskrets.


Utfrågningssignalen driver RFID-chipet

Det finns ett antal RFID-typer. Vissa taggar kan ha en liten mängd data skrivna till dem som kan läsas senare. Andra är så sofistikerade att de kräver att läsaren signalerar en krypteringsnyckel innan taggen kan avkoda och returnera innehållet. De flesta taggar innehåller dock bara permanenta unika ID-nummer. Ytterligare information om RFID finns på Wikipedia.

RFID-chipformat och frekvenser varierar kraftigt. Det finns en hel alfabet soppa av typer. Många smarta telefoner läser NFC- och MIFARE-format.  

För det här projektet kommer jag dock att använda EM4100 125K Wiegand typ av chip. Denna typ av RFID använder billiga läsare och taggar som är den främsta orsaken till detta chip i mitt kit. Så länge du har kompatibla läsare och taggar, kommer dock typen av RFID inte att göra något för det här projektet.


RFID-projektet

I det här projektet använder jag en RFID-tagg och en Arduino för att öppna en garagedörr när en auktoriserad tagg är avkänd. Att använda en lågnivå-RFID-komponent är en ganska komplicerad uppgift, så vi använder ett breakout-kort som gör den låga nivån av att läsa och sänder taggkoden via seriella stift. Så fungerar de flesta RFID-brytbrädor. Denna handledning använder ett sådant breakout board.

För denna handledning kommer jag att bräda ut designen för garageportöppnaren och skapa ett funktionellt bevis på konceptet.


Projektkomponenter

  • Arduino (Bara om någon 5V-modell borde fungera, använde jag en Uno)
  • RFID Reader-kort med antenn
  • RFID-taggar (jag hittade att EM4100 125K Wiegand-nyckelfobbar är billiga och lätta att hitta på ebay)
  • Bakbord
  • En standard LED
  • 220 ohm motstånd (röd röd brun)
  • Relä (Aleph SD1A05AWJ)
  • Diod (1N4148)
  • Jumper Wires

Hur det fungerar

Processen är ganska enkel.

Först läser RFID-läsarkortet taggen och sänder koden till Arduino. Arduino läser sedan koden från den seriella anslutningen och jämför den med en lista över auktoriserade RFID-koder. Om taggen finns på den godkända listan kommer Arduino att dra en tapp hög för att ge 5V för att stänga ett relä. När reläet stängs ansluts anslutningarna till garageportens signalkontakter. Garagedörren öppnar sedan.


Byggnaden

Steg 1. RFID Reader Setup

Använd databladet eller instruktionerna på RFID-läsaren, koppla in ström, jord, seriell och antennstiften. Nedan är pin-diagrammet för läsaren jag har. Vi använder Arduino-stift 2 och 3 för seriell kommunikation med RFID-kortet så att vi kan lämna stiften 0 och 1 för konsolutgång.


Databladet visar pin-outs

Följ dessa steg för att ansluta RFID-läsarkortet.

  1. Wirejord till markörens läppstift
  2. Wireffekt till läsarens strömstift
  3. Wire Arduino pin 2 till TX-stiftet på RFID-kortet
  4. Wire Arduino pin 3 till RX pin
  5. Anslut antennen till läsaren
  6. Anslut LED-anoden till pwr-ut-stiftet på brädans indikator.
  7. Anslut katodstiftet på LED-lampan till marken via motståndet

Min brödbrädopsinstallation visas nedan.


Arduino ansluten till RFID-läsarkortet

Steg 2. Relä Setup

Lägg till reläet på brödbrädet. De två inre stiften kör den elektromagnet som stänger reläet. Du kan se i diagrammet nedan hur det går att påverka reläet att köra nuvarande genom stiften 3 till 7.


Relä schematiskt
  1. Kör stift 4 från Arduino till stift 3 på reläet. När den är hög, kommer denna stift att ge tillräckligt med ström för att stänga reläet.
  2. Kör pin 7 på reläet till marken.
  3. Lägg dioden mellan stift 3 och 7 med färgremsan mot stift 3 på reläet.
Tips: Vid användning av ett relä eller något som använder ett elektromagnetiskt fält, använd alltid en "flyback" -diod för att skydda systemet från strömspetsen när magnetfältet kollapser.

Detta är mitt brödbräda med reläet uppkopplat.

Breadboard med RFID och relä setup

Steg 3. Program Arduino

  1. Kopiera koden från slutet av denna handledning. Koden är grundligt kommenterad för att hjälpa dig att förstå vad som händer vid varje steg. Nästan toppen av koden kan du se var det är en plats att ändra listan med RFID-taggvärden. Vi kör koden en gång och vinkar din RFID-tagg så att du kan kopiera och klistra in ID-numret från de behöriga taggarna till den slutliga koden.
  2. Klick ladda upp i Arduino IDE
  3. Öppna seriekontrollen för Arduino IDE genom att trycka på CTRL SHIFT M eller Välja menyn Verktyg> Seriell bildskärm.
Tips: Se till att baudfrekvensen för seriell bildskärm matchar vad vi ställt in i inrätta() fungera. I det här exemplet: 38400.

Du borde se något så här:

RFID GDO V0.1
Taggläsning: 3D00CFBB80
Checksum: C9 - passerat.
3D00CFBB80

Dålig tagg. Gå bort.

Kopiera och klistra in ditt ID (3D00CFBB80 i det här exemplet) till koden i goodTags-listan. Observera, en annan kod kan vara på en ny rad så länge den omges av citat och har ett kommatecken efter det. En enda kodlista kan se ut så här:

char * goodTags [] =
"3D00CFBB80",
;

Klicka på uppladdning i Arduino IDE och öppna seriekontrollen för Arduino IDE genom att trycka på CTRL SHIFT M eller Välja menyn Verktyg> Seriell bildskärm.

Nu när du kör koden ser du något så här:

RFID GDO V0.1
Taggläsning: 3D00CFBB80
Checksum: C9 - passerat.
3D00CFBB80

Öppningsdörr!

Nedan följer ett foto på mig som testar RFID-taggen med reläet. Multimetern är ansluten till stift 1 och 9 i reläet så att det ska upptäcka kontinuitet när reläet stängs.


Testa RFID-slingan

Med en multimeter ansluten kan du höra multimeterns pip för att indikera kontinuitet och sedan en mycket svag tink och reläet snäpper tillbaka öppet.

Steg 4. Öppnar garageporten

De flesta garageportöppnare fungerar helt enkelt genom att öppna när de stänger kontakten. När du trycker på knappen på väggen stänger du kontakten. På min garageportöppnare har jag terminaler där ledningarna från knappen är anslutna. Du kan se terminalerna markerade här:


Garage dörr öppnare terminaler
  1. Haka upp stift 1 och 9 från reläet på brödbrädet till terminalerna på garagedörröppnaren
  2. Vrid din RFID-tag nära antennen
  3. Titta på dörren öppen

Du har nu det grundläggande bevisbeviset för att öppna dörren med en våg av handen.

Steg 5. Gör det permanent

  1. Montera antennen någonstans, den kan läsa taggen genom dörren eller väggen. RFID kan passera genom fasta föremål så att en antenn kan döljas bakom garageväggen beroende på materialet. Det kan ta lite försök och fel att hitta en plats där den kan läsa taggen.
  2. Överför kretskortet till en paraply och löd upp en permanent lösning
  3. Sätt projektet i en låda och montera i ditt garage.

Källkod för detta projekt

/ * RFID Garage dörröppnare provkod av Ben Miller @VMfoo ReadKey funktion inspirerad och lånad delvis från arduino lekplats exemplet: http://playground.arduino.cc/Code/ID12 * / // inkludera biblioteket SoftwareSerial så att du kan använd dess funktioner: #include // lämna maskinvarans seriella portar för debugging #define rxPin 2 // pin för att ta emot data från RFID-läsare #define txPin 3 // sändstift för softserial initialisering #define doorPin 4 // pin för att utlösa relä / / skapa en ny serieport NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); byte pinState = 0; // för inkommande seriell data int inkommandeByte = 0; // teckenuppsättning för värdet av RFID-taggen char tagValue [10]; // Vilka tagvärden är tillåtna char * goodTags [] = "3D00CFBB80", // "######", // lägg till en annan tagg genom att ersätta #: erna med din kod och uncommenting denna rad; // Beräkna antalet taggar i matrisen ovan int tagCount = sizeof (goodTags) / sizeof (goodTags [0]); tomrumsinställning () // definiera pinlägen för öppningsreläet pinMode (doorPin, OUTPUT); // Ange datahastigheten för SoftwareSerial-porten RFIDPort.begin (9600); Serial.begin (38400); // seriell övervakningshastighet Serial.println ("RFID GDO V0.1"); // hello world void loop () // loop och läs om (RFIDPort.available ()) if (readKey ()) // kolla värdet om (goodTag ()) // om det här är tillåtet openDoor ();  else Serial.println ("Dålig tagg. Gå bort.");  int goodTag () för (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) // Om vi ​​är i checksumbyte, checksumma ^ = tagBytes [bytesRead >> 1]; // Beräkna kontrollsumman ... (XOR);  annat tempByte = val; // Spara första hex siffran först; bytesRead ++; // Klar att läsa nästa siffra // Skicka resultatet till värden ansluten via USB om (bytesRead == 12) // 12-siffrigt läs är komplett tagValue [10] = '\ 0'; // Noll-avsluta strängen Serial.print ("Tag read:"); för (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; 

Sammanfattning

I denna handledning skisserade jag grunderna för RFID-teknik och hur man utnyttjar det för dina egna projekt. Medan komponenter med låg nivå som läser RFID kan vara svåra för hobbyister att använda, tillåter RFID-brytbrädor att använda RFID mycket enkelt i projekt med Arduino eller till och med en Raspberry Pi via en seriell port. När ett ID läses från en tagg är det enkelt att agera på informationen. I det här exemplet aktiverade vi ett relä för att öppna en garageport.

För övrigt:

  • Jag undersökte skillnaderna i typer av RFID-teknik
  • Jag undersökte begreppet hur RFID fungerar
  • Du följde ett exempel på att ansluta en RFID-läsarkort till en Arduino
  • Läs och skriv ut RFID-identifieraren från en ID-tagg
  • Tillagde ett relä till kretsen för att stänga en kontakt när rätt etikett läses
  • Kabelde reläet till en garageportöppnare för att lägga till RFID-baserad åtkomstkontroll