산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino 이더넷 Rfid 카드 리더기

구성품 및 소모품

Mifare MFRC522
어떤 유형의 spi rfid 리더도 괜찮습니다.
× 1
Arduino UNO
아두이노라면 상관없습니다
× 1
enc28j60
ENC28J60을 사용하지 않는 코드를 수정해야 합니다.
× 1
점퍼 와이어(일반)
× 1
브레드보드(일반)
× 1
컴퓨터
인터넷에 연결되는 모든 컴퓨터
× 1

필요한 도구 및 기계

가위
와이어 스트리퍼

앱 및 온라인 서비스

Pycharm
Arduino IDE

이 프로젝트 정보


집 및/또는 사무실에 RFID 태그/카드 보안 시스템 또는 모니터링 시스템을 추가하는 것을 생각해 본 적이 있습니까? 글쎄, 당신이 여기에 왔다면 당신은 이미 그들이 $200에서 $2000에 이르기까지 얼마나 비싼지 찾아보았을 것입니다. 너무 옳습니다!?? 친구와 저는 100달러 미만의 비용이 들고 문에 접근하는 것보다 훨씬 더 많은 일을 할 수 있는 시스템을 만들기로 결정했습니다. 그래서 이것이 우리가 생각해 낸 것입니다. 인터넷 지원 arduino rfid 태그 리더. 20달러를 더 내면 문을 열 수 있습니다. 이 시스템은 우리 고등학교의 학생을 추적하도록 설계되었으며 학교에서 승인하기를 바랍니다.

다음은 프로토타입입니다:

시간이 오래 걸릴지도 모른다고 생각하실 수도 있습니다. yatta yatta yatta. 그러나 이 작업은 약 6시간 밖에 걸리지 않았지만(전원 문제가 있었기 때문에) 위의 예와 같이 설정하는 데 약 30분이 소요될 수 있습니다. 모든 코드와 그림이 아래에 있으므로 다음 단계에서 혼란스럽다면 계속 진행하여 아래 그림/코드를 살펴보세요.

다음은 모든 단계입니다.

시작하기 전에(필수)

카드 스캔을 시작하고 Telnet/TCP 서버로 보내기 전에 몇 가지 라이브러리가 필요합니다. 여기에서 UIPEthernet을 받으세요 https://github.com/ntruchsess/arduino_uip

여기에서 MFRC522를 받으세요 https://github.com/miguelbalboa/rfid

Program Files(x86)/Arduino/Libraries/ Restart arduino

에 이 두 라이브러리를 모두 넣습니다.

하드웨어

<올>
  • Arduino Nano(항상 기기에 맞게 코드를 수정할 수 있음)
  • MAIFARE 카드가 있는 MFRC522
  • 점퍼 와이어(남성 대 남성)(남성 대 여성)
  • enc28j60 이더넷 모듈/쉴드
  • RGB LED
  • 700마일 암페어 AC-DC 컨버터보다 큰 3V 또는 5V
  • 설정

    <올>
  • arduino를 브레드보드에 연결(나노 또는 마이크로인 경우)
  • SPI 설정을 찾으려면 보드의 핀아웃을 온라인에서 찾아보세요(아래에서 값 변경)
  • arduino 핀 10(SS)을 이더넷 모듈 ss 또는 CS에 연결
  • arduino 핀 12(MISO)를 rfid MISO 및 이더넷 SO에 연결
  • arduino 핀 11(MOSI)을 rfid MOSI 및 이더넷 SI에 연결
  • arduino 핀 13(SCK)을 rfid SCK 및 이더넷 SCK에 연결
  • arduino 핀 9를 rfid RST 핀에 연결
  • arduino 핀 8을 rfid SSN에 연결
  • arduino 핀 5를 녹색 led에, 4를 파란색에, 3을 빨간색에 연결
  • AC와 DC를 브레드보드의 + 및 -에 연결
  • arduino를 ac에서 dc로 접지
  • rfid 및 이더넷 모두의 VCC 및 GND를 ac-dc에 연결합니다(이 장치는 3v만 있음을 기억하십시오!!!!! 5v를 공급하지 마십시오) 문제가 있는 경우 저항을 사용하여 전압을 3v로 가져옵니다.
  • LED의 VCC 핀을 arduino 3v 또는 ac-dc 3v에 연결
  • 이더넷 케이블을 모듈에 연결하고 컴퓨터와 동일한 네트워크에 있는지 확인하십시오.
  • USB 케이블을 컴퓨터에서 arduino로 연결
  • 같은 네트워크에 컴퓨터 연결

  • 필요에 맞게 코드 수정

    <올>
  • 코드가 주석 처리가 잘 되어 있어 특정 부분만 수정해도 되지만 한 가지 확실한 것은 ehternet 모듈입니다.
  • Mac 주소는 동일하게 유지될 수 있습니다(여러 개를 구축할 계획이 아닌 경우)
  • 192.168.1을 사용하는 경우 기본 ip 네트워크는 ip를 유지할 수 있습니다.
  • 다시 dns를 유지할 수 있지만 변경할 시간은 8.8.4.4까지입니다.
  • <올>
  • ipconfig를 실행하여 게이트웨이를 찾으십시오. 기본값은 192.168.1.1입니다(모르는 경우)(현재 코드는 192.168.1.5임)
  • 명령 프롬프트를 실행하고 ipconfig를 입력하여 컴퓨터의 IP 주소를 알아냅니다.
  • <올>
  • SEND TO SERVER를 찾기 위해 아래로 스크롤하고 컴퓨터의 IP를 입력하거나 포트가 라우터를 공개 IP 주소로 포워딩한 경우
  • PYTHON이 있는지 확인하고 서버를 실행하십시오(학교 프레젠테이션에 사용한 예제 코드일 뿐이므로 Python 서버는 이미 미리 만들어졌고 거의 수정되지 않았으므로 Telnet/TCP 서버를 사용할 수 있음을 기억하십시오)

    그리고 아마도 수정해야 할 다른 코드:


    코드 실행

    <올>
  • AC-DC 전원을 벽에 연결
  • arduino가 현재 컴퓨터에 연결되어 있는지 확인
  • 두 기기가 동일한 네트워크에 있는지 확인
  • 수정된 arduino 코드를 플래시하거나 내가 가지고 있는 코드가 제대로 작동하면 훌륭합니다(수정해야 할 가능성이 거의 없음)
  • Python, C++ 스크립트 또는 네트워크의 Telnet/TCP 서버 시작
  • 안전을 위해 arduino를 다시 시작하세요.
  • 표시등이 파란색으로 바뀔 때까지 기다렸다가 카드를 스캔해 보세요. 서버에 카드 ID가 있으면 바로 사용할 수 있습니다.
  • 표시등이 의미하는 바를 기억하십시오. 자주색/빨간색은 부팅 중임을 의미합니다.
  • 빨간색은 카드가 이상한 각도에 있거나 서버가 제시간에 응답하지 않는 것과 같은 오류를 의미합니다.
  • 녹색은 통과를 의미하므로 서버가 이동으로 응답하여 다음 카드를 읽을 수 있습니다.
  • 파란색은 카드 또는 응답을 기다리는 중/로드 중임을 의미합니다.
  • arduino가 지연되기 시작하고 빨간색 표시등이 표시되는 데 30초 이상 걸린다면 arduino 이더넷 모듈이 서버에 전혀 연결할 수 없다는 의미입니다. 이것은 먼저 arduino의 전원이 충분하지 않고 arduino 이더넷 모듈이 패킷을 보내기 위해 고군분투하고 있거나 컴퓨터 서버가 실행되고 있지 않거나 arduino와 컴퓨터가 동일한 네트워크에 있지 않기 때문에 여러 가지로 인해 발생할 수 있습니다. <리>

    arduino가 계속 느려지면 다음 트릭을 시도하여 문제를 해결하세요.

  • <리>

    Windows 방화벽 끄기

  • 고급 방화벽 설정으로 이동하여 인바운드/아웃바운드 포트 23 허용
  • 23번 포트로 라우터를 컴퓨터로 포트 포워딩
  • 무선인 경우 arduino를 라우터에 직접 연결하고 컴퓨터를 동일한 라우터에 연결합니다.
  • 강력한 AC-DC 전원 어댑터 구입
  • <리>

    그렇지 않으면 IP 주소를 입력했거나 연결 주소를 잘못 입력했을 수 있습니다.

    <리>

    문제가 있으면 [email protected]으로 연락하십시오.

  • 잘 하셨습니다!!!
  • 도어록 시스템에 대한 코드가 없다는 것을 기억하십시오. 저는 코드가 없기 때문에 이를 추적 시스템뿐만 아니라 도어록 추적 시스템으로 사용하려면 몇 가지 코드를 추가해야 합니다.


    아래를 읽어주세요:

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Arduino 코드
  • 서버 코드 예시
  • Arduino 코드C/C++
    이것은 arduino에서 거의 사용할 준비가 된 소프트웨어이므로 게이트웨이, ip, 게이트웨이, mac 주소 및 dns
    /* * ------------를 조정하기만 하면 됩니다. ---------------------- * MFRC522 Arduino * 리더/PCD 나노 v3 * 신호 핀 핀 * -------------- -------------------- * RST/리셋 RST D9 * SPI SS NSS D10 * SPI MOSI MOSI D11 * SPI MISO MISO D12 * SPI SCK SCK D13 */// 설치해야 할 첫 번째 라이브러리는 UIP 이더넷 두 번째는 MFRC522입니다. 둘 다 GITHUB에 있습니다#include #include  //키 선택을 위해#include  // RFID 키 라이브러리#define RST_PIN 9 // 구성 가능, 위의 일반적인 핀 레이아웃 참조 - 이것은 Arduino Nano용입니다. - RFID용#define SS_PIN 8 //이더넷 모듈이 10바이트 섹터 =0을 사용하기 때문에 RFID에 8을 사용하고 있습니다. 바이트 blockAddr =0; ////////카드의 특정 섹터/블록에 액세스합니다. 트레일러 블록은 마지막 블록 바이트입니다. trailerBlock =1;int red =3;int blue =4; //RGB LED용 핀 녹색 =5;EthernetClient 클라이언트; //이더넷 인스턴스MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522 instance.MFRC522::MIFARE_Key 키 생성; // 키 instancesigned 긴 시간 초과 설정; //시간이 초과되어 FOREVERvoid setup(){ //UI BEGIN pinMode(red, OUTPUT); 핀모드(파란색, 출력); //RGB LED pinMode 초기화(녹색, OUTPUT); 초기화(); // led를 끈 상태에서 시작합니다. Serial.begin(9600); //초당 9600비트의 속도로 컴퓨터 연결 시작 //UI END //ETHERNET MODULE INITIAL SPI.begin(); // SPI 버스 초기화 uint8_t mac[6] ={0x00,0x01,0x02,0x03,0x04,0x05}; //MAC =000102030405 IP주소 mip(192,168,1,160); //IP =192.168.1.160 IP주소 mdns(8,8,8,8); //DNS =8.8.8.8 IP 주소 mgate(192,168,1,5); //게이트웨이 =192.168.1.5 IP주소 msubnet(255,255,255,0); //SUBNET =255.255.255.0 Ethernet.begin(mac, mip, mdns, mgate, msubnet); //위를 사용하여 연결 Serial.println("성공적인 연결"); // 이더넷의 끝 for(int t =255; t> 0; t--) { analogWrite(red, t); ////더 많은 것을 보여주지만 이더넷의 SPI와 RFID delay(10) 사이에 최소한 1초를 둡니다. } //RFID 초기화 mfrc522.PCD_Init(); // MFRC522 카드 초기화 for (byte i =0; i <6; i++) { // 키 준비(키 A와 키 B 모두로 사용) key.keyByte[i] =0xFF; // 공장 출하시 칩 출하시 기본값인 FFFFFFFFFFFFh 사용 } Serial.println(F("Scan a Card")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); //키 바이트 크기 가져오기 타임아웃 =0; 지연(2000); Reset();}//END RFID INITIALvoid loop() //영구 실행{ // 새 카드 찾기 if ( ! mfrc522.PICC_IsNewCardPresent()) { digitalWrite(blue, LOW); 반품; } // 카드 중 하나 선택 if ( ! mfrc522.PICC_ReadCardSerial()) return; 디지털 쓰기(파란색, 높음); //사용자에게 카드를 읽었음을 보여줍니다. byte piccType =mfrc522.PICC_GetType(mfrc522.uid.sak); // Mifare 카드와의 호환성 확인 if ( piccType !=MFRC522::PICC_TYPE_MIFARE_MINI &&piccType !=MFRC522::PICC_TYPE_MIFARE_1K &&piccType !=MFRC522::PICC_TYPE_MIFARE_4K) { Error 반품; } 바이트 상태; 바이트 버퍼[18]; 바이트 크기 =sizeof(버퍼); 상태 =mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (상태 !=MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() 실패:")); Serial.println(mfrc522.GetStatusCodeName(상태)); 오류(); 반품; } // 블록에서 데이터 읽기 status =mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (상태 !=MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() 실패:")); Serial.println(mfrc522.GetStatusCodeName(상태)); 오류(); } // PICC 중지 mfrc522.PICC_HaltA(); // PCD에서 암호화 중지 mfrc522.PCD_StopCrypto1(); // 읽기 완료 후 서버로 카드 보내기 if (client.connect(IPAddress(192,168,1,100),23)) { timeout =millis()+1000; Serial.println("클라이언트 연결됨"); const 문자열 ID =dump_byte_array(버퍼, 크기); client.println(ID); Serial.println("보낸:" + ID); 지연(10); while(client.available()==0) { if (timeout - millis() <0) goto close; } 정수 크기; while((크기 =client.available())> 0) { uint8_t* msg =(uint8_t*)malloc(크기); 크기 =client.read(msg,크기); Serial.write(msg,크기); if(크기 ==sizeof("g") - 1) { 통과(); } else { 오류(); } 무료(메시지); }닫기:client.stop(); } else { Serial.println("서버에 연결할 수 없습니다."); 오류(); } //서버로 보내기 끝 Reset(); //LED가 켜지지 않은 루프 다시 시작}// 버퍼 어레이를 대문자로 된 단일 문자열로 전환하여 섹터 ID와 BLOCKString dump_byte_array(byte *buffer, byte bufferSize) { String out =""; for (byte i =0; i  
    서버 코드의 예Python
    다음은 server
    import SocketServerclass MyTCPHandler(SocketServer.BaseRequestHandler)를 사용하는 방법의 완전한 예입니다. def handle(self):# self.request는 클라이언트에 연결된 TCP 소켓입니다. self.data =self.request.recv (1024).strip() print "{} write:".format(self.client_address[0]) print self.data """ SQL STUFF HERE if(self.data ==SQL NAME 또는 무언가) { self.request .sendall("g")//좋은 보내기 // INSERT TIME AND LOCATION INTO SQL HERE { else { self.request.sendall("bb")//send 나쁜 //아무것도 arduino 잘못된 데이터로 보내지 마십시오 } "" " self.request.sendall("g")if __name__ =="__main__":HOST, PORT ="", 23 서버 =SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever()
    GitHub의 업데이트된 코드
    여기에서 가장 업데이트된 코드를 얻을 수 있습니다.https://github.com/smerkousdavid/InternetRFIDTags

    회로도

    회로가 간단해서 배선만 사진으로 만들었습니다.

    제조공정

    1. 인사말 카드
    2. 신용카드
    3. Arduino RFID 잠금(RC522 포함) - MIFARE 프로토콜 13.56Mhz
    4. Arduino RFID 잠금 자습서
    5. Python과 함께 Arduino 및 RFID를 사용한 출석 시스템
    6. Arduino 스파이봇
    7. FlickMote
    8. 수제 TV B-Gone
    9. 마스터 시계
    10. Arduino Amiga 플로피 디스크 리더(V1)