Erstellt am 14.11.2012
Tür öffnen, mehr nicht.
Dieses Projekt entstand mehr aus Interesse an der RFID-Technik, als an einer wirklichen Notwendigkeit, die Tür über verschiedene Tags zu öffnen. Vor einiger Zeit hatte ich schon mal ein Modul zum selber löten bestellt, was ich aber nie zum laufen bekommen hatte. Vielleicht war meine Antenne nicht sorgfältig genug gewickelt. Auf eBay habe ich dann einen RDM6300 RFID-Reader mit ein paar passenden Tags bestellt, der dann auch tatsächlich etwas auf der seriellen Schnittstelle ausgibt.
Das Modul arbeitet mit 125kHz und gibt über ein serielles TTL-Signal (9600 Baud) einfach die Tag-ID als ASCII-Zeichen aus. So muss man sich eigentlich um nichts mehr kümmern. Ich habe das ganze jetzt noch mit einem Attiny 2313 versorgt, der bis zu 10 Tags im EEPROM ablegen kann und wenn die richtige Tag-ID aus dem EEPROM gefischt werden kann, wird ein Relais für zwei Sekunden eingeschaltet. Diesen Ausgang könnte man dann z.B. mit einem Türsummer verbinden.
Schaut auch bei meinem RFID-WLAN-Türöffner rein. Dort habe ich den Leser mit einem WLAN-Modul verbunden, sodass die Tag-IDs mit einer Datenbank abgeglichen werden können.
So funktioniert's
Zunächst noch ein paar Worte zum Schaltplan, den ich unter dem Bild verlinkt habe: Im großen und ganzen werden über das Jumper-Feld die RX- und TX-Leitungen aller drei Komponenten verbunden. Also so, dass ich PC, Mikrocontroller oder RFID-Reader je über einen Jumper zusammenschließen kann (natürlich gehen nicht alle drei gleichzeitig - das wäre auch möglich, aber dafür braucht es noch eine Diode + Widerstand). Der Rest ist einfach der übliche Pegelwandler - ich habe mich für einen MAX232A entschieden, der zwar teuerer ist, aber auch nur wesentlich kleinere 100nF Kondensatoren benötigt. Ansonsten kommt noch ein Transistor mit Freilaufdiode zum Schalten des Relais auf die Platine und die obligatorischen LEDs für die Signalisierung ob Karte gut oder 'böse' ist.
Schaltplan im EAGLE-Format
Für den Standardbetrieb werden die Jumper wie rot eingezeichnet gesetzt. Somit ist TX vom RFID-Reader mit RX vom Mikrocontroller verbunden und TX vom Mikrocontroller mit RX vom PC. Möchte man den Controller programmieren muss der Jumper von TX vom RFID-Reader auf TX vom PC umgesteckt werden (blau eingezeichnet).
Die Software für den Mikrocontroller ist letztlich auch nichts besonderes. Über die EEPROM-Routinen aus der eeprom.h werden die Tag-IDs in den Speicher geschrieben, bzw. können darin abgelegt werden. Die Programmierung erfolgt einfach über die serielle Schnittstelle. Leider nicht ganz intuitiv, da der Speicher auf dem Attiny 2313 mit 2k doch etwas begrenzt ist. Hier auch gleich der Hinweis: zunächst hatte ich mit dem avr-gcc-4.3.3 kompiliert, der mir ein 2265 Bytes großes Binary ausgespuckt hat. Mehr durch Zufall hatte ich dann an einem anderen System nochmal ein wenig am Programm gebastelt und dort mit dem avr-gcc-4.3.5 kompiliert und siehe da, es sind nur noch 2033 Byte und damit passt das noch grade so auf den Chip.
Programmieren:
Zum Programmieren (Flashen) des Attiny mit z.B. einem SPI-Programmer, die Fuses auf internen Takt, 8MHz stellen (oder wenn ihr ein Quarz installiert habt, entsprechend anpassen). Nach dem ersten Start muss der EEPROM initialisiert werden - also blauen Jumper setzen und mit dem PC ein 'L' schicken. Danach den ersten Code einspeichern ('W'+Code) und 'X' gefolgt von '0' drücken. Mit 'R' könnt ihr überprüfen, ob der Code richtig im EEPROM steht.
Folgende Befehle können über die serielle Schnittstelle an den Controller gesendet werden:
- R gibt alle gespeicherten Tag-IDs aus
- L löscht alle gespeicherten Tag-IDs
- X<0-9> löscht die Tag-ID mit der angegebenen Nummer (es wird von 0 an gezählt)
- W<12-stellige ID> Speichert eine neue ID im EEPROM
Um diese Befehle eingeben zu können, muss natürlich der Jumper vom RFID-Reader auf den TX-Pin des PC umgesteckt werden. Dies stellt dann auch einen gewissen Schutz dar, damit sich nicht jeder an die Schnittstelle hängen kann und neue IDs einprogrammieren.
Der Controller seinerseits hat folgende Antworten parat:
- OK:<Tag-ID> RFID-Tag erkannt, grüne LED + Relais wird geschaltet
- NOK:<Tag-ID> RFID-Tag unbekannt, rote LED blinkt
- EEF Erscheint, wenn man eine neue ID einprogrammieren möchte, der Speicher aber bereits voll ist (EEPROM Full)
- BID Erscheint beim Löschen von IDs, wenn diese ID (es wird von 0 bis 9 gezählt) nicht existiert (Bad ID)
- DID Bestätigt das Löschen einer ID (Deleted ID)
- EID Bestätigt das vollständige Löschen aller IDs (Erased IDs)
Nach jedem erfolgreichen Lesevorgang eines RFID-Tags wird über die Schnittstelle entweder OK: oder NOK: und die entsprechende Tag-ID ausgegben. Somit könnte man z.B. auch an einem Computer mitloggen, welcher Tag, wann den Leser benutzt hat.
Programmcode für Attiny2313
Bilder
Wenn man das ganze dann noch in ein hübsches Plastikgehäuse steckt, dann sieht das vielleicht so aus. Leider keinen Sub-D Stecker zum Lochrasterlöten da gehabt, er würde sonst noch neben die Lüsterklemmen kommen. Die sind für Stromversorgung und für den Relaiskontakt zuständig.
Im geöffneten Gehäuse kann man die Antenne erkennen, die ich unter dem Dekel befestigt habe. Die gelbe LED ist direkt mit dem LED-Ausgang des Reader-Moduls verbunden. Diese LED wird kurz ausgeschaltet, sobald ein RFID-Tag erfolgreich gelesen wurde.