RFID-Leser: Apropos Technologie. Einblick: RFID und andere Tags

Das EM4100-Tag speichert 64 Bit Daten, was bedeutet, dass das Design ein 64-Bit-Schieberegister enthalten muss, das aus acht 8-Bit-74HC165-Registern besteht. Das Register wird alle 64 Verschiebungen zurückgesetzt, um die Daten zurückzusetzen und von vorne zu beginnen. Die Daten an den Registereingängen lauten wie folgt:
  • Timing-Muster: neun Einheiten
  • Hersteller-/Versions-ID: 2 Blöcke mit 5 Bits, davon 4 Bits Daten und das fünfte Bit Parität
  • Eindeutiger Identifikator: 8 Blöcke mit 5 Bits, davon 4 Datenbits und das fünfte Paritätsbit
  • Prüfsumme: 4 Paritätsbits, gezählt pro Spalte
  • Stoppbit: „0“

Selbst verschlüsselte Tags sind anfällig für verschiedene Angriffe. Darüber hinaus wird es immer einfacher, Tags auf NFC-fähigen Smartphones zu emulieren (die normalerweise mit 13,56 MHz arbeiten). Schreiben Sie einfach eine korrekte Feldmodulationsanwendung und Sie können tun und lassen, was Sie wollen.

Als Standardausrede möchte ich Sie daran erinnern, dass der Autor (Und ein Übersetzer! - Notiz Übersetzung) übernimmt keine Verantwortung für die Folgen der Verwendung der Informationen aus diesem Artikel. Der Leser muss für alle seine Handlungen verantwortlich sein.

Rahmen

Manchmal Sehr glücklich. Ein schönes Gehäuse würde sich gerade jetzt als nützlich erweisen, wenn der Prototyp fertig ist und die Leiterplatte bestellt wurde. Und zu diesem Zeitpunkt beendete Fleming die Montage und brachte die Laserschneidmaschine OSAA PhotonSaw auf den Markt. Nach einem Jahr Projektarbeit ist der Laser bereit, die ersten Teile zu schneiden. Flemming und Roon nehmen die letzten Anpassungen vor und ersetzen den Aluminiumdeckel des Lasergehäuses. Sie können sich vorstellen, wie aufgeregt wir alle waren, als dieses Ding funktionierte.

Bei laufender Maschine konnten wir unser Projekt testen wahres Leben. Das Gehäuse für unseren RFID-Tag wurde aus 2 mm Plexiglas gefertigt. Dieser Körper ist das erste Objekt, das auf PhotonSaw erstellt wurde, ja!

Es entstand die Idee, die Spule außen am Körper anzubringen. Zunächst wurde beschlossen, die halbe Korpushöhe zu nutzen, was in der Praxis jedoch nicht funktionierte (die zusätzlichen Löcher in den Längsseiten werden daher nicht genutzt). Die Spule passt perfekt um den Umfang des gesamten Körpers, obwohl ich Zweifel hatte, ob die rechteckige Wicklung (105 x 55 mm) für eine normale elektromagnetische Kommunikation zu groß wäre.

Die Testspule wurde ohne Berechnung mit 0,4 mm Draht in 66 Windungen gewickelt. Und natürlich hatten wir wieder Glück, denn die Spule war genau so, wie sie sollte, mit einer Induktivität von 645 μH und einer angeschlossenen Markierung, die eine Resonanzfrequenz von 125,2 kHz ergab. Tests an einem Türleser haben gezeigt, dass der Prototyp mit dieser Spule einwandfrei funktioniert.

Mit einer Spule außerhalb des Gehäuses kann dessen Dicke reduziert werden. Die Innendicke hängt nun nur noch von der Höhe der Teile auf der Platine ab und sollte unter Berücksichtigung der Platinendicke etwa 6 mm betragen. Außerdem wäre es schön, etwas Gravur hinzuzufügen. Aus ästhetischen und ergonomischen Gründen schlug Flemming vor, die Körperseiten abzurunden. Ein gebogener Körper schützt auch die Seiten der Spule besser, da dort, wo keine große Spannung herrscht, die Drahtspulen dazu neigen, herauszustehen.

Die PhotonSaw-Maschine ist noch nicht in einwandfreiem Zustand: Gravur vorhanden obere Abdeckung deutlich nach unten verschoben. Es muss endgültig debuggt werden, bevor die endgültige Version des Gehäuses hergestellt wird. Bei gekrümmten Pfaden kam es ebenfalls zu Berechnungsfehlern Software, da der Strahl nicht zu zurückkehrte Startposition nach dem Passieren einer geschlossenen Flugbahn. Aber trotzdem sehen die Kurven wirklich glatt aus.

Leiterplattenmontage

Das bestellte Board ist eingetroffen:

Der Zusammenbau war nicht sehr schwierig. Auf die Platine wurde Lötpaste schabloniert, alle Teile platziert und dann in einem selbstgebauten Ofen gelötet.

Über die Isolationskapazität (47 pF hat einen Widerstand von ca. 27 kOhm bei einer Frequenz von 125 kHz) und Schutzdioden wird der Strom den Stromschienen zugeführt. Die von der Spule kommende Energie reicht aus, um die Versorgungsspannung von etwa 1 V aufrechtzuerhalten. Der Strom kann 250–500 μA erreichen. Überraschenderweise scheinen die 74HC-Chips mit diesem Netzteil zu funktionieren. Leider passieren unter dieser Spannung einige ziemlich seltsame Dinge. 74HC-Chips verfügen über einen internen Reset-Schaltkreis und Sie müssen sicherstellen, dass dieser funktioniert. Bitte beachten Sie, dass das Deaktivieren der Schutzdioden keine Abhilfe schafft. An den Eingängen der Mikroschaltungen befinden sich interne Schutzdioden, die in diesem Fall öffnen und die gleiche Aufgabe erfüllen.

Ein Power-Reset wird nur ausgelöst, wenn die Versorgungsspannung für einen bestimmten Zeitraum unter einen bestimmten Wert fällt. Bleibt die Spannung zu hoch, kann die interne Logik durcheinander geraten, da sich einige Teile davon möglicherweise in einem undefinierten Zustand befinden, während andere ordnungsgemäß funktionieren. Um alle Chips in einen konsistenten Zustand zu versetzen, ist ein interner Reset erforderlich. Daher arbeitet die Schaltung bei sehr niedrigen Versorgungsspannungen instabil.

Die folgenden Symptome wurden beobachtet: Der Tag funktioniert einige Zeit und sendet korrekte Daten. Wenn die Spule aus dem Lesegerät entfernt und dann wieder zurückgebracht wird, können Sie darauf wetten, ob sich der Tag ausschaltet. Manchmal funktioniert es, manchmal nicht. Das Deaktivieren der PLL verschlimmert die Situation. Ein geringer Stromverbrauch bedeutet, dass das Lesegerät gelegentlich Daten von einem ausgeschalteten Tag empfängt. Das ist es, was „energieeffizientes System“ bedeutet.

Es gibt zwei Lösungen: 1) Reduzieren Sie den Kondensator in der Taktwiederherstellungsschaltung auf 15 pF und 2) schließen Sie einen 22-100-kOhm-Widerstand zwischen Strom und Masse an, um überschüssige Energie abzuleiten. Die zweite Methode führt dazu, dass die Leckage während des Betriebs zunimmt und ist bei der Reduzierung der Kapazität des Kondensators nicht unbedingt erforderlich. Es wird jedoch als Option angeboten und ist immer noch besser als der unbestimmte Zustand der Chips.

Strom- oder Spannungsmodulation

Der Modulator verursachte eine neue Dosis Kopfschmerzen. Die Modulation verschwand vollständig, wenn die Spule in einem bestimmten Abstand vom Lesegerät platziert wurde. Dies kann auch passieren, wenn die Spule zum Lesegerät hin oder vom Lesegerät weg bewegt wird.

Es stellte sich heraus, dass der Grund in der Modulatorschaltung lag. MOSFETs schließen die Spule mit einem Widerstand mit einem bestimmten Widerstandswert kurz. Wenn jedoch der Stromverbrauch des Stromkreises hoch ist, ist der Modulatorwiderstand viel höher als der Widerstand der Stromkreise. Dies führt dazu, dass die Modulationstiefe vom aufgenommenen Strom abhängt, was nicht sehr gut ist. Die Situation wurde durch die Wahl einer begrenzenden Zenerdiode bei einer niedrigeren Spannung als im Prototyp noch verschlimmert.

Es wurde beschlossen, den Modulator vom Spannungsmodulationsmodus auf den Strommodulationsmodus umzustellen. Im ersten Modus befand sich der Widerstand im Drain-Kreis und ist jetzt zwischen Source und Masse geschaltet. Die Gate-Source-Spannung fällt an diesem Widerstand ab, bis ein Wert knapp über der Öffnungsschwelle des Transistors (0,9–1,1 V) bleibt, wodurch der Transistor in den linearen Modus geschaltet wird. Jetzt ist der Strom durch den Transistor unabhängig von der Drain-Spannung stabil.

Tests an einem Prototyp zeigten, dass die Strommodulation sehr gut funktioniert. Der billige No-Name-Reader stürzt nicht mehr ab (okay, vielleicht einmal in hundert oder so). Wir können davon ausgehen, dass diese Änderung bei anderen Readern wunderbar funktionieren wird, und das Tag wird nun wahrscheinlich bei den meisten von ihnen funktionieren können.

Fertige Version 1

Sie können die vorgenommenen Änderungen auf der Platine sehen. Ich hatte keinen 15 pF SMD-Kondensator, ich musste einen normalen mit Beinen löten. Der Modulator hat zusätzliche Widerstände an den Sources der Transistoren erhalten. Insgesamt akzeptabel für die erste Version.

(Bilder sind anklickbar)





Videodemonstration

Abschluss

Man könnte meinen, dass dieses auf 7400-Logik basierende Projekt als Retro-Schaltungsdesign klassifiziert werden kann, aber das ist nicht ganz richtig. Erstens ist die moderne 74HC-Familie noch nicht so alt. Zweitens sind Stromkreise mit geringem Stromverbrauch immer relevant. Drittens werden in modernen Designs häufig Single-Gate-ICs (wie der verwendete Schmitt-Trigger) verwendet. Es wird oft vergessen, dass die Technologieentwicklung auch bei älteren Chipfamilien nicht halt macht. Sie fielen vor dem Hintergrund der allgemeinen Vielfalt einfach weniger auf.

Der analoge Teil erwies sich als schwieriger zu entwickeln als der digitale Teil. Teilweise aufgrund fehlender Spezifikationen, vor allem aber aufgrund der vielen Kompromisse, die zur Einhaltung der Parameter erforderlich sind, und unvorhergesehener Nebenwirkungen. Bei digitalen Designs gibt es relativ wenige Optionen, während bei analogen Designs in der Regel ein Gleichgewicht zwischen verschiedenen (und oft gegensätzlichen) Kriterien erforderlich ist.

Ich muss zugeben, dass die 74HC-Chips sehr, sehr gut verarbeitet sind. Die Entwickler wussten, was sie taten und erreichten einen sehr geringen Stromverbrauch. Zuerst hatte ich einige Zweifel, ob der Tag mit passiver Energie betrieben werden kann, aber nachdem ich die Spezifikationen gelesen hatte, ging es nur noch um das richtige Schaltungsdesign. Dennoch gibt es immer noch Möglichkeiten, verschiedene Teile des Tags zu optimieren.

Nun wollen wir sehen, wie sich dieses Projekt beim 7400-Wettbewerb 2012 schlagen wird. Bewerbungsschluss für den Wettbewerb ist der 31. November. Wir wünschen dem Autor viel Glück! - Notiz Übersetzung

Stichworte:

  • RFID
  • 7400-Wettbewerb
  • Overengineering
  • Logik
  • überall Harken
Tags hinzufügen

Die Vorteile von elektronischen Schlössern sind nicht zu unterschätzen. Der Einsatz elektronischer Schlösser ermöglicht es uns beispielsweise, uns von einem ganzen Haufen schwerer Schlüssel zu befreien.

Das Wichtigste für den durchschnittlichen Benutzer ist die Benutzerfreundlichkeit und Zuverlässigkeit des elektronischen Schlosses. Diese Anforderungen werden durch Geräte auf Basis von RFID (von engl. Radio Frequency IDentification – Radiofrequenzidentifikation) – kontaktlose Radiofrequenzidentifikation – erfüllt.

Ein solches Identifikationssystem besteht aus einem stationären Empfänger und einem tragbaren Sender (Transponder).

In diesem Artikel vorgestellt RFID-Schloss funktioniert ähnlich. Die Identifizierung basiert auf dem Lesen einer 40-Bit-Datei Seriennummer Einzigartige Karten. Der Betriebszustand wird signalisiert Tonsignal. Das Schloss kann in zwei Hauptmodi betrieben werden: Lesen und Registrieren einzigartiger Karten im Mikrocontroller-Speicher. Insgesamt können 4 Karten im Speicher gespeichert werden.

Kurzcharakteristik des RFID-Schlosses;

Beschreibung der Funktionsweise des RFID-Schloss

Die gesamte Schaltung kann in zwei Teile unterteilt werden: digital und analog. Digitale Schaltung besteht aus einem Mikrocontroller, der das gesamte Gerät steuert. Die Schaltung verwendet einen PIC12F683-Mikrocontroller in einem DIP8-Gehäuse.

Der interne RC-Generator des Mikrocontrollers ermöglicht Ihnen dies Taktfrequenz mit einem programmierbaren Frequenzbereich von 37 kHz ... 8 MHz.

Über einen im Controller enthaltenen Hardware-PWM-Signalgenerator werden Rechteckimpulse mit einer Reinheit von 125 kHz erzeugt, die nach Verstärkung an die Leseantenne gesendet werden.

Zur Generierung dient der Timer TMR2, der über einen digitalen Komparator nach Zählen der entsprechenden Impulszahl automatisch zurückgesetzt wird. Darüber hinaus wird der Zustand des GP2-Ausgangs automatisch umgekehrt.

Somit können wir Impulse beliebiger Füllfrequenz erzeugen. Beteiligt sich nicht an diesem Prozess CPU, wodurch es andere Operationen ausführen kann.

Die auf diese Weise erhaltene Wellenform wird an den Eingang eines Verstärkers gesendet, der aus den Transistoren VT1 und VT2 besteht, und dann an die Antennenspule des Lesegeräts, die zur kontaktlosen Stromversorgung des in der Unique-Karte befindlichen Schaltkreises verwendet wird.

Bei Verwendung von Unique-Karten beträgt die Datenübertragungsrate etwa 2 kbit/s (125000/64=1953 bps). Der eindeutige Code jeder autorisierten Karte wird im nichtflüchtigen EEPROM-Speicher des Mikrocontrollers gespeichert.

Der Betriebszustand des Schlosses wird über einen an Pin GP4 angeschlossenen Summer signalisiert. Das Relais wird vom Ausgang GP5 über den Transistor VT3 gesteuert.

Über zwei Jumper wird die Betriebsart des Mikrocontrollers eingestellt. Jumper JP2 versetzt den Controller in den Programmiermodus für neue Karten und JP1 ändert die Art und Weise, wie das Relais zwischen Schaltmodus und vorübergehender Aktivierung gesteuert wird.

Der analoge Teil der Schaltung dient dazu, das in der Spule induzierte Signal zu verstärken und in digitale Form umzuwandeln. Das Hauptelement ist hier der Dual-Operationsverstärker LM358. Die Spule wird an den CON1-Anschluss angeschlossen.

Das darin induzierte Signal gelangt zur Anode der Diode VD1. Da neben dem Nutzsignal noch eine Trägerwelle (125 kHz) und zufällige Störsignale vorhanden sind, wird der Schaltung ein Bandpassfilter hinzugefügt, der die Bandbreite bei einer Frequenz von etwa 2 kHz begrenzt.

Nach aller Bearbeitung schon entsprechend Digitalsignal geht an den GP3-Eingang des Mikrocontrollers.

Die Antenne besteht aus 40 Windungen emailliertem Wickeldraht mit einem Durchmesser von 0,1...0,3 m
m, aufgewickelt auf einen temporären Dorn mit einem Durchmesser von 40...60 mm. Anschließend sollte die Spule zum Schutz mit Isolierband umwickelt werden.

Um den gesamten Stromkreis mit Strom zu versorgen, wird ein Typstabilisator verwendet. Die VD4-Diode schützt den Stabilisator vor Schäden, wenn der Strom mit falscher Polarität angeschlossen wird.

Die Versorgungsspannung wird dem CON2-Pin zugeführt. Sein Wert sollte im Bereich von 9...12 V liegen. Eine höhere Spannung schadet dem Stabilisator nicht, kann sich dadurch aber stark erwärmen.

Eine korrekt zusammengebaute Schaltung ist sofort einsatzbereit und Sie können mit der Registrierung autorisierter Karten beginnen.

Um Karten aufzuzeichnen, müssen Sie den Jumper JP2 bei ausgeschaltetem Gerät schließen und das Gerät wieder einschalten. Der Mikrocontroller bestätigt den Programmiermodus mit einem zwei Sekunden langen Piepton und wartet darauf, dass vier RFID-Karten nacheinander angesprochen werden.

Eine korrekt entschlüsselte Seriennummer der Karte wird durch einen doppelten Piepton signalisiert und anschließend im Speicher des Controllers gespeichert. Nach der Programmierung letzte Karte Der Programmiervorgang ist beendet, ein langer Piepton ertönt und der Mikrocontroller geht in den normalen Betriebsmodus über.

Der Jumper muss geöffnet werden, damit der Prozessor beim Ausschalten der Stromversorgung nicht wieder in den Programmiermodus versetzt wird. Beträgt die Anzahl der berechtigten Karten weniger als vier, muss eine Karte mehrmals beantragt werden (insgesamt sollten es 4 Registrierungen sein).

Während des Betriebs wird die Annäherung der Karte an die Antenne durch einen Doppelsummer und das Einschalten des Relais signalisiert. Wenn der Jumper JP1 nicht installiert ist, führt jede Annäherung der Karte dazu, dass sich der Relaiszustand in den entgegengesetzten Zustand ändert. Wenn es installiert ist, schaltet sich das Relais für 10 Sekunden ein und kehrt danach in seinen ursprünglichen Zustand zurück.

(62,6 KB, Downloads: 1.051)

In der heutigen Lektion geht es um die Verwendung eines RFID-Lesegeräts mit Arduino, um ein einfaches Schließsystem zu erstellen. in einfachen Worten- RFID-Schloss.

RFID (engl. Radio Frequency IDentification, Radiofrequenzidentifikation) ist ein Verfahren zur automatischen Identifizierung von Objekten, bei dem in sogenannten Transpondern, sogenannten RFID-Tags, gespeicherte Daten mithilfe von Funksignalen gelesen oder geschrieben werden. Jedes RFID-System besteht aus einem Lesegerät (Lesegerät, Reader oder Interrogator) und einem Transponder (auch RFID-Tag genannt, manchmal wird auch die Bezeichnung RFID-Tag verwendet).

In diesem Tutorial wird ein RFID-Tag mit Arduino verwendet. Das Gerät liest die eindeutige Kennung (UID) jedes RFID-Tags, das wir neben dem Lesegerät platzieren, und zeigt sie auf dem OLED-Display an. Wenn die UID des Tags mit dem vordefinierten Wert übereinstimmt, der im Arduino-Speicher gespeichert ist, wird auf dem Display die Meldung „Unlocked“ angezeigt. Wenn die eindeutige ID nicht einem vordefinierten Wert entspricht, wird die Meldung „Entsperrt“ nicht angezeigt – siehe Foto unten.

Das Schloss ist geschlossen

Das Schloss ist geöffnet

Zur Erstellung dieses Projekts benötigte Teile:

  • RFID-Leser RC522
  • OLED-Display
  • Brotbrett
  • Drähte

Weitere Details:

  • Batterie (Powerbank)

Die Gesamtkosten der Projektkomponenten beliefen sich auf etwa 15 US-Dollar.

Schritt 2: RFID-Leser RC522

Jeder RFID-Tag enthält einen kleinen Chip (weiße Karte auf dem Foto). Wenn man diese RFID-Karte mit einer Taschenlampe beleuchtet, erkennt man den kleinen Chip und die Spule, die ihn umgibt. Dieser Chip verfügt nicht über eine Batterie zur Stromerzeugung. Über diese große Spule wird das Lesegerät drahtlos mit Strom versorgt. Es ist möglich, eine solche RFID-Karte aus einer Entfernung von bis zu 20 mm zu lesen.

Den gleichen Chip gibt es auch in RFID-Schlüsselanhängern.

Jedes RFID-Tag verfügt über eine eindeutige Nummer, die es identifiziert. Dies ist die UID, die auf dem OLED-Display angezeigt wird. Mit Ausnahme dieser UID kann jedes Tag Daten speichern. Dieser Kartentyp kann bis zu 1.000 Daten speichern. Beeindruckend, nicht wahr? Diese Funktion wird heute nicht verwendet. Heutzutage geht es nur noch darum, eine bestimmte Karte anhand ihrer UID zu identifizieren. Die Kosten für den RFID-Leser und diese beiden RFID-Karten betragen etwa 4 US-Dollar.

Schritt 3: OLED-Display

In der Lektion wird ein 0,96-Zoll-128x64-I2C-OLED-Monitor verwendet.

Dies ist ein sehr gutes Display für die Verwendung mit Arduino. Da es sich um ein OLED-Display handelt, ist der Stromverbrauch gering. Der Stromverbrauch dieses Displays beträgt etwa 10–20 mA und hängt von der Anzahl der Pixel ab.

Das Display hat eine Auflösung von 128 x 64 Pixel und ist winzig klein. Es gibt zwei Anzeigeoptionen. Einer davon ist einfarbig und der andere kann, wie der in der Lektion verwendete, zwei Farben anzeigen: Gelb und Blau. Der obere Bildschirmrand kann nur gelb und der untere nur blau sein.

Dieses OLED-Display ist sehr hell und verfügt über eine tolle und sehr schöne Bibliothek, die Adafruit für dieses Display entwickelt hat. Darüber hinaus verfügt das Display über eine I2C-Schnittstelle, sodass der Anschluss an den Arduino denkbar einfach ist.

Sie müssen nur zwei Drähte außer Vcc und GND anschließen. Wenn Sie neu bei Arduino sind und in Ihrem Projekt ein kostengünstiges und einfaches Display verwenden möchten, beginnen Sie hier.

Schritt 4: Alle Teile verbinden

Irgendwann wurde mir wieder langweilig und ich dachte, ich hätte einen guten Grund gefunden, mir einen Kartenleser zu kaufen. Das Konzept war folgendes: Wir kleben die Karte auf die Unterseite des Laptops und platzieren das Lesegerät an der Stelle, an der der Computer normalerweise aufgeladen wird.

Ergebnis: Wenn wir den Laptop auf „Laden“ stellen, schaltet sich die Steckdose automatisch ein Ladegerät. Und die restliche Zeit ist die Steckdose natürlich ausgeschaltet. Das soll nicht heißen, dass es besonders nützlich ist, aber es ist Unterhaltung.

Aber wie immer ging etwas schief. Das heißt, statt harter Arbeit im Bereich der Steckdosen habe ich aus irgendeinem Grund zunächst einmal gelernt, herauszufinden, wie viele Fahrten noch auf meinem örtlichen U-Bahn-Ticket übrig sind.

Zum Verständnis: Bei diesem Lesegerät handelt es sich nicht um ein komplettes Gerät, sondern um ein Peripheriegerät für einen Controller oder Computer. Aus diesem Grund ist die Verwendung mit einigem Aufwand verbunden. Es scheint keine fertigen Rezepte „out of the box“ zu geben, sondern alles andere hängt von der Vorstellungskraft und den Fähigkeiten ab.

Was machen Sie normalerweise? Am häufigsten - Schlösser mit Kartenöffnung, Arbeitszeiterfassung, Zugangskontrollsysteme für Haustiere (z. B. Zugang zu Futter).

Für Experimente habe ich mich für ein preiswertes und mehr oder weniger universelles Lesegerät entschieden. Das RFID im Namen dieses Dings steht für Radio-Identifikationstechnologie, hat also keine besondere Bedeutung. Aus den Spezifikationen geht aber hervor, dass die Hardware mit gängigen RFID-Karten mit dem MIFARE-Protokoll kompatibel ist.

Höchstwahrscheinlich sind Ihnen solche Karten schon oft begegnet. Am häufigsten - in Form eines Büroausweises. Ein anderer leuchtendes Beispiel- kontaktlose Tickets für die U-Bahn.

Das Grundprinzip der Funktionsweise ist recht einfach zu verstehen. In der Karte und im Lesegerät befinden sich Antennen, und das Signal des Lesegeräts (im Wesentlichen ein elektromagnetisches Feld) dient gleichzeitig als Stromquelle für die Karte. Diese. Sowohl hinsichtlich der Energie als auch hinsichtlich der Datenübertragung ähnelt dies stark dem mittlerweile äußerst beliebten kabellosen Laden.

Die Karten selbst können je nach Modifikation mehrere Dutzend Bytes bis hin zu mehreren Kilobytes an Daten (einschließlich einer eindeutigen Seriennummer) übertragen. Abhängig von der Modifikation kann die Karte auch mit einem kryptografischen Informationsschutz ausgestattet sein.

Im Bausatz waren zwei Kämme enthalten, aber leider habe ich bereits einen gelötet (den Eckkämme). Daher gibt es keinen Bretttyp ohne Waben

Dieses Kit enthält ein Lesegerät, einen Kamm für einfaches Prototyping und sogar die Montage auf dem „Motherboard“ sowie zwei Identifikatoren: eine MIFARE 1K-Karte und einen Schlüsselanhänger mit ähnlichen Funktionen. Das ist völlig ausreichend für Experimente.

.

.

.

Wie Sie sehen, sieht die Lesetafel sehr ordentlich aus. Und praktischerweise vergrößern sich die Abmessungen des Geräts nach der Installation des Eckkamms nicht, da der Kamm tatsächlich der Höhe des höchsten Elements auf der Platine entspricht.

Mit AAA-Batterie

Diese. Sie müssen sich nicht mit einem Kompromiss zwischen Komfort und Vielseitigkeit (Kamm) und Platzersparnis beim Einbau (direktes Einlöten von Drähten) quälen.

Unter anderem verfügt die Platine auch über eine rote LED, die leider völlig uninformativ ist. Der Punkt ist, dass es auch dann leuchtet, wenn die Stromversorgung unterbrochen ist – natürlich sind an der SPI-Schnittstelle genügend Pegel vorhanden. Und er reagiert überhaupt nicht auf Karten.

Kurz gesagt, es leuchtet auf, wenn das Lesegerät irgendwie mit dem Arduino verbunden ist, was seine Funktionalität nicht garantiert.

Was den Ansprechbereich betrifft, so liegt die Schwelle subjektiv bei einem Abstand von 2 cm von der Platinenoberfläche. Innerhalb von 2 - 2,5 cm liegt der Bereich der unsicheren Operation.

Merkmale (vom Verkäufer):

Spannung: 3,3 V

Stromaufnahme im aktiven Zustand: 13-26 mA

Standby-Stromverbrauch: 10-13 mA

Schlafstrom: weniger als 80 uA

Spitzenverbrauch: weniger als 30 mA

Betriebsfrequenz: 13,56 MHz

Unterstützte Kartentypen: MIFARE S50, MIFARE S70, MIFARE UltraLight, MIFARE Pro, MIFARE DESfire

Schnittstelle: SPI

Abmessungen: 40x60 mm

Aus dem oben Gesagten geht hervor, dass ich mich gleich doppelt hervorgetan habe. Erstens habe ich nicht auf die Versorgungsspannung geschaut. Und 3,3 V bedeutet übrigens, dass die Verwendung dieses Boards am einfachsten mit Arduino Uno, Mega und anderen (oder ähnlichen Boards) möglich ist, die mit Spannungsreglern und einem 3,3-V-Ausgang ausgestattet sind. Glücklicherweise übersteigt der maximale Stromverbrauch nicht die Möglichkeiten der Plattform.

Andernfalls müssen Sie entweder ein einzelnes 3,3-V-Netzteil oder einen zusätzlichen Spannungsregler/Stabilisator/Konverter verwenden.

Zweitens erfordert die SPI-Schnittstelle 5 (!) Drähte zum Anschluss. Diese. Insgesamt wird ein Kabel mit 7 Leitern an das Lesegerät angeschlossen, was ziemlich verschwenderisch ist. Um Geld zu sparen, war es sinnvoll, sich auf I2C zu konzentrieren, aber wo bin ich und wo ist dieser Sinn?!

Verbindung
Ich würde die Verbindung gerne in weich und hart unterteilen, aber alles ist so eng miteinander verflochten – und ergab ein nicht sehr interessantes Problem.

Mit einem Wort: RC522 kennt jeder. Aber aus irgendeinem Grund fragt niemand, warum die der Bibliothek beigefügte Readme-Datei und die Platte in einem ihrer Beispiele völlig unterschiedliche „Pinbelegungen“ für den Anschluss des Lesegeräts haben.

Ich glaube, dass genau das einer der Gründe für die ewigen Probleme mit dieser Bibliothek ist. Der zweite Grund ist, dass die Verbindung für Arduino Uno und Mega über unterschiedliche Pins erfolgt. Dies liegt an der Beschaffenheit der Plattformen.

Der dritte Grund schließlich ist, dass zwei Pins (SS und RST) eine beliebige Verbindung ermöglichen und im Code konfiguriert sind. Gleichzeitig enthält der Beispielcode standardmäßig die Konfiguration für Arduino Uno, und wenn Sie Mega haben und gemäß der Propaganda aus der Readme-Datei oder dem Zeichen am Anfang des Beispiels eine Verbindung hergestellt haben, dann wird dies natürlich der Fall sein vermissen.

Aber der Trick ist, dass der dritte Grund ganz offensichtlich ist und ich ihn mehr oder weniger umgangen habe, indem ich sofort meine Stecknadeln gesetzt habe, weil ich sie zur Hand hatte Arduino-Board Mega. Deshalb blieb mir übrigens auch das zweite Unglück erspart.

Aber das erste – das Anschließen von SPI-Pins – quälte mich nach Herzenslust. Ich konnte mir nicht einmal vorstellen, dass jemand, der eine erfolgreiche Bibliothek aufgebaut hat, bei der banalen Verbindung von drei Drähten solch ein Durcheinander anrichten könnte.

Mit anderen Worten: Es hat nicht geholfen, eine Verbindung herzustellen, indem weder die erste noch die zweite in der Bibliotheksbeschreibung angegebene Option verwendet wurde. Zuerst dachte ich, ich hätte ein „totes Brett“. Deshalb habe ich mich trotz der späten Stunde zusammengerafft und den Kamm für einen zweiten gelötet (ich bin sparsam und habe gleich drei gekauft). Das Ergebnis war ähnlich, obwohl ich die Verbindung anhand der Pinbelegung, die ich zur Hand hatte, immer wieder überprüfte.

Fragen Sie mich nicht einmal, warum ich nicht zu Arduino.cc gegangen bin, um zu sehen, wie der SPI des Mega geroutet ist. Meiner Meinung nach gab es eine Art Trübung.

Aber ich habe gegoogelt und den Kauf und seinen Zusammenhang mit der Bibliothek, wie ich es verstehe, von chinesischen Kameraden auf den Punkt gebracht (nicht wie ich). Meine Hände gaben bereits auf und ich konnte in diesem Zustand nicht schlafen, also erlaubte ich mir ein weiteres Experiment mit der neu gefundenen Pinbelegung und Bibliothek.

Und beide Boards funktionierten.

Um mein Gewissen zu beruhigen, habe ich ein Beispiel mit einer „problematischen“ Bibliothek heruntergeladen, und es hat auch funktioniert.

Das sind die Karten, mit denen ich den Leser gequält habe. Von links nach rechts: Karte aus dem Set, Karte mit dem Buchstaben N, MIFARE UltraLight-U-Bahn-Ticket, Karte der Russischen Eisenbahn

Und so sieht ein Content-Dump und eine Kartenerkennung im Allgemeinen mit der RFID-Bibliothek und ihrem Beispiel DumpInfo aus

Zusammenfassung der Qual: Die Pinbelegung des erwähnten Freundes stimmt mit der Pinbelegung in der Readme-Datei der RFID-Bibliothek überein und stimmt überraschenderweise mit dieser überein. In Anbetracht des Letzteren kann ich davon ausgehen, dass ich entweder nachts die Pins verwechselt habe und damit mein ganzes Unglück begann, oder dass die einheimische chinesische Bibliothek den Reader irgendwie geschickt initialisiert, woraufhin er zu funktionieren beginnt.

Abschließend noch die richtige Pinbelegung für die chinesische Bibliothek und Mega, an die ich angeschlossen habe:

Mega RC522
3,3 V VCC
GND GND
RST ZURÜCKSETZEN

50 MISO
51 MOSI
52 SCK
53 NSS

Und für Uno (habe es nicht getestet):

Uno RC522
3,3 V VCC
GND GND
5 RST

12 MISO
11 MOSI
13 SCK
10 NSS

Zusammen mit der großen Schwester

.

.

Als Ergebnis einfacher Tests, die ich schließlich abgeschlossen habe, stellte sich auch heraus, dass das Lesegerät normalerweise (das ist ein Wortspiel) MIFARE 1K-Karten der mitgelieferten Karten beschreibt.

Das zweite Merkmal ist, dass dieses Ding angemessen reagiert, wenn mehrere Karten gleichzeitig darauf gebracht werden. Ich präsentierte wiederum zwei Karten, die im Set enthalten waren. In diesem Fall zeigt das DumpInfo-Beispiel aus der RFID-Bibliothek den Inhalt beider Karten der Reihe nach an. Diese. zuerst der Inhalt einer Karte und danach die zweite.

Und Dame, und los
Also haben wir es angeschlossen und den Dump des Speicherinhalts von MIFARE 1K-Karten bewundert. Was weiter? Und dann war ich etwas zu faul, um an der Steckdose herumzubasteln, und mir fiel ein, dass Metrokarten offenbar nach dem gleichen Protokoll funktionieren.

Ich ging hin, nahm meins, trug es auf und bewunderte seinen Inhalt. Wie versprochen: MIFARE UltraLight, 64 Byte Speicher und es ist nicht ganz klar, wo sich die Fahrten befinden, wo die Gültigkeitsdauer ist und überhaupt ist es nicht ganz klar.

Beim Googeln über die Verwendung von Arduino mit diesen Karten ergab sich nichts besonders Nützliches. Wie sich herausstellte, werden Metro-Karten am häufigsten als ultragünstige (d. h. kostenlose) NFC-Tags in allen möglichen Bereichen verwendet hausgemachte Systeme B. Sperren, Skriptausführung und andere Dinge, bei denen es zur Identifizierung ausreicht, die Seriennummer der Karte zu kennen. Aber aus irgendeinem Grund habe ich keine vorgefertigten Bibliotheken und Lösungen zum Anzeigen von Reiseinformationen gefunden: Entweder wollte ich nur schlafen, oder sie existieren wirklich nicht (siehe das „Elusive Joe“-Syndrom).

Aber ich habe einen wunderbaren und sehr romantischen Text von Alexander „Dark Simpson“ Simonov unter dem Titel „“ gefunden, der offenbar in einer der Hacker-Ausgaben veröffentlicht wurde. Trotz der Kuriosität des Textes enthält er viele nützliche Informationen über die Struktur der Datenspeicherung, auch zu den Tickets, die mich interessieren.

Der wesentliche Teil des Tickets – die Nummer – ist visuell prüfbar

Also versuchte ich am nächsten Tag, meine Abneigung gegen HEX zu überwinden und machte mich auf die Suche. Dies ist der Ticket-Dump, den ich über die RFID-Bibliothek erhalten habe:

Karten-UID: 04 6F 25 62 04 33 82
PICC-Typ: MIFARE Ultralight oder Ultralight C

Seite 0 1 2 3
0 04 6F 25 C6
1 62 04 33 82
2 D7 48 F0 00
3 00 07 FF FC
4 45 DA 21 06
5 D0 E5 3D 00
6 1F E8 00 00
7 1F E8 00 00
8 1F 8F 5A 00
9 40 19 2E D2
10 19 91 59 7C
11 1F AB 91 C8
12 1F 8F 5A 00
13 40 19 2E D2
14 19 91 59 7C
15 1F AB 91 C8

Hier ist die Karten-UID eine eindeutige Kartenkennung (im Wesentlichen eine Seriennummer), und der Rest besteht aus 16 Speicherseiten, von denen jede 4 Bytes enthält. Zusammen - 64 Bytes.

Beim Lesen des Textes über U-Bahn-Tickets sind mir die nützlichsten Punkte aufgefallen:

1) Die Ticketnummer (die darauf aufgedruckt ist) ist in 32 Bit fest codiert, beginnend mit 21 Bit auf Seite 4: 10 6D 0E 53;

2) Ausstellungsdatum des Tickets in Tagen seit dem 01.01.1992 – die ersten beiden Bytes von Seite 8: 1F 8F;

3) Gültigkeitsdauer in Tagen – drittes Byte auf Seite 8: 5A.

4) Die Anzahl der verbleibenden Fahrten schließlich ist das zweite Byte auf Seite 9: 19.

Damit konnte bereits gearbeitet werden.

Ich habe mich etwas tiefer mit dem DumpInfo-Beispiel aus der RFID-Bibliothek befasst, in seinem Code, um zu verstehen, welche Funktionen wofür verantwortlich sind und wie sie nützlich sein können, und in den Arduino-Foren, um die Implementierung der Datumsberechnung zu sehen (im Allgemeinen ist dies möglich). Schauen Sie es sich in einer beliebigen Sprache an, aber es war für mich einfacher, näher an der Zielplattform zu suchen.

Als Ergebnis wurde ein Monster geboren. Das heißt, die Skizze wird aus Fetzen ausgeschnitten, an manchen Stellen wird das Ergebnis an die Antwort angepasst, aber im Großen und Ganzen entspricht alles mehr oder weniger der Realität. Deshalb hat es keinen Sinn, auf einen Pianisten zu schießen, der so gut spielt, wie er kann. Übrigens gibt es sogar eine grundlegende Fehlerbehandlung: Der Sketch warnt vor einer nicht unterstützten Karte oder der Unmöglichkeit des Lesens.

#enthalten #enthalten #define SS_PIN 53 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522-Objekt unsigned long uidDec, uidDecTemp; // um die Kartennummer im Dezimalformat anzuzeigen byte bCounter, readBit; unsignierte lange Ticketnummer; void setup() ( Serial.begin(9600); SPI.begin(); // SPI-Initialisierung mfrc522.PCD_Init(); // MFRC522-Initialisierung Serial.println("Warten auf Karte..."); ) void loop( ) ( // Nach einer neuen Karte suchen if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // Eine Karte auswählen if (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // Ausgabe der Seriennummer der Karte Serial.print ("Card UID: "); for (Byte i = 0; i< mfrc522.uid.size; i++) { // Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); // Serial.print(mfrc522.uid.uidByte[i], HEX); uidDecTemp=mfrc522.uid.uidByte[i]; uidDec=uidDec*256+uidDecTemp; } Serial.println(uidDec); Serial.println(); // Выдача типа карты byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); // запрос типа Serial.print("Card type: "); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // трансляция типа в читаемый вид if (piccType != MFRC522::PICC_TYPE_MIFARE_UL) { // если не билетная карта Serial.print("Not a valid card: "); // так и говорим Serial.println(piccType); // Halt PICC mfrc522.PICC_HaltA(); // остановка чипа return; } // сюда мы приедем, если чип правильный byte status; byte byteCount; byte buffer; // длина массива (16 байт + 2 байта контрольная сумма) byte pages={4, 8}; // страницы с данными byte pageByte; // счетчик байтов страницы byteCount = sizeof(buffer); byte bCount=0; for (byte i=0; i<2; i++) { // начинаем читать страницы status = mfrc522.MIFARE_Read(pages[i], buffer, &byteCount); if (status != MFRC522::STATUS_OK) { Serial.print("Read error: "); Serial.println(mfrc522.GetStatusCodeName(status));} else { if (pages[i] == 4) { bCounter = 0; // 32-битный счетчик для номера // биты 0-3 for (bCount=0; bCount<4; bCount++) { readBit = bitRead(buffer, (bCount+4)); setBitsForGood(readBit); } // биты 4 - 27 for (pageByte=5; pageByte >2; pageByte--) ( for (bCount=0; bCount<8; bCount++) { readBit = bitRead(buffer, bCount); setBitsForGood(readBit); } } // биты 28-31 for (bCount=0; bCount<4; bCount++) { readBit = bitRead(buffer, bCount); setBitsForGood(readBit); } Serial.print("Ticket number: "); Serial.println(ticketNumber, DEC); } if (pages[i] == 8) { // читаем дату выдачи Serial.print("Issued: "); unsigned int issueDate = buffer * 256 + buffer; // количество дней с 01.01.1992 в десятичном формате, 256 - сдвиг на 8 бит printIssueDate(issueDate); Serial.print("Good for (days): "); // срок действия Serial.print(buffer, DEC); Serial.println(); Serial.print("Trip reminder: "); // количество оставшихся поездок Serial.print(buffer, DEC); Serial.println(); } } } // Halt PICC mfrc522.PICC_HaltA(); } void printIssueDate(unsigned int incoming) { boolean isLeap = true; // признак високосного года int days={0,31,59,90,120,151,181,212,243,273,304,334}; // последний по порядку день месяца для обычного года byte dayOfMonth, monthCounter; unsigned int yearCount; incoming = incoming+1; // подогнал под ответ, но возможно это как раз необходимая коррекция, потому что начало отсчета - 01.01.1992, а не 00.01.1992 for (yearCount = 1992; incoming >366; yearCount++) ( // das Jahr und die Anzahl der Tage zählen, die seit der Ausstellung des Tickets vergangen sind if ((yearCount % 4 == 0 && yearCount % 100 != 0) || yearCount % 400 == 0) ( incoming = incoming - 366; isLeap = true; ) else ( incoming = incoming - 365; isLeap = false; ) ) for (monthCounter = 0; incoming > days;monthCounter++) ( // finde die Monatsnummer heraus) // zähle den Tag von der Monat if (isLeap == true) ( ​​/ / wenn es ein Schaltjahr ist if (days>31) ( // wenn nicht der erste Monat, dann addiere Einheiten zum letzten Tag des Monats dayOfMonth = incoming - ( Tage+ 1); ) else ( dayOfMonth = incoming - (Tage); // wenn der erste - wir fügen nichts hinzu, da die Schicht im Februar beginnt) ) else ( dayOfMonth = incoming - (Tage); // wenn nicht ein Schaltjahr ) Serial.print(dayOfMonth); Serial.print("."); Serial.print(monthCounter); Serial.print("."); Serial.print(yearCount); Serial.println(); ) void setBitsForGood(byte daBeat) ( if (daBeat == 1) ( bitSet(ticketNumber, bCounter); bCounter=bCounter+1; ) else ( bitClear(ticketNumber, bCounter); bCounter=bCounter+1; ) )

Was gibt mir diese Skizze? Nun, zunächst ein wenig Kopftraining – man musste, wissen Sie, nachdenken, wenn man den Leser und den Code herausgefunden hat. Zweitens erfahre ich jederzeit, wie viele Fahrten noch übrig sind und wann die Karte aufgebraucht ist. Wenn man bedenkt, was ich vorhabe Smartphone-NFC Nein, es stellt sich als recht praktisch heraus.

Das Ergebnis der Arbeit des Monsters

In diesem Fall geht es natürlich nicht einmal darum, eine „Kopie“ des Tickets anzufertigen. Das ist außergewöhnlich Informationsfunktion, Duplikat des Terminals in der U-Bahn-Lobby.

Im Allgemeinen war es nach diesem Erfolg möglich, die zweite vorgeschlagene Aufgabe zu übernehmen, die aufgrund ihrer einfachen Umsetzung theoretisch die erste hätte sein sollen.

Also eine Steckdose, die sich bei Bedarf einschaltet. Dabei dient die Karte (jede vom Lesegerät unterstützte und zum Einlegen in das Zielgerät geeignete Karte) ausschließlich als Ausweis, d. h. es ist nur ihre Seriennummer von Interesse.

Die Logik ist einfach: Wenn der Leser eine Karte mit einer bestimmten Nummer sieht, schaltet er den Sockel ein. Wenn er es nicht sieht, schaltet er es aus.

RAKETENMONSTER

#enthalten #enthalten #define SS_PIN 53 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522-Instanz erstellen. unsigned long uidDec, uidDecTemp; #enthalten RCSwitch mySwitch = RCSwitch(); boolean switchOn = false; boolean cardRead = false; void setup() ( Serial.begin(9600); // Serielle Kommunikation mit dem PC initialisieren SPI.begin(); // SPI-Bus initiieren mfrc522.PCD_Init(); // MFRC522-Karte initiieren mySwitch.enableTransmit(8); Serial .println("Warten auf Karte..."); ) void loop() ( byte status; byte byteCount; byte buffer; // Array-Länge (16 Bytes + 2 Bytes Prüfsumme) byteCount = sizeof(buffer); uidDec = 0 ; status = mfrc522.PICC_RequestA(buffer, &byteCount); if (mfrc522.PICC_ReadCardSerial()) ( for (byte i = 0; i< mfrc522.uid.size; i++) { uidDecTemp=mfrc522.uid.uidByte[i]; uidDec=uidDec*256+uidDecTemp; } if ((uidDec==2218415941) && (switchOn == false)) { mySwitch.sendTriState("00110000F000"); switchOn = true; // Serial.println("Switched On"); } mfrc522.PICC_ReadCardSerial(); } else { if (switchOn == true) { mySwitch.sendTriState("001100000000"); // Serial.println("Switched Off"); switchOn = false; } } }

Ebenso können Sie mit der Karte als Auslöser verschiedene Szenarien durchführen Heimautomatisierung. Legen Sie zum Beispiel eine Karte ein E-Book, und legen Sie das Lesegerät auf den Nachttisch.

Als wir das Buch auf den Schrank legen, denkt das Haus, dass wir beschlossen haben, in das Königreich von Morpheus zu gehen, und schaltet das Licht aus. Und wenn wir ein Buch aus dem Schrank nehmen, geht man davon aus, dass wir lesen wollen, und dann geht im Gegenteil das Hintergrundlicht an, damit die elektronische Tinte sichtbar ist und unsere Augen nicht verletzt werden.

So funktioniert das Steckdosenmonster

Zusammenfassend: preiswert, einfach, recht praktisch und regt die Fantasie an.

Ps. Ich bin mir sicher, dass Sie es besser machen können und dass ich nichts von Arduino und Programmierung verstehe.

Alle möglichen Links
Die Rezension hat mir gefallen +67 +173

Nachdem ich mehrere Jahre lang an RFID-Themen gearbeitet und verschiedene Lesegeräte für Transpondermodelle gängiger Standards wie Mifare, EMMARINE, TIRIS ... entwickelt hatte, begann mich diese Frage oft zu wundern – buchstäblich im letzten Jahr, verschiedene Arten von Emulatoren unter dem Tags beliebter Protokolle und verschiedene Schlüssel-/Schlüsselanhänger-Kopierer erfreuen sich großer Beliebtheit.

Angesichts der Vielzahl kommerziell erhältlicher Spezialchips für gängige RFID-Protokolle und günstiger Lesegeräte sowie der weiten Verbreitung von Geräten wie digitalen Oszilloskopen, Sniffern und Spektrumanalysatoren ist dieses Thema für viele Entwickler immer dringlicher geworden. Dann habe ich beschlossen, für eines der Projekte ein Austauschprotokoll zu erstellen, das von den oben beschriebenen Standards abweicht.

Natürlich löst diese Idee keine globalen Sicherheitsprobleme neues System und kann von anderen Entwicklern analysiert werden, wenn sie über die entsprechende Ausrüstung verfügen. Der Punkt ist jedoch, dass dies alles nicht mit den bestehenden Standards übereinstimmt und die gesamte Kopierhardware es Ihnen nicht ermöglicht, einen solchen Algorithmus schnell zu kopieren und neu zu erstellen. Natürlich wird ein solches System hier nicht als vollständige Lösung von Sicherheitsproblemen vorgestellt, sondern als Erfahrung in der Anpassung von RFID geschlossenes System. Ein gutes Plus Was die Sicherheit betrifft, ist unter anderen ähnlichen drahtlosen Systemen die Niederfrequenz-RFID-Technologie selbst wichtig – sie ermöglicht kein Lesen von Tags über große Entfernungen.

Passive Tags haben einen relativ geringen Stromverbrauch und erfordern einen recht leistungsstarken Lesegenerator, um sie mit Strom zu versorgen. Die Besonderheiten der Funkwellenausbreitung bei diesen Frequenzen begrenzen auch die Betriebsgrenzen dieses Systems. Die tatsächliche Lesereichweite von Transpondern überschreitet selten 20 cm für 125-kHz-Standards wie EmMarine, sagen wir den EM4001-Standard; für andere Protokolle wie Mifare (13,56 MHz) kann sie länger sein (1,5 Meter für iso15693). Eine größere Lesereichweite bei Niederfrequenz-Lesegeräten erreichen Sie, indem Sie die Größe der Spule bzw. die Versorgungsspannung und die Leistung des Lesegeräts erhöhen. Allerdings sind solche Systeme sperrig und in der Regel schwer tragbar. In der Regel werden solche Systeme nur dauerhaft eingesetzt – beispielsweise für Autos.

Nun zur eigentlichen Architektur unseres RFID-Systems. Für die Experimente wurde der atmel atmega8 Controller ausgewählt. Für die Zwecke der Transponderherstellung scheint dies ein Overkill zu sein. Allerdings wurde in diesem Fall die primäre Aufgabe gelöst, eine neue Schnittstelle auf einem fertigen Entwicklungsboard mit Atmega zu entwickeln und diesen Code anschließend auf günstigere Controller wie Tiny13 zu portieren. Für den Transponder wurde der Betriebsalgorithmus auf der Grundlage des PWM-Generierungsmodus unter Verwendung des Timers T1 im CTC-Modus mit Unterbrechung und Zurücksetzen gleichzeitig mit OCR1 erstellt. Die Übertragungsdaten des Transponders werden beim Einschalten des Controllers aus dem EEPROM gelesen. Insgesamt überträgt der Transponder 10 Byte. Der Inhalt des Transponder-EEPROMs ist auf ersichtlich Abbildung 1. Das erste Byte 0xE7 ist ein erforderlicher Paket-Header, da sein Vorhandensein zuerst überprüft wird, wenn der Leser das Paket analysiert.

Die ersten 8 Bytes sind der Inhalt des Transponderpakets, die letzten 2 Bytes enthalten die CRC16-Prüfsumme der ersten acht Bytes des Pakets. In unserem Transponder wurden beispielsweise folgende Daten aufgezeichnet: Paket 0xE7, 0x05, 0xE8, 0x93, 0x43, 0x7F, 0x20, 0xFF und dementsprechend Prüfsumme 0xF5 0xA8. Um Ihren eigenen einzigartigen Transponder zu erstellen, müssen Sie zusätzlich zum ersten Byte 0xE7 die nächsten sieben Bytes in das EEPROM schreiben und dann die Prüfsumme für die ersten acht Bytes berechnen. Schreiben Sie anschließend zwei CRC16-Bytes am Ende des Pakets in das EEPROM. Das erste Byte lassen wir unverändert – 0xE7. Beim Einschalten des Transponders werden die Daten dieser Bytes in Bits zerlegt und entsprechend dem Wert des OCR-Registers mit der entsprechenden Impulslänge kodiert. Zur Übertragung werden 2 Frequenzen von 2KHz und 5KHz verwendet, um logisch „0“ und „1“ zu übertragen. Darüber hinaus werden die Daten durch Synchronisationsimpulse – Paketstartmarken – getrennt.

Abb.1 Inhalt des Transponderpakets.


Abb.2 Dump der Transponderübertragung auf dem virtuellen Oszilloskopbildschirm.

Das Transponderdiagramm finden Sie unter Figur 3. Die Frequenz des Master-Oszillators beträgt 8 MHz. Spannungsversorgung des Controllers +5V. Sie können einen mit „L“ gekennzeichneten Mega8-Controller verwenden, dann kann die Stromversorgung über eine 3-V-Lithiumbatterie erfolgen (Parameter für einen solchen Chip sind +2,7...+3,5). Anstelle dieses Transistors können Sie jeden anderen NPN-Transistor mit geringer Leistung verwenden. Die Transponderspule wurde auf einen Dorn mit 50 mm Durchmesser mit 0,22 mm Draht gewickelt und hat 50 Windungen. Im Moment wird der Transponder aktiv gemacht – mit externer Energie. Im nächsten Schritt ist geplant, eine passive Version des Transponders herzustellen, was recht einfach ist: Machen Sie eine Isolierung für die Stromversorgung dieser Spule, fügen Sie Gleichrichterbrückendioden und einen Stabilisator hinzu.


Abb. 3 Transponderschaltung.

Lassen Sie uns nun über die Leseschaltung für diesen Transponder sprechen. Die Schaltung wurde auf Basis des bisher verwendeten Kartenlesers EMMARINE adaptiert. Der Teil der Schaltung mit dem Generator auf dem 74hc4060 kann an dieser Stelle getrost gelöscht werden, da wir vorerst ein aktives Label verwenden. Allerdings benötigen wir diesen Teil der Schaltung später, wenn wir ein passives Tag erstellen und Strom vom Lesegerät benötigen. Ansonsten unterscheidet sich die Schaltung nicht wesentlich von der Leseschaltung für EMMARINE: passiver Spitzenwertdetektor – Filter – Verstärker – Komparator. Das Schema hat ein Maximum mögliche Einfachheit und ermöglicht das Auslesen von Transponderdaten in einer Entfernung von 10-12 cm mit gut abgestimmten Konturen.

Sie können die Schaltung noch weiter vereinfachen, indem Sie nur einen Detektor und einen Filter übrig lassen und am Ausgang einen Transistor anbringen, der die Rolle eines Komparators übernimmt, aber das habe ich nicht getan. Am Ausgang erhalten wir ein binäres Rechtecksignal entsprechend der vom Transponder übermittelten kodierten Impulsdauer. Die zulässigen Abweichungen der Elementwerte, bei denen die Schaltung betriebsbereit ist, betragen 5-10 %. Stromversorgung für Controller und Operationsverstärker +5V. Die Quarzfrequenz des Controller-Masteroszillators beträgt 12 MHz. Der Komparatorausgang des LM358 ist mit dem externen Interrupt-Pin des INT0-Controllers verbunden. Das Steuerungsprogramm ist so konfiguriert, dass es bei einer steigenden Flanke am externen Interrupt-Pin INT0 einen Interrupt auslöst. Der Interrupt-Handler prüft die Taktimpulse, dann den Paket-Header und schreibt den Inhalt in den Controller-Puffer. Die Daten der gelesenen Pakete werden über die RS232-Schnittstelle an den PC übertragen. Um das Terminal zu konfigurieren, geben wir die folgenden Parameter an: Geschwindigkeit 57,6 Kb/s, 8 Datenbits, 1 Stoppbit, keine Parität.

Beim Empfang eines Pakets berechnet der Controller die Prüfsumme der empfangenen Bytes und übermittelt die Daten an das Terminal (Paket und CRC). Stimmen die vom Controller berechneten und im Paket empfangenen Prüfsummen überein, wird ein Signal an den Pin PORTB.0 (14) des Controllers ausgegeben (LED1 im Diagramm). An diesen Punkt können Sie einen Hochtöner mit eingebautem Generator oder eine LED über einen Widerstand anschließen. Beim Lesen des richtigen Schlüssels deaktiviert der Controller externe Interrupts und verzögert den nächsten Lesevorgang um 1 Sekunde. Die Funktionsweise dieses Lesegeräts als Basis eines RFID-Schlosses wird ebenfalls angegeben. Dazu ist es notwendig, die gesamten Transponder-Dump-Bytes in das EEPROM des Reader-Controllers zu schreiben – 10 Byte. Das Schreiben der Daten auf das EEPROM des Lesegeräts erfolgt auf die gleiche Weise wie auf das EEPROM des Transponders. Wenn in diesem Fall der nächste Transponder gelesen wird und dieser mit dem im EEPROM des Lesegeräts geschriebenen übereinstimmt, wird ein Signal an den Pin PORTB.1 (15) des Controllers ausgegeben (LED2 im Diagramm). Über einen Widerstand oder einen Ausgangsschalter (Transistor) am Aktorrelais können Sie an dieser Stelle eine LED anschließen. Jetzt haben wir ein RFID-Schloss für einen bestimmten Schlüssel und ein normales Lesegerät in einer Flasche.


Abb.4 Planen RFID-Leser Markierungen. (Diagramm vergrößern)

Fassen wir also die Zwischenergebnisse zusammen. Hergestellt eigener Leser und einen Transponder für dieses Lesegerät. Wir haben unsere Geräte vor Geräten Dritter geschützt, die mit gängigen RFID-Protokollen arbeiten. Der nächste Schritt besteht darin, wie namhafte Hersteller von Industrietranspondern einen passiven Tag für unser Lesegerät herzustellen und den Gerätecode auf günstigere Controller-Modelle zu portieren. Im Archiv füge ich dem Artikel die Firmware für den Transponder und das Lesegerät bei.

Firmware herunterladen:
Sie haben keinen Zugriff darauf, Dateien von unserem Server herunterzuladen