Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Leitor de cartão Arduino Ethernet Rfid

Componentes e suprimentos

Mifare MFRC522
Qualquer tipo de leitor de spi rfid é adequado
× 1
Arduino UNO
Qualquer arduino serve
× 1
enc28j60
Você terá que modificar o código de qualquer coisa que não use ENC28J60
× 1
Fios de jumpers (genérico)
× 1
Breadboard (genérico)
× 1
Computador
Qualquer computador conectado à Internet
× 1

Ferramentas e máquinas necessárias

Tesouras
Ou decapantes

Aplicativos e serviços online

Pycharm
Arduino IDE

Sobre este projeto





Você já pensou em adicionar tags RFID / sistema de segurança de cartão ou sistema de monitoramento em sua casa e / ou escritório? Bem, se você chegou aqui, eu aposto que você já olhou para cima como eles são absurdamente caros, variando de $ 200 a $ 2.000, MUITO CERTO! ?? Bem, um amigo e eu decidimos fazer um sistema que custaria menos de $ 100 e poderia fazer ainda mais do que apenas acessar uma porta, então foi isso que fizemos. Um leitor de tags Arduino rfid habilitado para internet. que por US $ 20 a mais pode abrir portas. Este sistema foi projetado para rastrear alunos em nosso colégio e esperamos que seja aprovado pela escola.

Aqui está o protótipo:

Você pode estar pensando que pode demorar muito, yatta yatta yatta. No entanto, essa coisa só me levou cerca de 6 horas (porque eu tive problemas de energia), mas isso pode levar cerca de 30 minutos para configurar como no exemplo acima. Todo o código e as imagens estão abaixo, então se você ficar confuso nas próximas etapas, vá em frente e olhe para as imagens / códigos inferiores.


Aqui estão todas as etapas:


Antes de começar (necessário)


Antes de começarmos a escanear os cartões e enviá-los ao nosso servidor Telnet / TCP, precisamos de algumas bibliotecas. Obtenha UIPEthernet aqui https://github.com/ntruchsess/arduino_uip

obtenha MFRC522 aqui https://github.com/miguelbalboa/rfid

Coloque ambas as bibliotecas em Arquivos de Programas (x86) / Arduino / Libraries / Reinicie o arduino


Hardware

  1. Arduino Nano (você sempre pode modificar seu código para caber em seu dispositivo)
  2. MFRC522 com cartões MAIFARE
  3. Fios de ligação (macho para macho) (macho para fêmea)
  4. módulo ethernet enc28j60 / sheild
  5. LED RGB
  6. Conversor AC-DC 3V OU 5V maior que 700 mileamp


Configuração

  1. Anexe o arduino à placa de ensaio (se nano ou micro)
  2. Pesquise online a pinagem de sua placa para encontrar a configuração SPI (altere os valores abaixo)
  3. Conecte o pino 10 do arduino (SS) ao módulo ethernet ss ou CS
  4. Conecte o pino 12 do arduino (MISO) ao rfid MISO e Ethernet SO
  5. Conecte o arduino pino 11 (MOSI) ao rfid MOSI e Ethernet SI
  6. Conecte o arduino pino 13 (SCK) ao rfid SCK e ethernet SCK
  7. Conecte o pino 9 do arduino ao pino RST do rfid
  8. Conecte o pino 8 do arduino ao SSN RFID
  9. Conecte o pino 5 do arduino ao led verde, 4 ao azul e 3 ao vermelho
  10. Conecte seu AC para DC ao + e - em sua placa de ensaio
  11. Aterre seu arduino ao ac para dc
  12. Conecte VCC e GND em ambos rfid e ethernet ao ac-dc (LEMBRE-SE QUE ESSES DISPOSITIVOS SÃO APENAS 3v !!!!! não forneça 5v) Se houver problema, use resistores para trazer a tensão para 3v
  13. Ligue o pino VCC do LED ao arduino 3v ou ac-dc 3v
  14. Conecte o cabo Ethernet ao módulo e certifique-se de que esteja na mesma rede que o seu computador
  15. Conecte o cabo USB do computador ao arduino
  16. Conecte o computador à mesma rede





Modifique o código para atender às suas necessidades

  1. O código é muito bem comentado, então você pode simplesmente entrar e modificar certas partes, mas uma coisa é certa é o módulo ehternet
  2. O endereço Mac pode permanecer o mesmo (a menos que você planeje construir vários deles)
  3. Se você estiver usando um 192.168. rede de ip base você pode manter o ip
  4. Novamente, você pode manter o dns, a única hora de mudar é para 8.8.4.4
  1. execute ipconfig para encontrar seu gateway, o padrão é 192.168.1.1 (se você não souber) (o código atualmente é 192.168.1.5)
  2. execute o prompt de comando e digite ipconfig para descobrir o endereço IP do seu computador
  1. role para baixo para encontrar ENVIAR PARA O SERVIDOR e insira o ip do seu computador ou se a sua porta encaminhou o seu roteador para o seu endereço IP público
  2. VERIFIQUE SE VOCÊ TEM PYTHON E EXECUTE O SERVIDOR (Lembre-se de que é apenas um código de exemplo que usamos para nossa apresentação para a escola, então o servidor python já foi pré-fabricado e quase não foi modificado, você pode usar qualquer servidor Telnet / TCP)

E o outro código que você provavelmente precisará modificar:





Executando o código

  1. Conecte a alimentação AC-DC na parede
  2. Certifique-se de que seu arduino esteja conectado ao computador
  3. Certifique-se de que os dois dispositivos estejam na mesma rede
  4. Atualize seu código arduino modificado ou se o que eu tenho funcionar para você, ótimo (quase sem chance de você ter que modificá-lo)
  5. Inicie seu Python, script C ++ ou qualquer servidor Telnet / TCP em sua rede
  6. Reinicie seu arduino para ficar seguro
  7. Espere até que a luz fique azul e tente digitalizar um cartão. Se o seu servidor obteve a ID do cartão, você está pronto para usar
  8. Lembre-se do que as luzes significam Roxo / vermelho esmaecido significa inicialização
  9. Vermelho significa qualquer erro, como o cartão estava em um ângulo estranho e / ou o servidor não respondeu a tempo
  10. Verde significa passar para que o servidor responda com uma tentativa e você possa ler seu próximo cartão
  11. Azul significa esperar / carregar, esperar por um cartão ou resposta
  12. Se o seu arduino começar a ficar lento e levar mais de 30 segundos para mostrar uma luz vermelha, significa que o módulo arduino ethernet não conseguiu se conectar ao servidor. Isso pode ser causado por várias coisas primeiro, seu arduino não tem energia suficiente e o módulo ethernet arduino está lutando para enviar um pacote ou que o servidor do seu computador não está funcionando ou que o arduino e o computador não estão na mesma rede.

  13. Se o seu Arduino continua atrasando, tente estes truques para corrigi-los

  14. Desative o firewall do Windows
  15. vá para as configurações avançadas de firewall e permita a porta de entrada / saída 23
  16. porta encaminhe seu roteador para seu computador com porta 23
  17. Se você for sem fio, conecte o arduino diretamente no roteador e seu computador ao mesmo
  18. Compre um adaptador de energia AC-DC mais resistente

  19. Caso contrário, talvez você tenha inserido seu endereço IP ou endereço de conexão errado

  20. Ou então contacte-me em [email protected] se houver algum problema
  21. VOCÊ É BOM DE IR !!!

Lembre-se de que não existe nenhum código para o sistema de fechadura, porque eu não tenho um, isso significa que você terá que adicionar algum código se quiser usar isso não apenas como um sistema de rastreamento, mas como um sistema de rastreamento de fechadura.




Por favor leia abaixo:

Código

  • O código do Arduino
  • Exemplo de código de servidor
O código do Arduino C / C ++
Este é o software que vai no arduino quase pronto para funcionar, então o que você faz é apenas ajustar o gateway, ip, gateway, endereço mac e dns
 / * * ------------ ---------------------- * MFRC522 Arduino * Reader / PCD Nano v3 * Pin de sinal * -------------- -------------------- * RST / Reiniciar RST D9 * SPI SS NSS D10 * SPI MOSI MOSI D11 * SPI MISO MISO D12 * SPI SCK SCK D13 * /// A PRIMEIRA BIBLIOTECA QUE PRECISA SER INSTALADA É UIP ETHERNET SEGUNDO É MFRC522 AMBOS ESTÃO NO GITHUB # include  #include  // Para a seleção da chave # inclua  // O Biblioteca de chaves RFID # define RST_PIN 9 // Configurável, consulte o layout de pino típico acima - Isso é para o Arduino Nano - Para RFID # define SS_PIN 8 // ESTAMOS USANDO 8 PARA RFID PORQUE O MÓDULO ETHERNET USA setor de 10 bytes =0; byte blockAddr =0; //////// Acessar determinado setor / blocos no cartão, bloco de reboque é o último bloco byte trailerBlock =1; int vermelho =3; int azul =4; // Pinos para RGB LEDint green =5; cliente EthernetClient; // ETHERNET INSTANCEMFRC522 mfrc522 (SS_PIN, RST_PIN); // Cria instância MFRC522.MFRC522 ::MIFARE_Key key; // Define o tempo limite longo das instâncias de chave; // TEMPO LIMITE PARA QUE NÃO SE SENTE LÁ FOREVERvoid setup () {// IU BEGIN pinMode (red, OUTPUT); pinMode (azul, SAÍDA); // Inicia o pinMode do LED RGB (verde, OUTPUT); Redefinir(); // Comece com leds desligados Serial.begin (9600); // Inicia a conexão do computador com uma taxa de 9600 bits por segundo // UI END // ETHERNET MODULE INITIAL SPI.begin (); // Barramento SPI inicial uint8_t mac [6] ={0x00,0x01,0x02,0x03,0x04,0x05}; // MAC =000102030405 IPAddress mip (192,168,1,160); // IP =192.168.1.160 IPAddress mdns (8,8,8,8); // DNS =8.8.8.8 IPAddress mgate (192,168,1,5); // GATEWAY =192.168.1.5 IPAddress msubnet (255,255,255,0); // SUBNET =255.255.255.0 Ethernet.begin (mac, mip, mdns, mgate, msubnet); // CONECTE USANDO ACIMA Serial.println ("Conexão com sucesso"); // FIM DA ETHERNET para (int t =255; t> 0; t--) {analogWrite (red, t); //// Mais de show mas deixe pelo menos um segundo entre o SPI da ethernet e o atraso RFID (10); } // RFID INITIAL mfrc522.PCD_Init (); // Cartão inicial MFRC522 para (byte i =0; i <6; i ++) {// Prepare a chave (usada como chave A e como chave B) key.keyByte [i] =0xFF; // usando FFFFFFFFFFFFh que é o padrão na entrega do chip de fábrica} Serial.println (F ("Scan a Card")); dump_byte_array (key.keyByte, MFRC522 ::MF_KEY_SIZE); // Obtém o tempo limite do tamanho do byte da chave =0; atraso (2000); Reset ();} // END RFID INITIALvoid loop () // Executar para sempre {// Procure por novos cartões if (! Mfrc522.PICC_IsNewCardPresent ()) {digitalWrite (blue, LOW); Retorna; } // Selecione um dos cartões if (! Mfrc522.PICC_ReadCardSerial ()) return; digitalWrite (azul, ALTO); // Mostra ao usuário que o cartão foi lido pelo byte piccType =mfrc522.PICC_GetType (mfrc522.uid.sak); // Verifique a compatibilidade com o cartão Mifare if (piccType! =MFRC522 ::PICC_TYPE_MIFARE_MINI &&piccType! =MFRC522 ::PICC_TYPE_MIFARE_1K &&piccType! =MFRC522 ::PICC_TYPE_MIFARE_4K) {Error (); Retorna; } status do byte; buffer de bytes [18]; tamanho do byte =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 () falhou:")); Serial.println (mfrc522.GetStatusCodeName (status)); Erro(); Retorna; } // Lê os dados do bloco status =mfrc522.MIFARE_Read (blockAddr, buffer, &size); if (status! =MFRC522 ::STATUS_OK) {Serial.print (F ("MIFARE_Read () falhou:")); Serial.println (mfrc522.GetStatusCodeName (status)); Erro(); } // Parar PICC mfrc522.PICC_HaltA (); // Pare a criptografia no PCD mfrc522.PCD_StopCrypto1 (); // APÓS A LEITURA, ENVIAR AO SERVIDOR if (client.connect (IPAddress (192,168,1,100), 23)) {timeout =millis () + 1000; Serial.println ("Cliente conectado"); const String ID =dump_byte_array (buffer, tamanho); client.println (ID); Serial.println ("enviado:" + ID); atraso (10); while (client.available () ==0) {if (timeout - millis () <0) goto close; } tamanho interno; while ((size =client.available ())> 0) {uint8_t * msg =(uint8_t *) malloc (size); size =client.read (msg, size); Serial.write (msg, tamanho); if (size ==sizeof ("g") - 1) {Pass (); } else {Error (); } grátis (msg); } close:client.stop (); } else {Serial.println ("Não foi possível conectar ao servidor"); Erro(); } // FIM DE ENVIAR AO SERVIDOR Reset (); // REINICIE O LOOP SEM LEDS LIGADOS} // TRANSFORME A ARRAY DE BUFFER EM UMA ÚNICA STRING QUE É MAIÚSCULA QUE É IGUAL A NOSSO ID DO SETOR E BLOCKString dump_byte_array (byte * buffer, byte bufferSize) {String out =""; para (byte i =0; i  
Exemplo de código de servidor Python
Aqui está um exemplo completo de como usar o servidor
 import SocketServerclass MyTCPHandler (SocketServer.BaseRequestHandler):def handle (self):# self.request é o soquete TCP conectado ao cliente self.data =self.request.recv (1024) .strip () print "{} escreveu:". Format (self.client_address [0]) print self.data "" "SQL STUFF AQUI if (self.data ==SQL NAME ou algo assim) {self.request .sendall ("g") // enviar bom // INSERIR HORA E LOCALIZAÇÃO NO SQL AQUI {else {self.request.sendall ("bb") // enviar ruim // NÃO FAÇA NADA apenas envie para o arduino dados inválidos} "" "self.request.sendall (" g ") if __name__ ==" __main__ ":HOST, PORT =" ", 23 server =SocketServer.TCPServer ((HOST, PORT), MyTCPHandler) server.serve_forever () 
Código atualizado no GitHub
Aqui você pode obter o código mais atualizadohttps://github.com/smerkousdavid/InternetRFIDTags

Esquemas

O circuito é simples, então acabei de tirar uma foto com a fiação

Processo de manufatura

  1. Cartão de felicitações
  2. Cartão de crédito
  3. Bloqueio Arduino RFID com RC522 - Protocolo MIFARE 13,56 MHz
  4. Tutorial de bloqueio RFID do Arduino
  5. Sistema de atendimento usando Arduino e RFID com Python
  6. Arduino Spybot
  7. FlickMote
  8. TV B-Gone caseiro
  9. Relógio mestre
  10. Leitor de disquete Arduino Amiga (V1)