Tutorial de cartão SD e registro de dados do Arduino
Neste tutorial do Arduino vamos aprender como usar um módulo SD Card com a placa Arduino. Também em combinação com o módulo DS3231 Real Time Clock, faremos um exemplo de registro de dados onde armazenaremos os dados de um sensor de temperatura no cartão SD e os importaremos para o Excel para fazer 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 do cartão SD. Funciona com Cartões MicroSD padrão cuja tensão de operação é de 3,3 V. Portanto, o módulo possui um regulador de tensão e um nivelador para que possamos utilizá-lo com os pinos de 5 V da Placa Arduino.

O SD Card Module possui seis pinos, dois para alimentação do módulo, os pinos VCC e GND, e mais quatro pinos para comunicação SPI. Veja como precisamos conectá-lo à placa Arduino.

Observe que cada placa Arduino possui pinos SPI diferentes que devem ser conectados de acordo.

Você pode obter os componentes necessários para este tutorial do Arduino nos links abaixo:
- Módulo de cartão micro SD………………..
- Placa Arduino ………………………………
- Breadboard e jump wires ………
Código do módulo do cartão SD do Arduino
Em seguida, precisamos programar o Arduino. Aqui está um código simples:
/*
* Arduino SD Card Tutorial Example
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Pin 10 on Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// SD Card Initialization
if (SD.begin())
{
Serial.println("SD card is ready to use.");
} else
{
Serial.println("SD card initialization failed");
return;
}
// Create/Open file
myFile = SD.open("test.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.println("Writing to file...");
// Write to file
myFile.println("Testing text 1, 2 ,3...");
myFile.close(); // close the file
Serial.println("Done.");
}
// if the file didn't open, print an error:
else {
Serial.println("error opening test.txt");
}
// Reading the file
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("Read:");
// Reading the whole file
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("error opening test.txt");
}
}
void loop() {
// empty
}
Code language: Arduino (arduino)
Descrição do código: Então 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.
Então primeiro precisamos iniciar a comunicação serial e definir o pino ChipSelect como saída. Temos que fazer isso porque o pino ChipSelect precisa estar “Low” para que a comunicação SPI entre o módulo e o Arduino funcione.
Em seguida, usando a função SD.begin() vamos inicializar o cartão SD e se a inicialização for bem sucedida a declaração “if” se tornará verdadeira e a String “SD card is ready to use.” será impresso no monitor serial, caso contrário, a string “Falha na inicialização do cartão SD” será impressa e também o programa será encerrado.
Em seguida, usando a função SD.open(), criaremos um novo arquivo chamado “test.txt”, incluindo o argumento FILE_WRITE, o que significa que podemos ler e gravar no arquivo. Se o arquivo já existir, a função SD.open() apenas o abrirá.
Portanto, se o arquivo foi criado com sucesso primeiro, imprimiremos a string “Writing to file” no monitor serial e, em seguida, usando a função myFile.println(), imprimiremos o texto “Testing text 1, 2 ,3…” no Arquivo. Depois disso, precisamos usar a função close() para garantir que os dados anteriores gravados no arquivo sejam salvos fisicamente no cartão SD.
A seguir, veremos como podemos ler o arquivo. Então novamente faremos a mesma função, SD.open(), mas desta vez como o arquivo “test.txt” já foi criado, a função irá apenas abrir o arquivo. Em seguida, usando a função myFile.read() vamos ler o arquivo e imprimi-lo no monitor serial. A função read() na verdade lê apenas um caractere por vez, portanto, 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 o 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 gravação também foi bem-sucedida e também a leitura dos dados gravados ou a string “Testing text 1, 2 ,3…” foi lida com sucesso. Se abrirmos o cartão SD em nosso computador, podemos ver o arquivo “test.txt” criado e o texto escrito nele.
Registro de dados do cartão SD do Arduino
Agora vamos fazer outro exemplo mais interessante de registro de dados de um sensor de temperatura. Para isso, usaremos o módulo DS3231 Real Time Clock 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.
Então, depois de conectar os dois módulos ao Arduino, vamos dar uma olhada no código para este exemplo.
/*
* Arduino Temperature Data Logging
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
#include <DS3231.h>
File myFile;
DS3231 rtc(SDA, SCL);
int pinCS = 53; // Pin 10 on Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// SD Card Initialization
if (SD.begin())
{
Serial.println("SD card is ready to use.");
} else
{
Serial.println("SD card initialization failed");
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(); // close the file
}
// if the file didn't open, print an error:
else {
Serial.println("error opening test.txt");
}
delay(3000);
}
Code language: Arduino (arduino)
Descrição do código: Primeiro, precisamos incluir as bibliotecas necessárias para ambos os módulos, depois criar os dois objetos e inicializá-los na seção de configuração.
Na seção de loop usando a função Serial.print() imprimiremos os valores de tempo e temperatura no monitor serial, com um caractere de “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 fazer um gráfico no Excel. Observe também que os valores de temperatura são convertidos em números inteiros.
Assim, esses mesmos valores também serão gravados no arquivo “test.txt” recém-criado e no final precisamos apenas adicionar um atraso que representará o intervalo de registro dos dados de temperatura.
Após o upload do código, o Arduino começará a armazenar os valores de temperatura a cada 3 segundos. Depois de um tempo, podemos abrir o cartão SD em nosso computador para ver os resultados.

Para criar um gráfico no Excel, precisamos importar este arquivo e veja como faremos isso:
No menu de dados, precisamos clicar no botão "Obter dados do texto" e selecionar o arquivo de texto. Aqui vamos escolher “Delimitado” e clicar em próximo, e na segunda etapa, selecione a vírgula como delimitador e finalize o assistente.
Portanto, esse processo inserirá os valores de tempo e temperatura em colunas separadas. Agora só precisamos selecionar as duas colunas e no menu Inserir selecione “Inserir gráfico de linhas”. Isso criará o gráfico onde podemos 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
- [Vídeo] Log de dados da máquina (PLC) e painel explicado
- Tutorial de bloqueio RFID do Arduino
- Como construir um monitor de energia Arduino e registrador de dados
- Animação de LCD e jogos
- Registrador de dados de temperatura e umidade
- Comunicação Python3 e Arduino
- Rádio FM usando Arduino e RDA8057M
- Tutorial do sensor de impressão digital Arduino
- Tutorial do Arduino:Mini Piano
- Arduino Tutorial 01:Começando