Arduino Ethernet-RFID-Kartenleser
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Notwendige Werkzeuge und Maschinen
|
Apps und Onlinedienste
| ||||
|
Über dieses Projekt
Haben Sie schon einmal daran gedacht, ein RFID-Tags-/Kartensicherheitssystem oder ein Überwachungssystem in Ihrem Zuhause und/oder Büro hinzuzufügen? Nun, wenn Sie hier sind, ich wette, Sie haben bereits nachgesehen, wie verdammt teuer sie zwischen 200 und 2000 US-Dollar sind, ZU VIEL RICHTIG!?? Nun, ein Freund und ich haben beschlossen, ein System zu entwickeln, das weniger als 100 US-Dollar kostet und noch mehr kann, als nur auf eine Tür zuzugreifen, also haben wir uns das einfallen lassen. Ein internetfähiger Arduino-RFID-Tag-Reader. das für 20 Dollar mehr Türen öffnen kann. Dieses System wurde entwickelt, um Schüler an unserer Highschool zu verfolgen, und wir hoffen, dass die Schule es genehmigt.
Hier ist der Prototyp:
Du denkst vielleicht, es könnte lange dauern, yatta yatta yatta. Dieses Ding dauerte jedoch nur etwa 6 Stunden (weil ich Probleme mit der Stromversorgung hatte), aber die Einrichtung wie im obigen Beispiel könnte etwa 30 Minuten dauern. Der gesamte Code und die Bilder sind unten. Wenn Sie bei den nächsten Schritten verwirrt sind, sehen Sie sich die unteren Bilder / den Code an.
Hier sind alle Schritte:
Bevor wir beginnen (notwendig)
Bevor wir Karten scannen und an unseren Telnet/TCP-Server senden können, benötigen wir einige Bibliotheken. Holen Sie sich UIPEthernet hier https://github.com/ntruchsess/arduino_uip
Holen Sie sich MFRC522 hier https://github.com/miguelbalboa/rfid
Legen Sie diese beiden Bibliotheken in Program Files (x86)/Arduino/Libraries/Restart arduino
Hardware
- Arduino Nano (Sie können Ihren Code jederzeit an Ihr Gerät anpassen)
- MFRC522 mit MAIFARE-Karten
- Überbrückungsdrähte (männlich zu männlich) (männlich zu weiblich)
- enc28j60 Ethernet-Modul/Schild
- RGB-LED
- 3 V ODER 5 V AC/DC-Wandler mit mehr als 700 Meilenampere
Einrichtung
- Befestige Arduino an Steckbrett (Wenn Nano oder Mikro)
- Suchen Sie online nach der Pinbelegung Ihres Boards, um das SPI-Setup zu finden (Werte unten ändern)
- Verbinden Sie Arduino Pin 10 (SS) mit dem Ethernet-Modul SS oder CS
- Verbinden Sie Arduino Pin 12 (MISO) mit RFID MISO und Ethernet SO
- Verbinden Sie Arduino Pin 11 (MOSI) mit RFID MOSI und Ethernet SI
- Verbinden Sie Arduino Pin 13 (SCK) mit RFID SCK und Ethernet SCK
- Verbinden Sie den Arduino-Pin 9 mit dem RFID-RST-Pin
- Verbinden Sie Arduino Pin 8 mit RFID SSN
- Verbinden Sie Arduino Pin 5 mit grüner LED, 4 mit blau und 3 mit rot
- Schließe deinen Wechselstrom an Gleichstrom an + und - auf deinem Steckbrett an
- Erden Sie Ihr Arduino an AC zu DC
- VCC und GND sowohl an rfid als auch an Ethernet an AC-DC anschließen (Denken Sie daran, dass diese Geräte NUR 3V SIND!!!!! liefern Sie keine 5V) Wenn das Problem besteht, verwenden Sie Widerstände, um die Spannung auf 3V zu bringen
- Verdrahten Sie den VCC-Pin der LED mit dem Arduino 3V oder AC-DC 3V
- Verbinden Sie das Ethernet-Kabel mit dem Modul und stellen Sie sicher, dass es sich im selben Netzwerk wie Ihr Computer befindet
- Verbinden Sie das USB-Kabel vom Computer mit dem Arduino
- Computer mit demselben Netzwerk verbinden
Code an Ihre Bedürfnisse anpassen
- Der Code ist ziemlich gut kommentiert, sodass Sie einfach hineingehen und bestimmte Teile ändern können, aber eines ist sicher das Ethernet-Modul
- Mac-Adresse kann gleich bleiben (es sei denn, Sie planen, mehrere davon zu erstellen)
- Wenn Sie eine 192.168. Basis-IP-Netzwerk Sie können die IP behalten
- Wieder können Sie die DNS behalten, nur die Zeit zum Ändern ist auf 8.8.4.4
- führen Sie ipconfig aus, um Ihr Gateway zu finden, der Standardwert ist 192.168.1.1 (wenn Sie ihn nicht kennen) (Der Code ist derzeit 192.168.1.5)
- führen Sie die Eingabeaufforderung aus und geben Sie ipconfig ein, um die IP-Adresse Ihres Computers herauszufinden
- scrollen Sie nach unten, um SEND TO SERVER zu finden, und geben Sie die IP Ihres Computers ein oder ob Ihr Port Ihren Router an Ihre öffentliche IP-Adresse weitergeleitet hat
- STELLEN SIE SICHER, DASS SIE PYTHON HABEN UND DEN SERVER AUSFÜHREN (Denken Sie daran, dass es sich nur um einen Beispielcode handelt, den wir für unsere Präsentation vor der Schule verwendet haben, daher war der Python-Server bereits vorgefertigt und fast nicht modifiziert, Sie können jeden Telnet/TCP-Server verwenden)
Und der andere Code, den Sie wahrscheinlich ändern müssen:
Ausführen des Codes
- Wechselstrom/Gleichstrom an die Wand anschließen
- Stellen Sie sicher, dass Ihr Arduino derzeit mit dem Computer verbunden ist
- Stellen Sie sicher, dass sich beide Geräte im selben Netzwerk befinden
- Flashen Sie Ihren modifizierten Arduino-Code oder wenn der, den ich habe, für Sie funktioniert, dann großartig (fast keine Chance, dass Sie ihn ändern müssen)
- Starten Sie Ihr Python-, C++-Skript oder einen anderen Telnet/TCP-Server in Ihrem Netzwerk
- Starten Sie Ihr Arduino zur Sicherheit neu
- Warten Sie, bis das Licht blau wird und versuchen Sie, eine Karte zu scannen. Wenn Ihr Server die ID der Karte erhalten hat, können Sie loslegen
- Denken Sie daran, was die Lichter bedeuten Violett/verblasstes Rot bedeutet Hochfahren
- Rot bedeutet, dass ein Fehler aufgetreten ist, beispielsweise dass die Karte in einem seltsamen Winkel war und/oder der Server nicht rechtzeitig reagiert hat
- Grün bedeutet bestanden, sodass der Server mit einem Versuch geantwortet hat und Sie Ihre nächste Karte lesen können
- Blau bedeutet Warten/Laden, warten auf eine Karte oder Antwort
- Wenn Ihr Arduino anfängt, sich zu verzögern und es länger als 30 Sekunden dauert, bis ein rotes Licht angezeigt wird, bedeutet das, dass das Arduino-Ethernet-Modul überhaupt keine Verbindung zum Server herstellen konnte. Dies kann durch mehrere Dinge verursacht werden. Erstens hat Ihr Arduino nicht genug Leistung und das Arduino-Ethernet-Modul hat Schwierigkeiten, ein Paket zu senden, oder Ihr Computerserver läuft nicht oder Ihr Arduino und Ihr Computer befinden sich nicht im selben Netzwerk.
-
Wenn Ihr Arduino weiterhin verzögert, versuchen Sie diese Tricks, um sie zu beheben
-
Deaktivieren Sie die Windows-Firewall
- Gehen Sie in die erweiterten Firewall-Einstellungen und erlauben Sie den eingehenden/ausgehenden Port 23
- Portweiterleitung Ihres Routers an Ihren Computer mit Port 23
- Wenn Sie drahtlos sind, verbinden Sie das Arduino direkt mit dem Router und Ihrem Computer mit demselben
- Kaufen Sie ein robusteres AC-DC-Netzteil
-
Andernfalls haben Sie möglicherweise Ihre IP-Adresse oder Verbindungsadresse falsch eingegeben
-
Entweder kontaktieren Sie mich unter [email protected], wenn es irgendwelche Probleme gibt
- DU BIST GUT ZU GEHEN!!!
Denken Sie daran, dass es keinen Code für das Türschlosssystem gibt, da ich keinen habe. Dies bedeutet, dass Sie einen Code hinzufügen müssen, wenn Sie dies nicht nur als Tracking-System, sondern als Türschloss-Tracking-System verwenden möchten.
Bitte lesen Sie unten:
Code
- Der Arduino-Code
- Beispiel-Servercode
Der Arduino-CodeC/C++
Dies ist die Software, die auf dem Arduino fast einsatzbereit ist. Sie müssen also nur Gateway, IP, Gateway, Mac-Adresse und DNS/ * * ------------ anpassen ---------------------- * MFRC522 Arduino * Reader/PCD Nano v3 * Signal Pin Pin * -------------- -------------------- * RST/Reset RST D9 * SPI SS NSS D10 * SPI MOSI MOSI D11 * SPI MISO MISO D12 * SPI SCK SCK D13 */// DIE ERSTE BIBLIOTHEK, DIE INSTALLIERT WERDEN MUSS, IST UIP ETHERNET ZWEITE IST MFRC522 BEIDE SIND AUF GITHUB#include#include //Für die Auswahl des Schlüssels#include //Die RFID-Schlüsselbibliothek #define RST_PIN 9 // Konfigurierbar, siehe typisches Pin-Layout oben - Dies ist für den Arduino Nano - Für RFID #define SS_PIN 8 // WIR VERWENDEN 8 FÜR RFID, WEIL DAS ETHERNET-MODUL 10 Byte Sektor verwendet =0; Byte BlockAddr =0; ////////Zugriff auf bestimmte Sektoren/Blöcke in der Karte, Trailerblock ist der letzte Block Byte trailerBlock =1;int red =3;int blue =4; //Pins für RGB LEDint green =5;EthernetClient-Client; // ETHERNET-INSTANZMFRC522 mfrc522 (SS_PIN, RST_PIN); // MFRC522-Instanz erstellen.MFRC522::MIFARE_Key key; //Setze Schlüsselinstanzsigniertes langes Timeout; // TIMEOUT, DAMIT ES NICHT FÜR IMMER SITZT.void setup () {// UI BEGIN pinMode (rot, OUTPUT); PinMode (blau, AUSGANG); // Initieren Sie den RGB-LED-PinMode (grün, AUSGANG); Zurücksetzen(); // Beginnen Sie mit LEDs aus Serial.begin (9600); //Computerverbindung mit einer Rate von 9600 Bits pro Sekunde starten //UI END //ETHERNET MODULE INITIAL SPI.begin(); // SPI-Bus initiieren uint8_t mac[6] ={0x00,0x01,0x02,0x03,0x04,0x05}; //MAC =000102030405 IP-Adresse mip(192.168.1.160); //IP =192.168.1.160 IPAdresse mdns(8,8,8,8); //DNS =8.8.8.8 IPAddress mgate(192,168,1,5); //GATEWAY =192.168.1.5 IP-Adresse msubnet(255,255,255,0); // SUBNET =255.255.255.0 Ethernet.begin (mac, mip, mdns, mgate , msubnet); // VERBINDEN MIT OBEN Serial.println ( "Erfolgreiche Verbindung"); // ENDE VON ETHERNET for(int t =255; t> 0; t--) { analogWrite(red, t); ////Mehr anzeigen, aber mindestens eine Sekunde zwischen dem SPI des Ethernets und der RFID-Verzögerung (10) lassen; } //RFID INITIAL mfrc522.PCD_Init(); // Init MFRC522-Karte für (Byte i =0; i <6; i++) { // Bereiten Sie den Schlüssel vor (wird sowohl als Schlüssel A als auch als Schlüssel B verwendet) key.keyByte[i] =0xFF; // Verwenden von FFFFFFFFFFFFh, was die Standardeinstellung bei der Chiplieferung ab Werk ist} Serial.println (F ("Scan a Card")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); // Schlüsselbytegröße abrufen Timeout =0; Verzögerung (2000); Reset();}//END RFID INITIALvoid loop() //Für immer laufen{// Nach neuen Karten suchen if (! mfrc522.PICC_IsNewCardPresent()) { digitalWrite (blue, LOW); Rückkehr; } // Eine der Karten auswählen if ( ! mfrc522.PICC_ReadCardSerial()) return; digitalWrite (blau, HOCH); //Zeige dem Benutzer, dass die Karte gelesen wurde byte piccType =mfrc522.PICC_GetType(mfrc522.uid.sak); // Kompatibilität mit Mifare-Karte prüfen if ( piccType !=MFRC522::PICC_TYPE_MIFARE_MINI &&piccType !=MFRC522::PICC_TYPE_MIFARE_1K &&piccType !=MFRC522::PICC_TYPE_MIFARE_4K) { Error(); Rückkehr; } Bytestatus; Bytepuffer [18]; Bytegröße =sizeof(Puffer); status =mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status !=MFRC522::STATUS_OK) { Serial.print (F ("PCD_Authenticate () fehlgeschlagen:")); Serial.println (mfrc522.GetStatusCodeName (Status)); Fehler(); Rückkehr; } // Daten aus dem Block lesen status =mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status !=MFRC522::STATUS_OK) { Serial.print (F("MIFARE_Read() fehlgeschlagen:")); Serial.println (mfrc522.GetStatusCodeName (Status)); Fehler(); } // PICC anhalten mfrc522.PICC_HaltA(); // Verschlüsselung auf PCD stoppen mfrc522.PCD_StopCrypto1(); // NACH DEM LESEN DER KARTE AN SERVER SENDEN if (client.connect(IPAddress(192,168,1,100),23)) { timeout =millis()+1000; Serial.println ("Client verbunden"); const String-ID =dump_byte_array(Puffer, Größe); client.println(ID); Serial.println("gesendet:" + ID); Verzögerung(10); while(client.available()==0) { if (timeout - millis() <0) goto close; } int-Größe; while((size =client.available())> 0) { uint8_t* msg =(uint8_t*)malloc(size); Größe =client.read (Nachricht, Größe); Serial.write (Nachricht, Größe); if(size ==sizeof("g") - 1) { Pass(); } sonst { Fehler(); } kostenlos (Nachricht); }schließen:client.stop(); } else { Serial.println ( "Verbindung zum Server konnte nicht hergestellt werden"); Fehler(); } //ENDE SENDEN ZUM SERVER Reset(); // LOOP OHNE LEDS NEU STARTEN} // DAS BUFFER-ARRAY IN EINE EINZELNE STRING IN GROSSBUCHSTABEN MACHEN, DIE UNSERER ID DES SEKTORS UND BLOCKString ENTSPRECHEND dump_byte_array(byte *buffer, byte bufferSize) { String out =""; for (byte i =0; i BeispielservercodePython
Hier ist ein vollständiges Beispiel für die Verwendung des serverimport SocketServerclass MyTCPHandler(SocketServer.BaseRequestHandler):def handle(self):# self.request ist der mit dem Client verbundene TCP-Socket self.data =self.request.recv (1024).strip() print "{} hat geschrieben:".format(self.client_address[0]) print self.data """ SQL STUFF HIER if(self.data ==SQL NAME oder so) { self.request .sendall("g")//gut senden // ZEIT UND STANDORT HIER IN SQL EINFÜGEN { else { self.request.sendall("bb")//schlecht senden // NICHTS nur an Arduino senden schlechte Daten} "" " self.request.sendall("g")if __name__ =="__main__":HOST, PORT ="", 23 server =SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever()Aktualisierter Code auf GitHub
Hier erhalten Sie den aktuellsten Codehttps://github.com/smerkousdavid/InternetRFIDTags
Schaltpläne
Die Schaltung ist einfach, also habe ich nur ein Foto mit der Verkabelung gemachtHerstellungsprozess