Exemplo de Módulo Leitor Rfid Mfrc522 Mifare com Módulo Cartão SD Card (usando cartão SD como banco de dados)

Depois de algum tempo na frente de meu computador buscando uma solução viável para a implantação de um banco de dados de grande capacidade para Arduíno, criei um código que faz o que eu queria.

Fiz pesquisas na internet procurando encontrar uma luz para este problema mas nada encontrei, ai tive que por a mão na massa.

Funcionamento:

O usuário aproxima o cartão do leitor RFID, a tag lida do cartão é comparado com as tags cadastradas no cartão SD, e retorna informando se o cartão esta cadastrado ou não.

Caso o cartão esteja cadastrado ele também informa o nome do usuário que esta ligado a aquele cartão.

Decidi divulgar pois tudo que aprendi em Arduíno foi através de tutoriais da internet.

Obs. O código pode e deve ser melhorado, não fiz comentários nas linhas por falta de tempo e paciência!

\\------------------------------------------------------------------------------------------------------------#include /font>SD.h>
File myFile;
#include /font>SPI.h>
#include /font>MFRC522.h>
MFRC522 mfrc522(10, 9);
int x = 0;
byte sel = 0;
byte c1 = 0;
byte c2 = 0;
byte c3 = 0;
String status = "";
String cconteudo = "";
String usuario = "";
String nome = "";
char caractere;
char carac;

void setup() {
Serial.begin(9600);
SPI.begin();
if (SD.begin(4)) {
myFile = SD.open("rfid.txt");
if (myFile) {
while (myFile.available()) {
for (x; myFile.read() == 13; x++) {
delay(10);
}
}
}
else {
Serial.println("Falha ao abrir banco de dados");
}
Serial.print(x);
Serial.println(" usuarios cadastrados: ");
myFile.close();
!SD.begin(4);
}
}


void loop() {
mfrc522.PCD_Init();
while (sel == 0) {
Serial.println("Aproxime o seu cartao do leitor...");
cconteudo = "";
while ( ! mfrc522.PICC_IsNewCardPresent()) {
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
for (byte i = 0; i /font> mfrc522.uid.size; i++) {
cconteudo.concat(String(mfrc522.uid.uidByte[i] /font> 0x10 ? " 0" : " "));
cconteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
cconteudo.toUpperCase();
cconteudo.trim();
mfrc522.PICC_HaltA();

myFile = SD.open("rfid.txt");
if (myFile) {
while (myFile.available() && (c2 == 0)) {
caractere = 0;
while (myFile.available() && (caractere != ';') && (caractere != 13) && (c1 == 0)) {
caractere = myFile.read();
if ((caractere != ';') && (caractere != 13)) {
usuario.concat(caractere);
}
}
usuario.trim();
if ((cconteudo == usuario ) && (c1 == 0) ) {
status = "Usuario encontrado";
Serial.println(status);
c1 = 1;
c3 = 1;
}
else {
usuario = "";
status = "Usuario nao encontrado ";
}
if (c3 == 1) {
carac = 0;
while (myFile.available() && (carac != 13) && (c3 == 1)) {
carac = myFile.read();
if ((carac != 13) && (carac != ';')) {
nome.concat(carac);
}
delay(10);
}
nome.trim();
if (c3 == 1) {
c3 = 0;
c2 = 1;
sel = 1;
}
}

}

}
else {
Serial.println("Falha ao abrir banco de dados");
}
if (status != "Usuario encontrado") {
Serial.println(status);
}

}
myFile.close();
Serial.print("Bem vindo ");
Serial.println(nome);
delay(2000);

}

\\-------------------------------------------------------------------------------------------------------------------------------------------- -

Arquivo rfid.txt contido no cartão de memoria (primeiro vai as tag dos cartões e após o nome do usuário do cartão.

11 22 33 44;nome1
22 22 33 44;nome2
31 11 22 33;nome3
22 33 54 22;nome4
12 22 33 33;nome5
32 44 12 99;nome6
32 68 11 12;nome7
88 99 11 74;nome8
51 88 99 33;nome9
33 F2 0D 01 ;Daniel Baltazar Schneider
12 P2 00 33;nome11
12 33 55 I7;nome12
88 99 33 55;nome13

\\----------------------------------------------------------------------------------------------------------------------------------------------

Alguma duvida ou sugestão? comente.

Exibições: 7737

Responder esta

Respostas a este tópico

Boa tarde,

gostaria de saber se você poderia divulgar o esquema com as ligações?

Estava tentando fazer algo parecido.

Porém tive a dificuldade ao ver que utilizaria as mesmas portas para o leitor e para o SD. 

Fico no aguardo.

Desde já agradeço. :)

Ola...

Tanto o RFID como o cartão SD usam a comunicação SPI. O que muda é o pino ss.

Veja esse link que explica esse tipo de comunição.

http://labdegaragem.com/profiles/blogs/tutorial-comunica-o-spi-seri...

Vou fazer um esquema usando o fritzing e postar aqui

eu segui o que esta no tutorial mas não roda, só se fizer um de cada vez ok 

quais pinos vc usou para o sd e para rfid no seu prog

Bom Dia Srs.

Primeiramente parabéns por este post , que para min foi um salva vidas.

Vc poderia me dar uma dica de como ligar o rfid e o sdcar juntos, no Arduíno Uno.

Muito obrigado.

Alexandre nunes

Tudo bem Alexandre?
Fiz outra postagem a respeito do assunto, veja no link.
Se tiver mais dúvidas ficarei feliz em ajudar.
Abraço.
http://labdegaragem.com/profiles/blogs/elabora-o-de-banco-de-dados-...

Muito Obrigado Daniel. 

Montei conforme seu esquema , mas da erro ao abrir arquivo.

Tem alguma ideia ?

Valeu

O meu sdcard e um LC 

se eu colocar do seu jeito não le o cartão , eu fiz um teste só com cartão tb não leu , remontei e coloquei o cartão nos pinos que estava o rfid e funcionou com um prog de teste.

Faz assim:
ICSP
1 2
3 4
5 6
Essa é a pinagem:
Coloca como 1 o 12, como 3 o 13, como 4 o 11. (Onde antes era no Arduíno)
E no cartão liga o 1 ao MISO, 2 ao SCK e o 3 ao MOSI.
Só funcionou para o SD card. O mini não deu certo.
Ah é mesmo, e o CS liga direto no pino 4 do arduino.
Liga no 5V e GND e sucesso amigo! :)

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço