Arduino - Registrar Dados com Data e Hora no Cartão SD
Neste tutorial, vamos aprender a gravar logs com data e hora (timestamp) no Cartão Micro SD usando o Arduino. Em detalhes, vamos aprender:
Arduino - Como registrar dados com data e hora em um arquivo no Cartão Micro SD
Arduino - Como registrar dados com data e hora em vários arquivos no Cartão Micro SD, um arquivo por dia
As informações de hora são obtidas de um módulo RTC e gravadas no Cartão Micro SD junto com os dados.
Os dados registrados no Cartão Micro SD podem ser qualquer coisa. Por exemplo:
Dados lidos de qualquer sensor
Histórico de acesso de uma fechadura de porta
Para simplificar, este tutorial lê os valores de dois pinos analógicos como exemplo de dados. Você pode adaptar facilmente o código para qualquer tipo de dado.
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Sobre o Módulo de Cartão Micro SD e o Módulo RTC
Se você ainda não conhece o Módulo de Cartão Micro SD e o módulo RTC (pinagem, como funcionam, como programar ...), aprenda sobre eles nos seguintes tutoriais:
This image is created using Fritzing. Click to enlarge image
※ Nota:
Se você usar um shield Ethernet ou qualquer shield que tenha um slot para Cartão Micro SD, não precisa usar o Módulo de Cartão Micro SD. Basta inserir o Cartão Micro SD no slot de Cartão Micro SD do shield.
Arduino - Registrar Dados com Data e Hora no Cartão Micro SD
/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS 4#define FILE_NAME "log.txt"RTC_DS3231 rtc;File myFile;voidsetup() {Serial.begin(9600);// SETUP RTC MODULEif (!rtc.begin()) {Serial.println(F("Couldn't find RTC"));while (1); }if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));Serial.println(F("--------------------"));}voidloop() {// open file for writing myFile = SD.open(FILE_NAME, FILE_WRITE);if (myFile) {Serial.println(F("Writing log to SD Card"));// write timestampDateTimenow = rtc.now(); myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data// read dataint analog_1 = analogRead(A0);int analog_2 = analogRead(A1);// write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else {Serial.print(F("SD Card: error on opening file "));Serial.println(FILE_NAME); }delay(2000); // delay 2 seconds}
Passos Rápidos
Verifique se o Cartão Micro SD está formatado em FAT16 ou FAT32 (pesquise no Google como fazer)
Copie o código acima e abra com a Arduino IDE
Clique no botão Upload na Arduino IDE para carregar o código no Arduino
Veja o resultado no Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
SD CARD INITIALIZED.
--------------------
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Ln 11, Col 1
Arduino Uno on COM15
2
Retire o Cartão Micro SD do módulo de Cartão Micro SD
Insira o Cartão Micro SD em um leitor de Cartão SD USB
Conecte o leitor de Cartão SD USB ao PC
Abra o arquivo log.txt no seu PC; ele fica parecido com o abaixo
Se você não tiver um leitor de Cartão SD USB, pode verificar o conteúdo do arquivo de log executando o código Arduino abaixo.
/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-log-data-with-timestamp-to-sd-card*/#include <SD.h>#define PIN_SPI_CS 4#define FILE_NAME "log.txt"File myFile;voidsetup() {Serial.begin(9600);if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));// open file for reading myFile = SD.open(FILE_NAME, FILE_READ);if (myFile) {while (myFile.available()) {char ch = myFile.read(); // read characters one by one from Micro SD CardSerial.print(ch); // print the character to Serial Monitor } myFile.close(); } else {Serial.print(F("SD Card: error on opening file "));Serial.println(FILE_NAME); }}voidloop() {}
Arduino - Registrar Dados em Vários Arquivos
Gravar o log em um único arquivo faz com que ele fique muito grande com o tempo e difícil de verificar. O código abaixo grava o log em vários arquivos:
Um arquivo por dia
O nome do arquivo é a informação da data: YYYYMMDD.txt
/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS 4RTC_DS3231 rtc;File myFile;char filename[] = "yyyymmdd.txt"; // filename (without extension) should not exceed 8 charsvoidsetup() {Serial.begin(9600);// SETUP RTC MODULEif (!rtc.begin()) {Serial.println(F("Couldn't find RTC"));while (1); }if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));Serial.println(F("--------------------"));}voidloop() {DateTimenow = rtc.now();intyear = now.year();intmonth = now.month();intday = now.day();// update filename filename[0] = (year / 1000) + '0'; filename[1] = ((year % 1000) / 100) + '0'; filename[2] = ((year % 100) / 10) + '0'; filename[3] = (year % 10) + '0'; filename[4] = (month / 10) + '0'; filename[5] = (month % 10) + '0'; filename[6] = (day / 10) + '0'; filename[7] = (day % 10) + '0';// open file for writing myFile = SD.open(filename, FILE_WRITE);if (myFile) {Serial.println(F("Writing log to SD Card"));// write timestamp myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data// read dataint analog_1 = analogRead(A0);int analog_2 = analogRead(A1);// write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else {Serial.print(F("SD Card: error on opening file "));Serial.println(filename); }delay(2000); // delay 2 seconds}
Depois de um longo tempo de execução, se você:
Retirar o Cartão Micro SD do módulo de Cartão Micro SD
Inserir o Cartão Micro SD em um leitor de Cartão SD USB
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!