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.
Tags:
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.
https://www.youtube.com/watch?v=xlo-8pef87Y&feature=youtu.be
Postarei em breve mais imagens.
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! :)
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por