Arduino leonardo + RFID introdução
Arduino leonardo + RFID escrevendo no cartão
Agora alem de fazer a leitura do cartão vamos tomar uma ação se os dados estiverem de acordo. Vamos bloquear um computador/desbloquear usando apenas o cartão de RFID.
Vamos ao que interessa, para bloquear um computador com windows executamos o seguinte comando no teclado WINDOWS+L, para desbloquear entramos com a senha e apertamos ENTER. O Arduin leonardo vai executar essas ações automaticamente, isso vai depender da leitura que ele fizer no cartão de RFID, se o cartão, que foi gravado anteriormente, tiver as informações corretas o Arduino toma a ação.
Esse é o escopo do programa, vai bloquear/desbloquear Windows 8:
- #include <PN532.h>
- #define SCK 13
- #define MOSI 11
- #define SS 10
- #define MISO 12
- int log_on_out;
- PN532 nfc(SCK, MISO, MOSI, SS);
- void setup(void)
- {
- Serial.begin(9600);
- Serial.println("Ola!");
- Keyboard.begin();
- nfc.begin();
- uint32_t versiondata = nfc.getFirmwareVersion();
- if (! versiondata)
- {
- Serial.print("Nao encontrou placa PN53x");
- while (1); // halt
- }
- // Recebeu dados, hora de imprimir!
- Serial.print("Chip PN5 encontrado"); Serial.println((versiondata>>24) & 0xFF, HEX);
- Serial.print("Versao do Firmware: "); Serial.print((versiondata>>16) & 0xFF, DEC);
- Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
- Serial.print("Suporta "); Serial.println(versiondata & 0xFF, HEX);
- // configura placa para ler RFID
- nfc.SAMConfig();
- }
- void loop(void)
- {
- uint32_t id;
- // procura por cartoes
- id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
- if (id != 0)
- {
- Serial.print("Read card #");
- Serial.println(id);
- // testa cartao
- if(id==126074446)
- {
- Serial.println("Cartao certo!");
- }
- else
- Serial.println("Cartao errado!");
- uint8_t keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
- if(nfc.authenticateBlock(1, id ,0x08,KEY_A,keys)) //autentica bloco 8 0x08
- {
- //se autenticou com sucesso
- uint8_t block[16];
- //faz leitura do bloco 0x08
- if(nfc.readMemoryBlock(1,0x08,block))
- {
- //se operacao de leitura teve sucesso
- for(uint8_t i=0;i<16;i++)
- {
- //imprime bloco de memoria
- Serial.print(block[i],HEX);
- Serial.print(" ");
- }
- // testa codigo bloco 0x08
- if(block[0]==0 && block[1]==1 && block[2]==2 && block[3]==3)
- {
- Serial.println("Senha do bloco correta!");
- log_on_out = !log_on_out;
- if(log_on_out==1)
- {
- // se for bloquear
- // CTRL-ALT-DEL:
- Keyboard.press(KEY_LEFT_CTRL);
- Keyboard.press(KEY_LEFT_ALT);
- Keyboard.press(KEY_DELETE);
- delay(100);
- Keyboard.releaseAll();
- //ALT-s:
- delay(2000);
- Keyboard.press(KEY_LEFT_ALT);
- Keyboard.press('l');
- Keyboard.releaseAll();
- // Enter to confirm logout:
- Keyboard.write(KEY_RETURN);
- }
- else if(log_on_out==0)
- {
- // se for desbloquear
- Keyboard.press(KEY_BACKSPACE);
- delay(1000);
- Keyboard.print("1110");// sua senha do windows
- }
- }
- else
- Serial.println("Senha do bloco errada!");
- Serial.println();
- }
- }
- }
- delay(500);
- }
Leitura feita:
Found 1 tags
Sens Response: 0x4
Sel Response: 0x8
0x7 0x83 0xBE 0x4ERead card #126074446
Cartao certo!
0 1 2 3 4 5 6 7 8 9 A B C D E F Senha do bloco correta!
Um vídeo para exemplificar o funcionamento:
Alterando o programa para funcionar no Windows 7, altere as linhas 68-104:
if(block[0]==0 && block[1]==1 && block[2]==2 && block[3]==3)
{
Serial.println("Senha do bloco correta!");
log_on_out = !log_on_out;
if(log_on_out==1)
{
// se for bloquear
// CTRL-ALT-DEL:
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_DELETE);
delay(100);
Keyboard.releaseAll();
//ALT-s:
delay(2000);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('l');
Keyboard.releaseAll();
// Enter to confirm logout:
Keyboard.write(KEY_RETURN);
}
else if(log_on_out==0)
{
// se for desbloquear
Keyboard.press(KEY_BACKSPACE);
delay(1000);
Keyboard.print("vr");// sua senha do windows
Keyboard.write(KEY_RETURN);
}
}
else
Serial.println("Senha do bloco errada!");
Serial.println();
Nenhum comentário:
Postar um comentário