Data logger shield com Arduino • Do bit Ao Byte
Djames Suhanko 10 de agosto de 2017 4 min read
Data logger ou 'registrador de dados' é um periférico que, no caso do Arduino, é utilizado para armazenar dados de transações ou parâmetros de configuração. Dá pra utilizar a EEPROM interna ou uma externa para tal, mas a manipulação desses dados não é tão simples quanto utilizar um data logger shield, onde os dados serão armazenados em um cartão SD.
Características do data logger shield
Não há grandes complexibilidades no hardware em sí. Basicamente, ele possui uma área de prototipagem, botão de reset, slot para o cartão SD e o mais legal; um RTC DS1307 (veja esse artigo a respeito). RTC é o acrônimo de "Real Time Clock", caso você não saiba. E é fundamental para o armazenamento de logs, uma vez que o tempo é a chave primária de eventos. Por fim, não poderia faltar o slot para a bateria do RTC, afinal, o data logger precisa ter a habilidade de gerencia corretamente esse tempo e não é nada interessante tomar uma base de tempo externa no momento em que a alimentação do Arduino for retomada.
Onde comprar seu data logger shield
Essa bela ferramenta de log para seu projeto você encontra na AutoCore Robótica. Clique e confira.
Configurando o data logger shield
A configuração tem duas etapas; o RTC e o data logger em sí. Nesse caso, precisaremos de duas bibliotecas, cada qual para seu respectivo periférico.
Configurar o RTC do data logger shield
Para configurar o RTC, será necessário instalar a biblioteca RTClib da Adafruit (tem pelo menos mais uma, mas vamos utilizar essa). Para isso, acesse o menu sketch > Include library > Manage libraries e procure por RTClib. A utilizada nesse artigo é essa:
RTClib | data logger shield
Nos sketches de exemplovocê encontrará tudo o que precisa para dominar esse RTC. Alguma linhas de código da configuração referente ao RTC foram tiradas de lá.
Configurar o SD
Esse também, nenhum segredo. No menu de exemplos tem diversos exemplos de sua utilização, por isso, não tem o que inventar, sua utilização é simples e sua configuração é rápida!
Código para o data logger shield
Vou comentar no código e em seguida faço minhas observações.
byte cs_pin    = 10;
int timeout    = 0;
//No sketch de exemplo mostra a boa prática para gerenciar a inicialização
if (!SD.begin(Pino_CS)){
Serial.println("SD card started.");
//valida a inicialização
if (!rtc.begin()){
Serial.println("RTC not found!");
while (1); //fica aqui pra sempre
Serial.println("RTC is not working!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //Ajuste de data e hora na compilação, pela substituição das macros
//rtc.adjust(DateTime(2018, 1, 1, 0, 0, 0));    //ajuste manual: DateTime(year, month, day, hour, minute, second)
timeout = millis() - start_time;
log("gravando dados...\n");
void log(char *msg){
Serial.println("Loggin..");
file = SD.open("data.log", FILE_WRITE);
file.print(' ');
file.print(msg);
Como pode-se ver, é bastante simples a configuração desse data logger shield, bastando implementar;
setup do RTC
setup do SD
função de escrita em arquivo
E a partir de então, você pode gerar arquivos de log no SD card e ler no seu sistema operacional preferido posteriormente!
Mais sobre o SD card
A SD lib foi construida sobre a sdfatlib e ela suporta escrita em sistemas de arquivos FAT16 e FAT32, porém só suporta o formato de nome de arquivos curto, no formato 8×3 (12345678.123). Desse modo, atente-se ao nome de arquivo pretendido.
A biblioteca tem suporte a nível de diretório, mas para arquivos na raíz não é necessário passar '/'. Desde a versão 1.0, pode-se abrir múltiplos arquivos.
A comunicaçao com o SD card é feita através do protocolo SPI, que faz uso dos pinos digital 11, 12 e 13 na maioria dos Arduino e pinos 50, 51 e 52 no Arduino Mega. Um pino adicional deve ser configurado para a seleção do SD card, por isso selecionamos o pino 10 como CS (que é o pino SS na maioria das boards Arduino). Outra vez, no Mega, o pino SS é o 53.
Tendo em conta que esses pinos estarão em uso pelo SD, reserve-os em seu projeto, pois esses pinos não poderão ser utilizados simultaneamente por outros recursos o seu Arduino.