Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Ethernet Rfid-kaartlezer

Componenten en benodigdheden

Mifare MFRC522
Elk type spi rfid-lezer is prima
× 1
Arduino UNO
Elke arduino is prima
× 1
enc28j60
Je zult code moeten aanpassen voor alles dat ENC28J60 niet gebruikt
× 1
Jumperdraden (algemeen)
× 1
Broodplank (algemeen)
× 1
Computer
Elke computer die verbinding heeft met internet
× 1

Benodigde gereedschappen en machines

Schaar
Of draadstrippers

Apps en online services

Pycharm
Arduino IDE

Over dit project


Heeft u er ooit aan gedacht om een ​​RFID-tag/kaartbeveiligingssysteem of monitoringsysteem toe te voegen aan uw huis en/of kantoor. Nou, als je hier bent, wed ik dat je al hebt opgezocht hoe belachelijk duur ze zijn, variërend van $ 200 tot $ 2000, TE VEEL JUIST!?? Welnu, een vriend en ik hebben besloten een systeem te maken dat minder dan $ 100 zou kosten en zelfs meer zou kunnen doen dan alleen toegang krijgen tot een deur, dus dit is wat we bedachten. Een arduino rfid-taglezer met internettoegang. dat voor $ 20 meer deuren kan openen. Dit systeem is ontworpen om leerlingen op onze middelbare school te volgen en we hopen dat de school het goedkeurt.

Hier is het prototype:

Je denkt misschien dat het lang kan duren, yatta yatta yatta. Maar dit ding kostte me slechts ongeveer 6 uur (omdat ik stroomproblemen had), maar dit kan ongeveer 30 minuten duren om in te stellen zoals in het bovenstaande voorbeeld. Alle code en afbeeldingen staan ​​hieronder, dus als je in de war bent in de volgende stappen, ga je gang en kijk naar de onderste afbeeldingen/code.

Dit zijn alle stappen:

Voordat we beginnen (noodzakelijk)

Voordat we kunnen beginnen met het scannen van kaarten en ze naar onze Telnet/TCP-server kunnen sturen, hebben we een aantal bibliotheken nodig. Download UIPEthernet hier https://github.com/ntruchsess/arduino_uip

haal MFRC522 hier https://github.com/miguelbalboa/rfid

Zet beide bibliotheken in Program Files(x86)/Arduino/Libraries/Restart arduino

Hardware

  1. Arduino Nano (u kunt uw code altijd aanpassen aan uw apparaat)
  2. MFRC522 met MAIFARE-kaarten
  3. Jumperdraden (mannelijk naar mannelijk) (mannelijk naar vrouwelijk)
  4. enc28j60 ethernetmodule/-schild
  5. RGB-LED
  6. 3V OF 5V groter dan 700 mijlampère AC-DC-omzetter

Instellen

  1. Bevestig arduino aan breadboard (indien nano of micro)
  2. Zoek online naar de pin-out van uw bord om de SPI-configuratie te vinden (verander waarden hieronder)
  3. Verbind arduino pin 10 (SS) met ethernet module ss of CS
  4. Verbind arduino pin 12 (MISO) met rfid MISO en ethernet SO
  5. Verbind arduino pin 11 (MOSI) met rfid MOSI en ethernet SI
  6. Verbind arduino pin 13 (SCK) met rfid SCK en ethernet SCK
  7. Verbind arduino-pin 9 met rfid RST-pin
  8. Verbind arduino pin 8 met rfid SSN
  9. Sluit arduino-pin 5 aan op groene led, 4 op blauw en 3 op rood
  10. Verbind je AC met DC met de + en - op je breadboard
  11. Aard je arduino naar de ac naar dc
  12. Sluit VCC en GND op zowel rfid als ethernet aan op de ac-dc (VERGEET NIET DAT DEZE APPARATEN ALLEEN 3V ZIJN!!!!! Lever geen 5v) Als het probleem zich voordoet, gebruik dan weerstanden om de spanning op 3v te brengen
  13. Draad VCC-pin op LED aan op de arduino 3v of ac-dc 3v
  14. Sluit de ethernetkabel aan op de module en zorg ervoor dat deze zich in hetzelfde netwerk bevindt als uw computer
  15. Sluit de USB-kabel van de computer aan op de Arduino
  16. Verbind de computer met hetzelfde netwerk


Wijzig de code om aan uw behoeften te voldoen

  1. De code is redelijk goed becommentarieerd, dus je kunt gewoon naar binnen gaan en bepaalde delen wijzigen, maar één ding is zeker:de ethernet-module
  2. Mac-adres kan hetzelfde blijven (tenzij je van plan bent meerdere van deze te bouwen)
  3. Als je een 192.168.1. basis ip-netwerk kunt u het ip behouden
  4. Nogmaals, je kunt de dns behouden, alleen de tijd om te veranderen is naar 8.8.4.4
  1. voer ipconfig uit om je gateway te vinden, de standaard is 192.168.1.1 (als je het niet weet) (de code is momenteel 192.168.1.5)
  2. voer de opdrachtprompt uit en typ ipconfig om het ip-adres van uw computer te achterhalen
  1. scroll naar beneden om VERZENDEN NAAR SERVER te vinden en voer het IP-adres van uw computer in of als uw poort uw router heeft doorgestuurd naar uw openbare IP-adres
  2. ZORG ERVOOR DAT JE PYTHON HEBT EN VOER DE SERVER UIT (Onthoud dat het slechts een voorbeeldcode is die we hebben gebruikt voor onze presentatie aan de school, dus de Python-server was al vooraf gemaakt en bijna niet aangepast, je kunt elke Telnet/TCP-server gebruiken)
  3. li>

En de andere code die u waarschijnlijk moet wijzigen:


De code uitvoeren

  1. Steek wisselstroom-gelijkstroom aan op de muur
  2. Zorg ervoor dat je Arduino momenteel is aangesloten op de computer
  3. Zorg ervoor dat beide apparaten op hetzelfde netwerk zijn aangesloten
  4. Flash je aangepaste Arduino-code of als degene die ik heb voor je werkt, geweldig (bijna geen kans dat je het moet wijzigen)
  5. Start je Python-, C++-script of welke Telnet/TCP-server dan ook op je netwerk
  6. Herstart je arduino om veilig te zijn
  7. Wacht tot het lampje blauw wordt en probeer een kaart te scannen. Als je server de ID van de kaart heeft gekregen, ben je klaar om te gaan
  8. Onthoud wat de lampjes betekenen Paars/vervaagd rood betekent opstarten
  9. Rood betekent een fout, zoals dat de kaart in een vreemde hoek stond en/of de server niet op tijd reageerde
  10. Groen betekent doorgeven, dus de server reageerde met een go en je kunt je volgende kaart lezen
  11. Blauw betekent wachten/laden, wachtend op een kaart of antwoord
  12. Als je arduino begint te vertragen en het meer dan 30 seconden duurt voordat een rood lampje brandt, betekent dit dat de arduino-ethernetmodule helemaal geen verbinding kon maken met de server. Dit kan worden veroorzaakt door meerdere dingen, eerst heeft uw arduino niet genoeg stroom en heeft de arduino-ethernetmodule moeite om een ​​pakket te verzenden of dat uw computerserver niet actief is of dat uw arduino en computer zich niet op hetzelfde netwerk bevinden.
  13. Als je arduino blijft achterblijven, probeer dan deze trucs om ze te repareren

  14. Windows-firewall uitschakelen

  15. ga naar geavanceerde firewall-instellingen en sta inkomende/uitgaande poort 23 toe
  16. port forward je router naar je computer met poort 23
  17. Als je draadloos bent, sluit je de Arduino rechtstreeks aan op de router en je computer op dezelfde
  18. Koop een zwaardere AC-DC-stroomadapter
  19. Anders heb je misschien je ip-adres of verbindingsadres verkeerd ingevoerd

  20. Neem dan contact met mij op via [email protected] als er problemen zijn

  21. JE BENT GOED OM TE GAAN!!!

Onthoud dat er geen code is voor het deurslotsysteem, omdat ik er geen heb, dit betekent dat je een code moet toevoegen als je dit niet alleen als een volgsysteem wilt gebruiken, maar ook als een deurslotvolgsysteem.


Lees hieronder:

Code

  • De Arduino-code
  • Voorbeeld servercode
De Arduino-codeC/C++
Dit is de software die bijna klaar is voor gebruik op de Arduino, dus wat je doet is gewoon de gateway, ip, gateway, mac-adres en dns
/* * ------------ ---------------------- * MFRC522 Arduino * Reader/PCD Nano v3 * Signaalpenpin * -------------- -------------------- * RST/Reset RST D9 * SPI SS NSS D10 * SPI MOSI MOSI D11 * SPI MISO MISO D12 * SPI SCK SCK D13 */// DE EERSTE BIBLIOTHEEK DIE GENSTALLEERD MOET WORDEN IS UIP ETHERNET TWEEDE IS MFRC522 BEIDE ZIJN OP GITHUB#include #include  //Voor de selectie van de key#include  //The RFID-sleutelbibliotheek#define RST_PIN 9 // Configureerbaar, zie de typische pinlay-out hierboven - Dit is voor de Arduino Nano - Voor RFID#define SS_PIN 8 //WE GEBRUIKEN 8 VOOR RFID OMDAT DE ETHERNET-MODULE 10 byte sector =0 GEBRUIKT; byte blockAddr =0; ////////Toegang tot bepaalde sectoren/blokken in de kaart, trailerblok is het laatste blokbyte trailerBlock =1;int rood =3;int blauw =4; //Pinnen voor RGB LEDint groen =5;EthernetClient-client; //ETHERNET INSTANCEMFRC522 mfrc522 (SS_PIN, RST_PIN); // Maak MFRC522-instantie. MFRC522::MIFARE_Key-sleutel; // Stel sleutelinstantie ondertekend lange time-out in; // TIME-OUT ZODAT HET ER NIET VOOR ALTIJD ZITPLAATS setup () {//UI BEGIN pinMode (rood, OUTPUT); pinMode (blauw, UITGANG); //Init de RGB LED pinMode (groen, OUTPUT); Opnieuw instellen(); // Begin met leds uit Serial.begin (9600); //Start computerverbinding met een snelheid van 9600 bits per seconde //UI END //ETHERNET MODULE INITIAL SPI.begin(); // Init SPI-bus uint8_t mac [6] ={0x00,0x01,0x02,0x03,0x04,0x05}; //MAC =000102030405 IPA-adres mip (192.168.1.160); //IP =192.168.1.160 IPA-adres mdns (8,8,8,8); //DNS =8.8.8.8 IPA-adres mgate(192,168,1,5); // GATEWAY =192.168.1.5 IPA-adres msubnet (255,255,255,0); //SUBNET =255.255.255.0 Ethernet.begin (mac, mip, mdns, mgate, msubnet); // VERBIND MET BOVENSTAANDE Serial.println ("Succesvolle verbinding"); // EINDE VAN ETHERNET voor (int t =255; t> 0; t--) {analogeWrite (rood, t); ////Meer van de show, maar laat minstens een seconde tussen de SPI van het ethernet en RFID-vertraging (10); } //RFID INITIAL mfrc522.PCD_Init(); // Init MFRC522-kaart voor (byte i =0; i <6; i++) {// Bereid de sleutel voor (zowel als sleutel A als als sleutel B) key.keyByte [i] =0xFF; // met FFFFFFFFFFFFh wat de standaard is bij de levering van de chip vanuit de fabriek } Serial.println(F("Scan a Card")); dump_byte_array (key.keyByte, MFRC522::MF_KEY_SIZE); //Get time-out voor sleutelbytegrootte =0; vertraging (2000); Reset();}//END RFID INITIALvoid loop() //Run forever{ // Zoek naar nieuwe kaarten if (! mfrc522.PICC_IsNewCardPresent()) { digitalWrite(blue, LOW); opbrengst; } // Selecteer een van de kaarten als (! mfrc522.PICC_ReadCardSerial()) terugkeert; digitalWrite (blauw, HOOG); //Laat gebruiker zien dat de kaart is gelezen byte piccType =mfrc522.PICC_GetType(mfrc522.uid.sak); // Controleer op compatibiliteit met Mifare-kaart als (piccType!=MFRC522::PICC_TYPE_MIFARE_MINI &&piccType!=MFRC522::PICC_TYPE_MIFARE_1K &&piccType!=MFRC522::PICC_TYPE_MIFARE_4K) { Error(); opbrengst; } bytestatus; bytebuffer[18]; bytegrootte =sizeof(buffer); 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() failed:")); Serial.println(mfrc522.GetStatusCodeName(status)); Fout(); opbrengst; } // Lees gegevens van de blokstatus =mfrc522.MIFARE_Read (blockAddr, buffer, &size); if (status!=MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed:")); Serial.println(mfrc522.GetStatusCodeName(status)); Fout(); } // Stop PICC mfrc522.PICC_HaltA(); // Stop codering op PCD mfrc522.PCD_StopCrypto1(); // NA GEDAAN LEZEN KAART VERZENDEN NAAR SERVER if (client.connect (IPAddress(192,168,1,100),23)) { timeout =millis()+1000; Serial.println ("Cliënt verbonden"); const String-ID =dump_byte_array (buffer, grootte); klant.println(ID); Serial.println ("verzonden:" + ID); vertraging(10); while(client.available()==0) { if (time-out - millis() <0) moet sluiten; } int-grootte; while((size =client.available())> 0) { uint8_t* msg =(uint8_t*)malloc(size); grootte =client.read (bericht, grootte); Serieel.schrijven (bericht, grootte); if(size ==sizeof("g") - 1) { Pass(); } anders { Fout(); } gratis (bericht); }sluiten:cliënt.stop(); } else { Serial.println("Kan geen verbinding maken met server"); Fout(); } // EINDE VAN VERZENDEN NAAR SERVER Reset(); // HERSTART LUS ZONDER LEDS AAN}// DRAAI DE BUFFER-ARRAY IN EEN ENKELE STRING IN HOOFDLETTERS DIE OVEREEN IS MET ONZE ID VAN DE SECTOR EN BLOCKString dump_byte_array (byte *buffer, byte bufferSize) { String out =""; for (byte i =0; i  
Voorbeeld servercodePython
Hier is een compleet voorbeeld van het gebruik van de server
import SocketServerclass MyTCPHandler(SocketServer.BaseRequestHandler):def handle(self):# self.request is de TCP-socket die is verbonden met de client self.data =self.request.recv (1024).strip() print "{} schreef:".format(self.client_address[0]) print self.data """ SQL STUFF HIER if(self.data ==SQL NAME of zoiets) { self.request .sendall("g")//send goede //VOEG TIJD EN LOCATIE IN IN SQL HIER { else { self.request.sendall("bb")//send slechte //DOE NIETS gewoon naar Arduino slechte data } "" " self.request.sendall("g")if __name__ =="__main__":HOST, PORT ="", 23 server =SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever()
Code bijgewerkt op GitHub
Hier kunt u de meest recente code krijgenhttps://github.com/smerkousdavid/InternetRFIDTags

Schema's

Het circuit is eenvoudig, dus ik heb net een foto gemaakt met de bedrading

Productieproces

  1. Wenskaart
  2. Creditcard
  3. Arduino RFID-slot met RC522 - MIFARE-protocol 13,56 Mhz
  4. Arduino RFID Lock-zelfstudie
  5. Aanwezigheidssysteem met Arduino en RFID met Python
  6. Arduino Spybot
  7. FlickMote
  8. Zelfgemaakte tv B-Gone
  9. Hoofdklok
  10. Vind mij
  11. Arduino Amiga Floppy Disk Reader (V1)