So öffnen Sie Ihr Garagentor mit RFID

Radio Frequency Identification (RFID) ist eine aufregende Technologie, die in den letzten Jahren an Popularität gewonnen hat. Dadurch wird die Möglichkeit geschaffen, etwas mit einem sehr kleinen passiven Chip zu kennzeichnen, der dann das Fernlesen der Informationen auf diesem Chip ermöglicht. RFID-Tags werden häufig für Sicherheitstürkarten, zur Identifizierung verlorener Haustiere und in letzter Zeit für Nahfeldkommunikation in Smartphones verwendet.  

In diesem Lernprogramm werde ich einige Grundlagen zur Funktionsweise von RFID erläutern, einige verschiedene Arten von RFID beschreiben und zeigen, wie Sie einen RFID-Garagentoröffner bauen können.


Die Grundlagen von RFID

RFID ist eine wirklich coole Technologie, die die Energie des RFID-Lesersignals zur Stromversorgung des Tags oder Transponders verwendet. Dies gibt dann ein Signal zurück, das den Inhalt des Speicherchips des Tags enthält.


Abfragesignal speist den RFID-Chip

Es gibt eine Reihe von RFID-Typen. Bei einigen Tags kann eine kleine Datenmenge geschrieben werden, die später gelesen werden kann. Andere sind so ausgereift, dass der Leser einen Verschlüsselungsschlüssel signalisieren muss, bevor der Tag den Inhalt decodieren und zurückgeben kann. Die meisten Tags enthalten jedoch lediglich permanente eindeutige ID-Nummern. Weitere Informationen zu RFID finden Sie in Wikipedia.

RFID-Chipformate und -frequenzen variieren erheblich. Es gibt eine ganze Buchstabensuppe von Typen. Viele Smartphones lesen NFC- und MIFARE-Formate.  

Für dieses Projekt werde ich jedoch den Chip des Typs EM4100 125K Wiegand verwenden. Diese Art von RFID verwendet kostengünstige Lesegeräte und Tags, was der Hauptgrund für diesen Chip in meinem Kit ist. Solange Sie über kompatible Lesegeräte und Tags verfügen, ist die RFID-Art für dieses Projekt ohne Bedeutung.


Das RFID-Projekt

In diesem Projekt werde ich ein RFID-Tag und ein Arduino verwenden, um ein Garagentor zu öffnen, wenn ein autorisiertes Tag erkannt wird. Die Verwendung einer Low-Level-RFID-Komponente ist eine ziemlich komplizierte Aufgabe. Daher verwenden wir eine Breakout-Platine, die das Low-Level-Lesen vornimmt und den Tag-Code über serielle Pins überträgt. So funktionieren die meisten RFID-Breakout-Boards. Dieses Tutorial verwendet ein solches Breakout-Board.

Für dieses Tutorial werde ich den Entwurf für den Garagentoröffner ausarbeiten und einen funktionalen Proof-of-Concept erstellen.


Projektkomponenten

  • Arduino (Fast jedes 5V-Modell sollte funktionieren, ich habe eine Uno verwendet)
  • RFID-Lesegerät mit Antenne
  • RFID-Tags (Ich habe festgestellt, dass die Schlüsselanhänger des Typs EM4100 125K Wiegand günstig und einfach bei ebay zu finden sind)
  • Brotschneidebrett
  • Eine Standard-LED
  • 220 Ohm Widerstand (Rot, Rot, Braun)
  • Relais (Aleph SD1A05AWJ)
  • Diode (1N4148)
  • Schaltdrähte

Wie es funktioniert

Der Prozess ist ziemlich einfach.

Zunächst liest das RFID-Lesegerät den Tag und überträgt den Code an den Arduino. Der Arduino liest dann den Code von der seriellen Verbindung und vergleicht ihn mit einer Liste autorisierter RFID-Codes. Wenn sich das Tag auf der autorisierten Liste befindet, zieht der Arduino einen Pin hoch, um 5 V bereitzustellen, um ein Relais zu schließen. Wenn das Relais schließt, verbindet es die Klemmen der Signalkontakte des Garagentors. Das Garagentor öffnet sich dann.


Der Build

Schritt 1. Das RFID Reader Setup

Verwenden Sie das Datenblatt oder die Anweisungen auf dem RFID-Lesegerät, um die Stromversorgungs-, Erdungs-, Serien- und Antennenstifte zu verbinden. Unten ist das Pin-Out-Diagramm des Lesers, den ich habe. Wir verwenden die Arduino-Pins 2 und 3 für die serielle Kommunikation mit der RFID-Platine, sodass wir die Pins 0 und 1 für die Konsolenausgabe belassen können.


Das Datenblatt zeigt die Pin-Outs

Befolgen Sie diese Schritte, um die RFID-Leserkarte anzuschließen.

  1. Verbinden Sie die Masse mit dem Erdungsstift des Lesers
  2. Verdrahten Sie den Stromversorgungsstecker des Lesegeräts
  3. Verbinden Sie den Arduino Pin 2 mit dem TX-Pin der RFID-Platine
  4. Verbinden Sie den Arduino-Pin 3 mit dem RX-Pin
  5. Verbinden Sie die Antenne mit dem Lesegerät
  6. Verbinden Sie die LED-Anode mit dem Pwr-Out-Pin der Platinenanzeige.
  7. Verbinden Sie den Kathodenstift der LED über den Widerstand mit Masse

Mein Steckbrett-Setup wird unten gezeigt.


Das Arduino ist mit der RFID-Leserkarte verbunden

Schritt 2. Relais-Setup

Fügen Sie das Relais dem Steckbrett hinzu. Die beiden internen Pins führen den Elektromagneten, der das Relais schließt. In der folgenden Abbildung können Sie sehen, wie sich der Strom durch die Pins 3 bis 7 auf das Relais auswirkt.


Relaisschema
  1. Führen Sie Pin 4 vom Arduino zu Pin 3 des Relais aus. Wenn hochgezogen wird, liefert dieser Pin genügend Strom, um das Relais zu schließen.
  2. Pin 7 am Relais auf Masse legen.
  3. Fügen Sie die Diode zwischen Pin 3 und 7 mit dem Farbstreifen in Richtung Pin 3 des Relais hinzu.
Spitze: Wenn Sie ein Relais oder wirklich alles verwenden, das ein elektromagnetisches Feld verwendet, verwenden Sie immer eine "Flyback" -Diode, um das System vor der Spannungsspitze zu schützen, wenn das Magnetfeld zusammenbricht.

Dies ist mein Steckbrett mit dem Relais verdrahtet.

Breadboard mit RFID- und Relais-Setup

Schritt 3. Programmieren Sie Arduino

  1. Kopieren Sie den Code am Ende dieses Lernprogramms. Der Code wurde ausführlich kommentiert, um Ihnen zu helfen, zu verstehen, was bei jedem Schritt passiert. Am oberen Rand des Codes können Sie sehen, wo die Liste der RFID-Tag-Werte geändert werden kann. Wir werden den Code einmal ausführen und Ihr RFID-Tag bewegen, sodass Sie die ID von Ihren autorisierten Tags kopieren und in den endgültigen Code einfügen können.
  2. Klicken hochladen in der Arduino IDE
  3. Öffnen Sie den seriellen Monitor der Arduino IDE, indem Sie drücken STRG-UMSCHALTTASTE M oder Menü auswählen Extras> Serienmonitor.
Spitze: Stellen Sie sicher, dass die Baudrate des seriellen Monitors dem entspricht, was wir im eingestellt haben Konfiguration() Funktion. In diesem Beispiel: 38400.

Sie sollten so etwas sehen:

RFID-GDO V0.1
Tag gelesen: 3D00CFBB80
Prüfsumme: C9 - bestanden.
3D00CFBB80

Bad-Tag Geh weg.

Kopieren Sie Ihre ID und fügen Sie sie ein (3D00CFBB80 in diesem Beispiel) in den Code in die Liste goodTags. Beachten Sie, dass sich ein anderer Code in einer neuen Zeile befinden kann, solange er von Anführungszeichen umgeben ist und nach ihm ein Komma steht. Eine einzelne Codeliste kann ungefähr so ​​aussehen:

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

Klicken Sie in der Arduino IDE auf Hochladen, und öffnen Sie den seriellen Monitor der Arduino IDE, indem Sie auf drücken STRG-UMSCHALTTASTE M oder Menü auswählen Extras> Serienmonitor.

Wenn Sie jetzt den Code ausführen, sehen Sie Folgendes:

RFID-GDO V0.1
Tag gelesen: 3D00CFBB80
Prüfsumme: C9 - bestanden.
3D00CFBB80

Tür öffnen!

Unten ist ein Foto von mir, das den RFID-Tag mit dem Relais testet. Das Multimeter ist an den Pins 1 und 9 des Relais angeschlossen, so dass beim Schließen des Relais der Durchgang erkannt wird.


Testen der RFID-Schleife

Wenn ein Multimeter angeschlossen ist, können Sie den Piepton des Multimeters hören, um die Kontinuität anzuzeigen, und dann ein sehr schwaches Klingeln, und das Relais schnappt zurück.

Schritt 4. Öffnen der Garagentür

Die meisten Garagentoröffner funktionieren sehr einfach durch Öffnen, wenn ein Kontakt geschlossen ist. Wenn Sie die Taste an der Wand drücken, schließen Sie den Kontakt. An meinem Garagentoröffner habe ich Terminals, an denen die Drähte der Taste angeschlossen sind. Sie können die hier hervorgehobenen Terminals sehen:


Terminals für Garagentüröffner
  1. Stecken Sie die Pins 1 und 9 vom Relais auf dem Steckbrett in die Klemmen des Garagentüröffners
  2. Bewegen Sie Ihr RFID-Tag in der Nähe der Antenne
  3. Sieh zu, wie sich die Tür öffnet

Sie haben jetzt den grundlegenden Proof-of-Concept für das Öffnen der Tür mit einer Handbewegung.

Schritt 5. Machen Sie es dauerhaft

  1. Montieren Sie die Antenne an einer Stelle, an der sie das Tag durch die Tür oder Wand lesen kann. RFID kann feste Gegenstände durchdringen, so dass eine Antenne je nach Material hinter der Garagenwand verborgen werden kann. Es kann einige Versuche erfordern, einen Ort zu finden, an dem das Tag gelesen werden kann.
  2. Übertragen Sie die Schaltung auf ein Perfboard und verlöten Sie eine dauerhafte Lösung
  3. Legen Sie das Projekt in eine Box und montieren Sie es in Ihrer Garage.

Quellcode für dieses Projekt

/ * RFID Garagentoröffner-Beispielcode von Ben Miller @VMfoo Die ReadKey-Funktion wurde zum Teil vom Arduino-Spielplatzbeispiel inspiriert und entlehnt: http://playground.arduino.cc/Code/ID12 * / // Sie können die SoftwareSerial-Bibliothek hinzufügen Verwenden Sie die folgenden Funktionen: #include // Verlassen der seriellen Hardwareanschlüsse für das Debuggen #define rxPin 2 // Pin zum Empfangen von Daten vom RFID-Lesegerät #define txPin 3 // Sende-Pin für Softserial-Initialisierung #define doorPin 4 // Pin zum Auslösen des Relais / / neue serielle Schnittstelle einrichten NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); Byte PinState = 0; // für eingehende serielle Daten int incomingByte = 0; // Zeichenfeld für den Wert des RFID-Tags char tagValue [10]; // Welche Tag-Werte sind autorisiert? * GoodTags [] = "3D00CFBB80", // "######", // fügen Sie ein weiteres Tag hinzu, indem Sie die # durch Ihren Code ersetzen und diese Zeile auskommentieren. // Berechne die Anzahl der Tags im obigen Array int intCount = sizeof (goodTags) / sizeof (goodTags [0]); void setup () // Pinmodi für das Öffnerrelais definieren pinMode (doorPin, OUTPUT); // Setze die Datenrate für den SoftwareSerial Port RFIDPort.begin (9600); Serienbeginn (38400); // serielle Überwachungsrate Serial.println ("RFID GDO V0.1"); // Hallo Welt void loop () // Schleife und lese if (RFIDPort.available ()) if (readKey ()) // Tagwert prüfen if (goodTag ()) // wenn dies openDoor erlaubt ist ();  else Serial.println ("Ungültiger Tag. Gehen Sie weg.");  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) // Wenn wir uns im Prüfsummen-Byte befinden, gilt die Prüfsumme ^ = tagBytes [bytesRead >> 1]; // Berechne die Prüfsumme… (XOR);  else tempByte = val; // Die erste Hex-Ziffer zuerst speichern; bytesRead ++; // Bereit zum Lesen der nächsten Ziffer // Das Ergebnis wird an den über USB angeschlossenen Host gesendet, wenn (bytesRead == 12) // 12-stellige Lesung abgeschlossen ist tagValue [10] = '\ 0'; // null-terminate den String 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; 

Zusammenfassung

In diesem Tutorial habe ich die Grundlagen der RFID-Technologie beschrieben und erläutert, wie Sie diese für Ihre eigenen Projekte nutzen können. Während die Low-Level-Komponenten, die RFID lesen, für Hobbyisten möglicherweise schwierig zu verwenden sind, ermöglichen RFID-Breakout-Boards die Verwendung von RFID in Projekten mit Arduino oder sogar einem Raspberry Pi über einen seriellen Anschluss. Sobald eine ID aus einem Tag gelesen wurde, kann auf die Informationen einfach reagiert werden. In diesem Beispiel haben wir ein Relais betätigt, um ein Garagentor zu öffnen.

In Ergänzung:

  • Ich habe die Unterschiede in der RFID-Technologie untersucht
  • Ich untersuchte das Konzept, wie RFID funktioniert
  • Sie folgten einem Beispiel für das Anschließen einer RFID-Leserkarte an einen Arduino
  • Lesen und drucken Sie den RFID-Identifikator aus einem ID-Tag
  • Ein Relais wurde der Schaltung hinzugefügt, um einen Kontakt zu schließen, wenn das richtige Tag gelesen wurde
  • Verdrahtete das Relais mit einem Garagentoröffner, um eine RFID-basierte Zugangskontrolle hinzuzufügen