Hoe uw garagedeur te openen met RFID

Radio Frequency Identification, of RFID, is een opwindende technologie die de laatste jaren aan populariteit heeft gewonnen. Het creëert de mogelijkheid om iets te taggen met een zeer kleine passieve chip die vervolgens op afstand lezen van de informatie op die chip mogelijk maakt. RFID-tags worden vaak gebruikt voor beveiligingskaarten met veegkaarten, identificatie voor verloren huisdieren en meer recent in de buurt van veldcommunicatie in smartphones.  

In deze tutorial leg ik een paar basisprincipes uit over hoe RFID werkt, beschrijf enkele verschillende soorten RFID en laat zien hoe je een RFID-garagedeuropener kunt bouwen.


De grondbeginselen van RFID

RFID is echt een coole technologie die de energie van het RFID-leessignaal gebruikt om de tag of transponder van stroom te voorzien. Dit geeft dan een signaal terug dat de inhoud van de geheugenchip van de tag bevat.


Ondervragend signaal voedt de RFID-chip

Er is een aantal RFID-typen. Op sommige tags kan een kleine hoeveelheid gegevens worden geschreven die later kunnen worden gelezen. Andere zijn zo geavanceerd dat de lezer een coderingssleutel moet signaleren voordat de tag kan decoderen en de inhoud ervan kan retourneren. De meeste tags bevatten echter eenvoudig permanente unieke ID-nummers. Meer informatie over RFID is beschikbaar op Wikipedia.

RFID-chipformaten en frequenties variëren aanzienlijk. Er is een hele alfabet soep van soorten. Veel smartphones lezen NFC- en MIFARE-indelingen.  

Voor dit project ga ik echter het EM4100 125K Wiegand-type chip gebruiken. Dit type RFID maakt gebruik van goedkope lezers en tags, wat de belangrijkste reden is voor deze chip in mijn kit. Zolang u compatibele lezers en tags heeft, zal het type RFID echter niet van belang zijn voor dit project.


Het RFID-project

In dit project zal ik een RFID-tag en een Arduino gebruiken om een ​​garagedeur te openen wanneer een geautoriseerde tag wordt gedetecteerd. Het gebruik van een RFID-component op een laag niveau is een vrij gecompliceerde taak, dus gebruiken we een breakout-kaart die de lage niveau-uitlezing uitvoert en de labelcode via seriële pinnen verzendt. Dit is hoe de meeste RFID-breakoutborden werken. Deze tutorial maakt gebruik van zo'n breakout-bord.

Voor deze tutorial zal ik het ontwerp voor de garagedeuropener uittekenen en een functioneel proof of concept maken.


Projectcomponenten

  • Arduino (zo ongeveer elk 5V-model zou moeten werken, ik gebruikte een Uno)
  • RFID-lezerbord met antenne
  • RFID-tags (ik vond dat EM4100 125K Wiegand-sleutelbosjes goedkoop en gemakkelijk te vinden zijn op ebay)
  • broodplank
  • Een standaard led
  • 220 ohm weerstand (rood rood bruin)
  • Relais (Aleph SD1A05AWJ)
  • Diode (1N4148)
  • Jumper Draden

Hoe het werkt

Het proces is vrij eenvoudig.

Eerst leest de RFID-lezer de tag en verzendt de code naar de Arduino. De Arduino leest vervolgens de code van de seriële verbinding en vergelijkt deze met een lijst met geautoriseerde RFID-codes. Als de tag op de geautoriseerde lijst staat, trekt de Arduino een speld omhoog om 5V te leveren om een ​​relais af te sluiten. Wanneer het relais sluit, verbindt het de aansluitpunten van de signaalcontacten van de garagedeur. De garagedeur gaat dan open.


De build

Stap 1. De RFID-lezer instellen

Gebruik de datasheet of instructies op de RFID-lezer om de power-, ground-, serial- en antennepennen aan te sluiten. Hieronder staat het uitschakeldiagram van de lezer die ik heb. We gebruiken Arduino-pins 2 en 3 voor seriële communicatie met het RFID-board, zodat we pinnen 0 en 1 kunnen laten voor de console-uitvoer.


Het gegevensblad zal de pin-outs tonen

Volg deze stappen om de RFID-lezer aan te sluiten.

  1. Bedraad de aarde met de grondpen van de lezer
  2. Bekrachtig de power pin van de lezer
  3. Bedraad Arduino pin 2 met de TX-pin van het RFID-bord
  4. Bedraad Arduino pin 3 met de RX-pin
  5. Verbind de antenne met de lezer
  6. Verbind de LED-anode met de pwr out-pin van de kaartindicator.
  7. Verbind de kathodepin van de LED via de weerstand met de aarde

Mijn breadboard-opstelling wordt hieronder weergegeven.


De Arduino aangesloten op de RFID-lezer

Stap 2. Relay-instellingen

Voeg het relais toe aan het breadboard. De twee interne pinnen lopen de elecromagne die het relais zal sluiten. U kunt in het onderstaande diagram zien hoe de lopende stroom door de pinnen 3 tot 7 het relais beïnvloedt.


Relais schema
  1. Start pin 4 van de Arduino naar pin 3 op het relais. Wanneer deze pen omhoog wordt getrokken, zal deze voldoende stroom leveren om het relais te sluiten.
  2. Leid pin 7 op het relais naar aarde.
  3. Voeg de diode toe tussen pin 3 en 7 met de verfstreep richting pin 3 van het relais.
Tip: Gebruik bij het gebruik van een relais of iets dat een elektromagnetisch veld gebruikt altijd een "flyback" -diode om het systeem te beschermen tegen de stroompiek wanneer het magnetische veld instort.

Dit is mijn breadboard met het relais bedraad.

Breadboard met RFID en relay-instellingen

Stap 3. Programmeer Arduino

  1. Kopieer de code aan het einde van deze tutorial. De code is grondig becommentarieerd om u te helpen begrijpen wat er bij elke stap gebeurt. Aan de bovenkant van de code kunt u zien waar een plaats is om de lijst met RFID-tagwaarden te wijzigen. We voeren de code een keer uit en zwaaien met uw RFID-tag, zodat u de ID van uw geautoriseerde tags naar de definitieve code kunt kopiëren en plakken.
  2. Klik uploaden in de Arduino IDE
  3. Open de seriële monitor van de Arduino IDE door op te drukken CTRL SHIFT M of Selecteer het menu Hulpmiddelen> Seriële monitor.
Tip: Zorg ervoor dat de baudrate van de seriële monitor overeenkomt met wat we in de opstelling() functie. In dit voorbeeld: 38400.

Je zou zoiets als dit moeten zien:

RFID GDO V0.1
Tag gelezen: 3D00CFBB80
Checksum: C9 - geslaagd.
3D00CFBB80

Slechte tag. Ga weg.

Kopieer en plak je ID (3D00CFBB80 in dit voorbeeld) in de code in de lijst goodTags. Let op, een andere code kan op een nieuwe regel staan ​​zolang deze omringd is door aanhalingstekens en een komma erna heeft. Een enkele codelijst ziet er ongeveer zo uit:

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

Klik op uploaden in de Arduino IDE en open vervolgens de seriële monitor van de Arduino IDE door op te drukken CTRL SHIFT M of Selecteer het menu Hulpmiddelen> Seriële monitor.

Wanneer u nu de code uitvoert, ziet u zoiets als dit:

RFID GDO V0.1
Tag gelezen: 3D00CFBB80
Checksum: C9 - geslaagd.
3D00CFBB80

Opendeur!

Hieronder een foto van mij die de RFID-tag test met het relais. De multimeter is vastgehaakt aan pennen 1 en 9 van het relais, zodat het continuïteit moet detecteren wanneer het relais sluit.


De RFID-lus testen

Met een multimeter aangesloten, kunt u de piep van de multimeter horen om continuïteit aan te geven en vervolgens een zeer vage tink en het relais klikt terug open.

Stap 4. De garagedeur openen

De meeste garagedeuropeners werken heel eenvoudig door ze te openen wanneer ze een contact gesloten hebben. Wanneer u op de knop op de muur drukt, sluit u het contact. Op mijn garagedeuropener heb ik aansluitingen waar de draden van de knop zijn aangesloten. U kunt de terminals hier gemarkeerd zien:


Garagedeuropener-klemmen
  1. Bevestig de pennen 1 en 9 van het relais op de breadboard aan de klemmen op de garagedeuropener
  2. Zwaai uw RFID-tag in de buurt van de antenne
  3. Kijk naar de deur open

U hebt nu het basisbewijs van het concept voor het openen van de deur met een handgebaar.

Stap 5. Maak het permanent

  1. Monteer de antenne ergens waar het de tag kan lezen via de deur of de muur. RFID kan vaste objecten passeren, zodat een antenne achter de garagewand verborgen kan zijn, afhankelijk van het materiaal. Het kan even duren en laten om een ​​plaats te vinden waar het de tag kan lezen.
  2. Breng het circuit over naar een perfboard en soldeer een permanente oplossing
  3. Plaats het project in een doos en monteer het in je garage.

Broncode voor dit project

/ * RFID Garagedeuropener voorbeeldcode door Ben Miller @VMfoo ReadKey-functie geïnspireerd en geleend gedeeltelijk vanuit het arduino-speelveldvoorbeeld: http://playground.arduino.cc/Code/ID12 * / // neem de SoftwareSerial-bibliotheek op zodat u kunt gebruik de volgende functies: # include // de seriële poorten van de hardware verlaten voor foutopsporing #define rxPin 2 // pin om gegevens van RFID-lezer te ontvangen #define txPin 3 // verzendpen voor softserialitialisatie #define doorPin 4 // pin om relais te activeren / / een nieuwe seriële poort instellen NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); byte pinState = 0; // voor binnenkomende seriële gegevens int incomingByte = 0; // tekenreeks voor de waarde van de tag-waarde van de RFID-tag [10]; // Welke tagwaarden zijn toegestaan ​​char * goodTags [] = "3D00CFBB80", // "######", // voeg een andere tag toe door de #'s te vervangen door uw code en deze regel niet te vermelden; // Bereken het aantal tags in de array boven int tagCount = sizeof (goodTags) / sizeof (goodTags [0]); void setup () // definieer pin modes voor de opener relay pinMode (doorPin, OUTPUT); // stel de datasnelheid in voor de SoftwareSerial-poort RFIDPort.begin (9600); Serial.begin (38400); // seriële monitortarief Serial.println ("RFID GDO V0.1"); // hello world void loop () // loop en lees if (RFIDPort.available ()) if (readKey ()) // controleer tag waarde if (goodTag ()) // als dit is toegestaan ​​openDoor ();  else Serial.println ("Bad tag. Ga weg.");  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) // Als we bij de checksumbyte zijn, controlesom ^ = tagBytes [bytesRead >> 1]; // Bereken de controlesom ... (XOR);  else tempByte = val; // Sla eerst het eerste hexadecijfer op); bytesRead ++; // Klaar om het volgende cijfer te lezen // Verzend het resultaat naar de host die via USB is verbonden als (bytesRead == 12) // 12-cijferige leesregel is voltooid tagValue [10] = '\ 0'; // Null-beëindig de reeks Serial.print ("Tag read:"); voor (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; 

Samenvatting

In deze tutorial heb ik de basisbeginselen van RFID-technologie geschetst en hoe je deze kunt gebruiken voor je eigen projecten. Hoewel de componenten op een laag niveau die RFID lezen, voor hobbyisten moeilijk te gebruiken kunnen zijn, maken RFID-breakoutborden het mogelijk om RFID zeer eenvoudig te gebruiken in projecten met Arduino of zelfs een Raspberry Pi via een seriële poort. Zodra een ID uit een tag is gelezen, is het eenvoudig om op de informatie in te spelen. In dit voorbeeld hebben we een relais geactiveerd om een ​​garagedeur te openen.

In aanvulling op:

  • Ik onderzocht de verschillen in typen RFID-technologie
  • Ik onderzocht het concept van hoe RFID werkt
  • U volgde een voorbeeld van het aansluiten van een RFID-lezer op een Arduino
  • Lees en print de RFID-identificatiecode uit een ID-tag
  • Een relais aan het circuit toegevoegd om een ​​contact te sluiten wanneer het juiste label werd gelezen
  • Bekabelde het relais naar een garagedeuropener om op RFID gebaseerde toegangscontrole toe te voegen