Registrador de Dados Arduino com Cartão SD e DS3231 RTC – Tutorial Passo a Passo
Neste tutorial Arduino, aprenderemos a usar um módulo de Cartão SD com a placa Arduino. Também, em combinação com o módulo Real Time Clock DS3231, faremos um exemplo de registro de dados (data logging) onde armazenaremos os dados de um sensor de temperatura no cartão SD e o importaremos para o Excel para criar um gráfico. Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.
Como Funciona
Primeiro, vamos dar uma olhada no módulo de Cartão SD. Ele funciona com cartões MicroSD padrão cuja tensão de operação é 3,3V. Portanto, o módulo possui um regulador de tensão e um conversor de nível (level shifter) para que possamos usá-lo com os pinos de 5V da placa Arduino.

O módulo de Cartão SD tem seis pinos: dois para alimentação (VCC e GND) e mais quatro para comunicação SPI. Aqui está como precisamos conectá-lo à placa Arduino.

Note que cada placa Arduino tem pinos SPI diferentes que devem ser conectados de acordo.

Você pode obter os componentes necessários para este tutorial Arduino nos links abaixo:
- Módulo Micro SD Card
- Placa Arduino
- Protoboard e Jumpers
Código do Módulo Cartão SD Arduino
Em seguida, precisamos programar o Arduino. Aqui está um código simples:
/*
* Tutorial Arduino Cartão SD Exemplo
* por Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Pino 10 no Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// Inicialização do Cartão SD
if (SD.begin()) {
Serial.println("Cartão SD está pronto para uso.");
} else {
Serial.println("Falha na inicialização do cartão SD");
return;
}
// Cria/Abre arquivo
myFile = SD.open("test.txt", FILE_WRITE);
// Se o arquivo abriu corretamente, escreve nele
if (myFile) {
Serial.println("Escrevendo no arquivo...");
myFile.println("Testando texto 1, 2, 3...");
myFile.close(); // Fecha o arquivo
Serial.println("Concluído.");
}
// Se o arquivo não abriu, imprime erro
else {
Serial.println("erro ao abrir test.txt");
}
// Lendo o arquivo
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("Leitura:");
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
} else {
Serial.println("erro ao abrir test.txt");
}
}
void loop() {
// vazio
}
Descrição do código: Primeiro, precisamos incluir as bibliotecas padrão SD e SPI, criar um objeto "File" e definir o pino ChipSelect do barramento SPI, o pino 53 no meu caso para a placa Arduino Mega. Para este exemplo, queremos que nosso código seja executado apenas uma vez, então todo o código será colocado na seção "setup", enquanto a seção "loop" permanecerá vazia.
Primeiro, iniciamos a comunicação serial e definimos o pino ChipSelect como saída. Temos que fazer isso porque o pino ChipSelect precisa estar "Baixo" para que a comunicação SPI entre o módulo e o Arduino funcione.
Em seguida, usando a função SD.begin(), inicializaremos o cartão SD. Se a inicialização for bem-sucedida, a declaração "if" se tornará verdadeira e a string "Cartão SD está pronto para uso." será impressa no monitor serial; caso contrário, a string "Falha na inicialização do cartão SD" será impressa e o programa será encerrado.
Depois, usando a função SD.open(), criaremos um novo arquivo chamado "test.txt", incluindo o argumento FILE_WRITE, significando que podemos ler e escrever no arquivo. Se o arquivo já existir, a função SD.open() apenas o abrirá.
Se o arquivo foi criado com sucesso, primeiro imprimiremos a string "Escrevendo no arquivo" no monitor serial e, em seguida, usando a função myFile.println(), imprimiremos o texto "Testando texto 1, 2, 3..." no arquivo. Após isso, precisamos usar a função close() para garantir que os dados escritos anteriormente no arquivo sejam fisicamente salvos no cartão SD.
Em seguida, veremos como podemos ler do arquivo. Novamente, usaremos a mesma função SD.open(), mas desta vez, como o arquivo "test.txt" já foi criado, a função apenas abrirá o arquivo. Então, usando a função myFile.read(), leremos do arquivo e o imprimiremos no monitor serial. A função read() na verdade lê apenas um caractere por vez, então precisamos usar o loop "while" e a função myFile.available() para ler todos os caracteres ou todos os dados escritos anteriormente. No final, precisamos fechar o arquivo.
Agora, após fazer upload do código para o Arduino, se tudo estiver ok, o seguinte aparecerá no monitor serial.

Como podemos ver, o cartão SD foi inicializado com sucesso, a escrita nele também foi bem-sucedida, e a leitura dos dados escritos ou a string "Testando texto 1, 2, 3..." foi lida com sucesso. Se abrirmos o cartão SD no nosso computador, poderemos ver o arquivo "test.txt" criado e o texto escrito nele.
Registro de Dados (Data Logging) com Cartão SD Arduino
Agora, vamos fazer outro exemplo mais interessante de registro de dados de um sensor de temperatura. Para esse propósito, usaremos o módulo Real Time Clock DS3231, que também possui um sensor de temperatura embutido. Você pode encontrar mais detalhes sobre como conectar e usar este módulo no meu tutorial anterior.
Após conectar os dois módulos ao Arduino, vamos analisar o código para este exemplo.
/*
* Registro de Dados de Temperatura Arduino
* por Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
#include <DS3231.h>
File myFile;
DS3231 rtc(SDA, SCL);
int pinCS = 53; // Pino 10 no Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// Inicialização do Cartão SD
if (SD.begin()) {
Serial.println("Cartão SD está pronto para uso.");
} else {
Serial.println("Falha na inicialização do cartão SD");
return;
}
rtc.begin();
}
void loop() {
Serial.print(rtc.getTimeStr());
Serial.print(",");
Serial.println(int(rtc.getTemp()));
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
myFile.print(rtc.getTimeStr());
myFile.print(",");
myFile.println(int(rtc.getTemp()));
myFile.close();
} else {
Serial.println("erro ao abrir test.txt");
}
delay(3000);
}
Descrição do Código: Primeiro, precisamos incluir as bibliotecas necessárias para ambos os módulos, criar os dois objetos e, na seção setup, inicializá-los.
Na seção loop, usando a função Serial.print(), imprimiremos os valores de tempo e temperatura no monitor serial, com um caractere "vírgula" entre eles e uma nova linha após o valor de temperatura. Precisamos dessa forma das linhas para que possamos importá-las facilmente e criar um gráfico no Excel. Note também que os valores de temperatura são convertidos em inteiros.
Esses mesmos valores também serão escritos no arquivo "test.txt" recém-criado e, no final, só precisamos adicionar um atraso que representará o intervalo de gravação dos dados de temperatura.
Após fazer upload do código, o Arduino começará a armazenar os valores de temperatura a cada 3 segundos. Após um tempo, podemos abrir o cartão SD no nosso computador para ver os resultados.

Para criar um gráfico no Excel, precisamos importar este arquivo. Veja como faremos isso:
No menu Dados, precisamos clicar no botão "Obter Dados de Texto" e selecionar o arquivo de texto. Aqui, escolheremos "Delimitado" e clicaremos em avançar. Na segunda etapa, selecionaremos a vírgula como delimitador e finalizaremos o assistente.
Esse processo inserirá os valores de tempo e temperatura em colunas separadas. Agora, só precisamos selecionar ambas as colunas e, no menu Inserir, selecionar "Inserir gráfico de linhas". Isso criará o gráfico onde poderemos ver os valores de temperatura a cada 3 segundos.

Isso é tudo para este tutorial. Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo.
Processo de manufatura
- IXON Cloud: Domine Data Logging e Dashboards de Máquina em Minutos
- Crie uma Fechadura RFID Segura com Arduino – Guia Passo a Passo
- Monitore e Registre Energia com Arduino – Guia Passo a Passo (Dr. Wattson)
- Crie Animações e Jogos Envolventes em LCD com Arduino UNO
- Registrador de Temperatura e Umidade com Arduino, DHT11 e Ethernet Shield
- Python 3 para Arduino UNO: Controle de Comandos Fácil e Demo com LED
- Construa um Rádio FM Compacto com Arduino Nano e RDA5807M
- Projeto Sensor de Impressão Digital com Arduino Nano – Tutorial Completo
- Construa um Mini Piano com Arduino UNO – Tutorial Passo a Passo
- Tutorial Arduino Iniciante 01: Comece seu Primeiro Projeto