Bei dieser simplen Zugriffskontrolle wird zu Beginn ein RFID Chip oder eine Karte als Schlüssel durch hinhalten an das Lesegerät definiert (rote und grüne LED leuchten). Solange nun kein Gerät in der Nähe registriert wird leuchtet lediglich die rote LED. Wird der Schlüssel dem Leser genähert, so wechselt das Licht auf Grün, sollte eine falsche Karte dem Lesegerät genähert werden, beginnt ein Alarm (rote und grüne LED blinken schnell).
Zur Realisierung dieses Systems benötigt man ein RFID Lesegerät, sowie ein oder mehrere RFID Sender (Chips oder Karten), oft auch im Set verfügbar (hier auf amazon.de). Zusätzlich wird natürlich ein Arduino oder ein Arduino Klon, wobei bereits ein Nano ausreicht (hier auf amazon.de), und zwei LEDs benötigt.
Verkabelung
Das RFID Kit, muss wie in diesem Post beschrieben mit dem Arduino verbunden werden, die beiden LEDs müssen mit Pin 6 (rot) und 7 (grün) verbunden werden.
Software
Zur Verwendung des RFID Lesers am Arduino benötigt man die kostenlose Open-Source Bibliothek MFRC 522, welche über den Library Manager (Sketch > Include Library > Manage Libraries) nachgeladen werden kann.
Das fertige Programm, welches die oben beschrieben Funktionalität besitzt, hat folgenden Code:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SPI.h> | |
#include <MFRC522.h> // Nachladen der notwendigen Bibliotheken | |
#define RST_PIN 9 | |
#define SS_PIN 10 // Pinout definieren (siehe Abschnitt Verkabelung) | |
MFRC522 mfrc522(SS_PIN, RST_PIN); | |
byte readCard[4]; // Array zum Abspeichern der UID der gerade gelesenen Karte | |
byte schluessel[4]; // Array zum Abspeichern der UID des Schluessels | |
void setup() { | |
Serial.begin(9600); // Serielle Kommunikation mit dem PC | |
while (!Serial); | |
Serial.println("Siehe michaelsarduino.blogspot.de!"); | |
SPI.begin(); // SPI starten | |
mfrc522.PCD_Init(); // RFID Reader starten | |
mfrc522.PCD_DumpVersionToSerial(); // Details des RFID Readers anzeigen | |
schluessel[0] = 1; | |
schluessel[1] = 1; | |
schluessel[2] = 1; | |
schluessel[3] = 1; // Schluessel UID zuruecksetzen | |
pinMode(6, OUTPUT); | |
pinMode(7, OUTPUT); // LED Pins definieren | |
digitalWrite(7, LOW); | |
digitalWrite(6, HIGH); // Rote LED an, Gruene aus | |
Serial.println("Bitte Schluessel in die Naehe bringen zum Definieren!"); | |
} | |
void loop() { | |
if ( ! mfrc522.PICC_IsNewCardPresent()) { // Ueberpruefen ob neue Karte vorhanden | |
return; | |
} | |
if ( ! mfrc522.PICC_ReadCardSerial()) { // Verfuegbare Karte auswaehlen und auslesen | |
return; | |
} | |
for ( uint8_t i = 0; i < 4; i++) { // UID der aktuellen Karte in Array readCard abspeichern | |
readCard[i] = mfrc522.uid.uidByte[i]; | |
} | |
if(schluessel[0] == 1) // Wenn schluessel noch undefiniert aktuelle Karte als | |
{ // als Schluessel im Array schluessel abspeichern | |
digitalWrite(6, HIGH); | |
digitalWrite(7, HIGH); | |
schluessel[0] = readCard[0]; | |
schluessel[1] = readCard[1]; | |
schluessel[2] = readCard[2]; | |
schluessel[3] = readCard[3]; | |
Serial.println("Schluessel definiert!"); | |
readCard[0] = 0; | |
readCard[1] = 0; | |
readCard[2] = 0; | |
readCard[3] = 0; | |
delay(1500); | |
digitalWrite(7, LOW); | |
} | |
if((readCard[0] == schluessel[0])&&(readCard[1] == schluessel[1])&&(readCard[2] == schluessel[2])&&(readCard[3] == schluessel[3])) | |
{ | |
digitalWrite(6, LOW); // Wenn aktuelle Karte gleich Schluessel ist | |
digitalWrite(7, HIGH); | |
Serial.println("Zugriff gewaehrt!"); | |
readCard[0] = 0; | |
readCard[1] = 0; | |
readCard[2] = 0; | |
readCard[3] = 0; | |
delay(1500); | |
digitalWrite(7, LOW); | |
digitalWrite(6, HIGH); | |
} | |
else | |
{ | |
Serial.println("Falscher Schluessel!"); //Falls falsche Karte hingehalten wird | |
digitalWrite(6, LOW); | |
digitalWrite(7, LOW); | |
delay(200); | |
digitalWrite(6, LOW); | |
digitalWrite(7, HIGH); | |
delay(200); | |
digitalWrite(6, HIGH); | |
digitalWrite(7, LOW); | |
delay(200); | |
digitalWrite(6, LOW); | |
digitalWrite(7, HIGH); | |
delay(200); | |
digitalWrite(6, HIGH); | |
digitalWrite(7, LOW); | |
delay(200); | |
digitalWrite(6, LOW); | |
digitalWrite(7, HIGH); | |
delay(200); | |
digitalWrite(6, HIGH); | |
digitalWrite(7, LOW); | |
delay(200); | |
} | |
} |
Keine Kommentare:
Kommentar veröffentlichen
Mit dem Veröffentlichen eines Kommentars erklären Sie sich mit unserer Datenschutzerklärung einverstanden.
https://michaelsarduino.blogspot.de/p/datenschutzerklarung.html