Die ID-Nummer einer RFID-Karte oder eines RFID-Anhängers kann verwendet werden um den Tresor zu öffnen oder zu schliessen. So kann dein Tresor nur geöffnet oder geschlossen werden, wenn man im Besitz der RFID-Karte ist.
Mit dem Programm von Miguel Balboa lassen sich einfach von RFID-Karten und Anhängern die ID-Nummern herausfinden. Baue dazu die Schaltung mit Hilfe der Schemen auf und lade den Code auf deinen Arduino. Sobald du eine Karte über den Leser hälst, erhälst du im seriellen Monitor die ID-Nummer. Diese kannst du notieren und mit Hilfe des zweiten Programmteils verwenden.
// RFID Library Created by Miguel Balboa #include <SPI.h> #include <RFID.h> #define SS_PIN 10 #define RST_PIN 9 RFID rfid(SS_PIN, RST_PIN); // Setup variables int serNum0; int serNum1; int serNum2; int serNum3; int serNum4; void setup() { Serial.begin(9600); SPI.begin(); rfid.init(); } void loop() { // This loop looks for a card(s) to read if (rfid.isCard()) { if (rfid.readCardSerial()) { if (rfid.serNum[0] != serNum0 && rfid.serNum[1] != serNum1 && rfid.serNum[2] != serNum2 && rfid.serNum[3] != serNum3 && rfid.serNum[4] != serNum4 ) { /* When a card is found the following code will run */ Serial.println(" "); Serial.println("Card found"); serNum0 = rfid.serNum[0]; serNum1 = rfid.serNum[1]; serNum2 = rfid.serNum[2]; serNum3 = rfid.serNum[3]; serNum4 = rfid.serNum[4]; // Print the card ID to the Serial Monitor of the IDE Serial.println("Cardnumber:"); Serial.print("Dec: "); Serial.print(rfid.serNum[0], DEC); Serial.print(", "); Serial.print(rfid.serNum[1], DEC); Serial.print(", "); Serial.print(rfid.serNum[2], DEC); Serial.print(", "); Serial.print(rfid.serNum[3], DEC); Serial.print(", "); Serial.print(rfid.serNum[4], DEC); Serial.println(" "); Serial.print("Hex: "); Serial.print(rfid.serNum[0], HEX); Serial.print(", "); Serial.print(rfid.serNum[1], HEX); Serial.print(", "); Serial.print(rfid.serNum[2], HEX); Serial.print(", "); Serial.print(rfid.serNum[3], HEX); Serial.print(", "); Serial.print(rfid.serNum[4], HEX); Serial.println(" "); } else { // If we have the same ID, write a dot to the Serial Monitor Serial.print("."); } } } rfid.halt(); }
///////////////////////////////////*DEFINITIONEN*/////////////////////////////////// /*RFID-DEFINITIONEN*/ #include <SPI.h> #include <RFID.h> #define SDA_PIN 10 //über Pin10 laufen die SDA-Daten #define RST_PIN 9 //Pin9 wird als Reset-Pin definiert RFID rfid(SDA_PIN, RST_PIN); byte pendant[5] = {0xA9,0xFA,0x1F,0xA3,0xEF}; //Beispielwerte für eine ID-Karte byte card[5] = {0x10,0x60,0xD9,0xA4,0xD}; //Beispielwerte für einen ID-Anhänger byte serNum[5]; byte data[5]; ///////////////////////////////////*SETUP*/////////////////////////////////// void setup() { Serial.begin(9600); //Start der seriellen Kommunikation /*RFID*/ SPI.begin(); rfid.init(); } ///////////////////////////////////*LOOP*/////////////////////////////////// void loop() { /*RFID*/ RFIDKontrolle_1(); RFIDKontrolle_2(); } ///////////////////////////////////*WEITERE FUNKTIONEN*/////////////////////////////////// /*MELDUNG*/ void Signal1(){ /*Hier kann ein Programm stehen, welches ausgeführt wird, wenn die korrekte ID-Karte erkannt wurde. Dieses Programm gibt im seriellen Monitor (Werkzeuge) eine Textmeldung aus.*/ Serial.println("Die korrekte ID-Karte wurde erkannt"); //Meldung im seriellen Monitor (Werkzeuge), dass die MUTE-Taste gedrückt wurde delay(1000); //Wartet 1sec nach dem Ausführen } void Signal2(){ /*Hier kann ein Programm stehen, welches ausgeführt wird, wenn die korrekte ID-Karte erkannt wurde. Dieses Programm gibt im seriellen Monitor (Werkzeuge) eine Textmeldung aus.*/ Serial.println("Der korrekte Anhänger wurde erkannt"); //Meldung im seriellen Monitor (Werkzeuge), dass die POWER-Taste gedrückt wurde delay(1000); //Wartet 1sec nach dem Ausführen } /*RFID*/ void RFIDKontrolle_1(){ /*Dieses Programm überprüft ständig, ob am RFID-Leser der Wert mit dem von "card" übereinstimmt. Ist dies der Fall, wird Signal1(); ausgeführt*/ boolean card_card = true; if (rfid.isCard()) { if (rfid.readCardSerial()) { for (int j = 0; j < 5; j++){ data[j] = rfid.serNum[j]; } } for (int i = 0; i < 5; i++){ if (data[i] != card[i]) card_card = false; } if (card_card){ Signal1(); delay(1000); } else{ // Nichts } } rfid.halt(); } void RFIDKontrolle_2(){ /*Dieses Programm überprüft ständig, ob am RFID-Leser der Wert mit dem von "pendant" übereinstimmt. Ist dies der Fall, wird Signal2(); ausgeführt*/ boolean card_card = true; if (rfid.isCard()) { if (rfid.readCardSerial()) { for (int j = 0; j < 5; j++){ data[j] = rfid.serNum[j]; } } for (int i = 0; i < 5; i++){ if (data[i] != pendant[i]) card_card = false; } if (card_card){ Signal2(); } else{ // Nichts } } rfid.halt(); }