Como usar o Data logger shield com módulo RFID
Neste post vamos montar um sistema de coleta e armazenamento de dados, ou data logger, para gravar informações em um cartão SD usando o Data logger shield Arduino com o módulo RFID PN532, que já vimos anteriormente aqui no blog.
Com o datalogger, você pode gravar também outras informações como por exemplo temperatura, umidade, pressão e outros dados de sensores, gravando isso em um cartão SD e posteriormente alimentando uma planilha ou um banco de dados.
O Data Logger Shield
O Data Logger Shield é uma placa relativamente simples, com um slot para cartão SD, um botão de reset, leds indicadores e um suporte para bateria. Conta também com uma conveniente área de prototipagem para você montar o seu circuito diretamente no shield:
A bateria serve para alimentar o CI DS1307, que é um RTC (Real Time Clock ou Relógio de Tempo Real). Esse relógio incorporado na placa facilita a tarefa de armazenar no cartão SD a hora exata em que um evento ocorreu, sem depender de um hardware externo para isso.
Para utilizar o módulo, simplemente encaixe-o no Arduino conforme a imagem acima.
Data logger shield com módulo RFID
O nosso circuito de testes usa o data logger shield com um módulo RFID NFC PN532, comunicando-se com um Arduino Uno através da interface I2C nos pinos analógicos A4 (SDA) e A5 (SCL).
Siga o esquema de ligação abaixo, lembrando que se preferir você pode soldar o módulo RFID na área de prototipagem do data logger shield. Isso vai deixar o circuito muito mais compacto:
Fizemos a conexão do PN532 diretamente nos pinos do Arduino, mas talvez seja necessário usar resistores pull up nesse barramento se você estiver enfrentando problemas de comunicação entre o RFID e a placa.
Programa coleta de dados RFID
Antes de carregar o programa, faça o download da biblioteca do PN532 neste link. Essa biblioteca foi alterada para uso com a conexão I2C, e é diferente daquela utilizada no post Comunicação sem fio com módulo PN532 NFC RFID onde utilizamos a interface serial (HSU).
Faça também o download da biblioteca RTClib, que vai fornecer as informações de data e hora para o data logger.
Entre as linhas 40 e 45 do código você encontra as instruções para acertar a hora do RTC. Isso pode ser feito de forma manual, ou com a data e hora em que foi feita a compilação do programa.
O programa cria no cartão SD um arquivo chamado LOG.TXT, e armazena nesse arquivo a data, a hora e a identificação do cartão (UID):
//Programa: Data logger com modulo RFID PN532 //Autor: Arduino e Cia #include "nfc.h" #include "RTClib.h" #include <SPI.h> #include <SD.h> //Pino CS do cartao SD int Pino_CS = 10; RTC_DS1307 rtc; NFC_Module nfc; File file; void setup() { Serial.begin(115200); Serial.println("Data logger com modulo PN532"); Serial.println(); //Inicia o cartao SD Serial.println("Iniciando cartao SD..."); if (!SD.begin(Pino_CS)) { Serial.println("Falha na inicializacao do SD!"); return; } Serial.println("Cartao SD iniciado. OK"); Serial.println(); //Verifica as condicoes do RTC if (! rtc.begin()) { Serial.println("RTC nao encontrado!"); while (1); } if (! rtc.isrunning()) { Serial.println("RTC nao operante!"); //A linha abaixo ajusta o RTC com a data e hora do momento da compilacao //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //A linha abaixo permite ajustar manualmente a data e hora do RTC //Formato: DateTime(ano, mes, dia, hora, minuto, segundo) //rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); } //Inicia modulo PN532 nfc.begin(); uint32_t versiondata = nfc.get_version(); if (! versiondata) { Serial.print("Modulo PN53x nao encontrado!"); while (1); //Para o programa } //Mostra informacoes do modulo PN532 Serial.print("Encontrado modulo PN5"); Serial.print((versiondata >> 24) & 0xFF, HEX); Serial.print(" Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC); Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC); nfc.SAMConfiguration(); Serial.println("Aguardando leitura..."); } void loop(void) { String uid_string = ""; //Verifica a presenca de um cartao RFID u8 buf[32], sta; sta = nfc.InListPassiveTarget(buf); //Cartao detectado, verifica as informacoes e //mostra no Serial Monitor if (sta && buf[0] == 4) { Serial.print("Tamanho UID:"); Serial.println(buf[0], DEC); for (int i = 1; i <= 4; i++) { uid_string.concat(String(buf[i] < 10 ? "0" : "")); uid_string.concat(String(buf[i], HEX)); uid_string.concat(" "); } uid_string.toUpperCase(); Serial.print("UID cartao: "); Serial.println(uid_string.substring(0)); Serial.println("Gravando dados no SD..."); grava_cartao_SD(uid_string); delay(2000); Serial.println(); Serial.println("Aguardando nova leitura..."); } } void grava_cartao_SD(String uid_card) { //Abre arquivo no SD para gravacao file = SD.open("log.txt", FILE_WRITE); //Le as informacoes de data e hora DateTime now = rtc.now(); //Grava os dados no cartao SD file.print("Data/hora: "); Serial.print(now.day() < 10 ? "0" : ""); file.print(now.day(), DEC); file.print('/'); file.print(now.month() < 10 ? "0" : ""); file.print(now.month(), DEC); file.print('/'); file.print(now.year(), DEC); file.print(' '); file.print(now.hour() < 10 ? "0" : ""); file.print(now.hour(), DEC); file.print(':'); file.print(now.minute() < 10 ? "0" : ""); file.print(now.minute(), DEC); file.print(':'); file.print(now.second() < 10 ? "0" : ""); file.print(now.second(), DEC); file.print(' '); file.print("- UID Cartao: "); file.println(uid_card); //Fecha arquivo file.close(); }
Para testar, aproxime uma tag do leitor RFID. Serão mostradas no serial monitor as informações de hardware do módulo e também a UID da tag:
Após passar a tag algumas vezes, retire o cartão SD do slot e abra o arquivo LOG.TXT no computador:
O arquivo armazena as informações de data e hora em que o cartão foi colocado sobre o leitor. Você pode posteriormente incluir outras informações como nome do usuário, dados de outros sensores, informações de local, etc.
Quer importar as informações armazenadas no cartão SD em uma planilha e realizar cálculos, gerar gráficos e outras funções? Confira o post Importando os Dados do Data Logger em uma planilha, aqui mesmo no Arduino e Cia!
Ola bom dia.
com esse data logger eu consigo receber informações de corrente e tensão na saida de uma mquina de solda?
Oi Rafael,
Consegue sim. Você terá que instalar os sensores adequados para que eles se comuniquem com o microcontrolador.
Abraço!
Adilson
Boa noite,
Consigo fazer a ligação desse data logge com o modulo RC522 também?
Oi Rafael,
Creio que consiga sim, sem problemas. Eu usei o PN532 por causa da interface I2C, o circuito ficou mais simplificado, mas usar o RC522 também é uma boa opção.
Abraço!
Adilson
Olá, boa noite! Sou novo nesse mundo da programação para Arduíno, bom, preciso exatamente desse projeto, porém ao invés de mostra o código das tags, eu quero que apareça o nome do usuário cadastrado.
Oi Rogério,
Você pode associar uma string à uma TAG, não é muito complicado. Se precisar de ajudar ou desenvolver esse projeto, entre em contato utilizando o formulário no lado direito da página.
Abraço!
Adilson
Olá, Boa tarde.
Estou precisando fazer isso também e não entendendo muito dos códigos, teria como me ajudar?
Olá, boa tarde…
Qual a máxima taxa de amostragem que é possível com esse datalogger?
Preciso de algo em torno de 1000 HZ (1khz)
boa noite sera que consigo enviar dados do arquivo LOG.TXT para o tag?
Oi Ericka,
É possível sim, mas vc teria que usar um outro módulo RFID, o MFRC522, que faz tanto a leitura como a gravação de tags. Procure por RFID aqui no blog e você encontrará posts sobre o MFRC522.
Abraço!
Adilson
Bom dia, teria como postar um tutorial onde eu consiga ler as informações gravadas no cartão via rede wireless. Desde já agrdeço!
Boa sugestão. Anotada! 🙂
Abraço!
Adilson
olá,
boa noite!
O RTC não mantém o horário correto mesmo com bateria nova!!!
Alguém já teve este tipo de comportamento neste shield?
Abç,
José Roberto
sim, tive o mesmo problema
ele mantem um horário com 2 horas e meia a frente de programado, ainda não sei o porque, mas estou reprogramando com essa defasagem para corrigir
Gostaria de saber como usar o CD (Card Detect). Precisa de resistor? Qual? Obrigado.
olá como posso fazer um datalogger de um acionamento de botão?
Bom dia,
Dê uma olhada neste post, por favor:
https://www.arduinoecia.com.br/2014/11/gravando-dados-arduino-cartao-sd.html
Abraço!
Adilson
Bom dia, como posso fazer com que mostre um registro ou informação armazenada no rótulo
Olá, boa noite!
Existe algum software que associe estes dados coletados das etiquetas a um banco de dados ?
Bom dia
montei um sistema de acesso com esses modulos e me deparei com dois problemas
em um o horário fica adiantado em 3 horas no outro fica atrasado em 6 dias.
Mesmo tentando fazer a compensação no ajuste manual, o erro de data e horario continuam… sabem algum motivo pra isso, e como resolver?
Outro problema é que as vezes o sistema para de ler as TAGs e o reset não resolve. As vezes desconectando o NFC volta as vezes só desligando tudo, não faço nem ideia do que possa ser
Boa noite,
O DS1307 é relativamente instável, mas pelo que você está relatando, a diferença é bem grande… Pode ser um defeito no shield mesmo, mas só testando pra ter certeza.
Pode ser algum problema de alimentação do circuito? Você está alimentando o Arduino pela porta USB do computador?
Abraço!
Adilson
Bom Dia!!
Estava com o mesmo problema.
Retirei a pilha da placa e coloquei ela novamente, adicionei a data na linha 44 e ficou perfeito.
Olá, para usar esse shield no arduino mega 2560 tem alguma configuração específica?
Obrigado…
Boa noite…
tentei usar o shield data logger com o arduino mega 2560 e não obtive sucesso…
existe alguma configuração específica?
Bom dia. Tenho exatamente esse shield, utilizei esse mesmo sketch, mas não consigo gravar nada no cartão SD. Na verdade não consigo nem inicializar o cartão SD. Alguma ajuda?
Obrigado.
Oi Bruno,
Desculpe a demora. Conseguiu?
Abraço!
Adilson
Tenho um cartao sd sandisk 32G, nao quer funcionar de jeito nenhum, poderia me dar alguma dica?
Oi Henrique,
Tenho dúvidas se ele vai funcionar com cartões dessa capacidade.. vc tentou outros cartões?
Abraço!
Adilson
Bom dia, Adilson.
Estou com dois datalogger desse tipo e uma pilha de cartões sd de marcas e tamanhos diferentes. Todos formatados para FAT32. Nenhum deles funciona. Recomendo que indiquem um fabricante/modelo específico de sd card que opere com certeza nesse tipo de equipamento.
Até o momento não encontrei nenhum.
Abraços,
Lúcio
Oi Lucio!
Alguns módulos costumam ser instáveis. Eu aqui não tive problemas com SD da marcar "xingling" ou Sandisk, por exemplo. Também pode ser um problema no próprio aparelho leitor de SD.
Abraço!
Adilson
Olá, não consigo iniciar o SD Card, dá sempre a seguinte mensagem: "Falha na inicializacao do SD!"
Sabe o que devo verificar?
ola o link de download do driver livraria do nfc caiu, onde consigo?
Bom dia,
Link para a biblioteca atualizado. 🙂
Abraço!
Adilson
Olá, bom dia!
Estou fazendo um trabalho e usei seu site e preciso citar autor.
Qual seu nome e sobrenome?
att
Boa noite,
Adilson Thomsen 🙂
Abraço!
Adilson
Cara, to utilizando a lib pra e mandando uma mensagem NDEF de um app em Android.Suponha que eu tenha enviado uma mensagem "1234".
Como eu pego ela utilizando a lib?Em qual bloco ela estaria?
Boa tarde,
é possível utilizar um sensor de gas ao invés do rfid?
Bom dia João,
Com algumas adaptações no código, funciona perfeitamente.
Abraço!
Adilson
Olá como ficaria o cód se eu utilizase um modulo rc522, para o controle de acesso.
obrigado
Oi José,
Por favor dê uma olhada neste post, creio que tem o que você precisa: https://www.arduinoecia.com.br/controle-de-acesso-modulo-rfid-rc522/
Abraço!
Adilson
Boa noite
Gostaria de saber como utilizo a area de prototipagem
Oi Bea!
Já usou uma PCB perfurada? É o mesmo conceito. Você monta o circuito soldando os componentes e fazendo trilhas com solda, por exemplo.
Abraço!
Adilson
Posso utilizar o Data logger shield Arduino com o Arduino Mega 2560 ?
Grato.
Oi Luiz,
Não testei nessa configuração, mas pela característica do shield funciona sem problemas.
Abraço!
Adilson
PARABÉNS o código está muito bem feito, tenho estes mesmos componentes como posso neste código destingir os ID para controlo de acesso?
Oi Marco,
Obrigado. Tente fazer uma comparação da variável uid_card. Ela tem as informações do cartão.
Abraço!
Adilson
Como posso destinguir os ID neste código?
Meu módulo Shield não retorna a data atual. Já utilizei o sketch das duas formas mas não consegui atualizar a data. Aparece dados do ano de 2018. Saberia me dizer o que está acontecendo??? Como poderia corrigir este erro??
Oi Claudia,
É só o ano que aparece errado?
Abraço!
Adilson
Oi,
//Pino CS do cartao SD
int Pino_CS = 10;
Gostaria de saber se posso utilizar outro pino que não seja o pino 10. pois pretendo utilizar o Ethernet Shield e esse shield já faz uso desse pino. Alguma solução?
Oi Flavio,
Tem uma solução que eu não consigo testar agora, mas talvez funcione. Dê uma olhada neste artigo aqui, por favor: https://www.arduino.cc/en/Reference/SDCardNotes
Abraço!
Adilson
Pessoal, alguém tem o arquivo fritzing do modulo PN532 pra disponibilizar o link para download. agradeço!