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: 7734

Responder esta

Respostas a este tópico

Daniel muito obrigado pelo post, como ja mencionei no outro post vc me ajudou muito.

So para esclarecer ...

Devemos prestar atenção no tipo de modulo SD que estamos usando pois se tiver usando um modulo igual ao da imagem abaixo, você vai ter muito problema de nivel logico na comunicação, no meu caso com este modelo não consegui de jeito maneira fazer funcionar com o leitor RFID porque este modelo é 5v e o SD é 3,3v e isso da pau na comunicação.

Então se você ta querendo usar modulo SD + RFID (RC522) você deve usar o modulo abaixo em tensão de 3,3v.

CASO alguém consiga usar o modulo SD da primeira imagem com o leitor RFID por favor vamos compartilhar o esquema e fotos ok

Abraço

Opa, nem tinha me dado conta dessas diferenças entre os módulos.

Vou testar esse modulo micro SD para ver no que da.

No dia em que montei o esquema no fritzing não encontrei o modulo SD (grande) na biblioteca, ai usei o micro SD para representar as ligações.

Obrigado pelas informações.

Você coloca alguma fonte de alimentação extra?

Pois no 3.3V eu não consigo deixar o RFID e SD estáveis.

Ai acabei por ligar o RFID no 3.3V e o SD no 5V.

Mas as vezes da umas palas loucas... e nomeia os arquivos gerados, em chines (acho que é chines hsahsaha) Será que o cartão ching ling que ta dando pala? Ou será que é alguma interferência entre os módulos?

boa noite.

Usa esta pinagem que roda de boas .eu estou rodando um programa que lê um arquivo salvo em um cartão sdcard para validar o cartão que passo no rfid sem problemas, se quiser o prog me fala que te mando . ok

Olá Alexandre Leite, bom dia.

Você poderia me passar o programa, somente para que eu veja como fez as chamadas? Das funções? Estou com problemas ao rodar meu código. As vezes roda legal, outras o txt sai bugado.. com uns caracteres estranhos.

Alexandre L. O módulo SD é micro ou o maior com duas tensão (3v e 5v)?

Boa Noite.

Tem 5V e 3V mas só conectei 5V

Boa noite
Uuuhhh já encomendei o meu módulo deste pq o outro para micro SD nem com reza brava, nem matando galinha preta ele funciona junto com o leitor RFID. Se poder disponibilizar o esquema elétrico ou postar foto do ckt eu agradeço

Estou com o mesmo problema que você. Tenho o RFID funcionando com 3.3V e o micro SD funcionando com 5V e não estou conseguindo fazer funcionar os dois juntos. 

Quando eu alimento o micro SD, o RFID para de fazer a leitura no cartão! :(

Vou ter que comprar um modulo SD que funcione com 3.3V também pelo jeito.

Use um conversor de tensão nas portas do módulo RFID . 

http://labdegaragem.com/forum/topics/leitor-rfid-rc522-sem-bibliote...

Daniel boa tarde! Estou tentando fazer um projeto um pouco semelhante, porém, devido à quantidade de linhas, o UNO ficou limitado. Então precisei partir para o mega 2560.

O problema é que quando adiciono o leitor, o cartão não funciona. Os pinos do arduino mega são diferentes (50,51,52,53,4)

Poderia passar um exemplo dos pinos utilizados para que funcione o leitor mifare com o sd card?

Valeuuuu !

Caro amigo, os dois modulos devem estares ligados nos mesmos pinos:
-- MISO (Master IN Slave OUT) - Dados do Slave para Master;
-- MOSI (Master OUT Slave IN) - Dados do Master para Slave;
-- SCK (Serial Clock) - Clock de sincronização para transmissão de dados entre o Master e Slave;
Somente o pino de cs deve ser diferente, um para cada módulo:
-- SS (Slave Select) - Seleciona qual Slave receberá os dados.
Fique atento ao tipo de módulo SD que usa, há relatos que com módulo microSd não funcione.
Qualquer coisa me mande um whats 45 99943 1333
Vou estar trabalhando mas quando disponível respondo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço