Como fazer um Datalogger com Arduino 121

No tutorial de hoje nós vamos mostrar como montar um Datalloger com Arduino usando um Cartão SD. Para fazer este registrador de dados você vai precisar de um Arduino Uno, módulo RTC DS3231 e módulo cartão SD. Esse projeto vai registrar os dados de data, hora e temperatura a cada 1 minuto, gravando-os em um arquivo texto no cartão SD.

Circuito Datalogger

O módulo cartão SD nós já vimos anteriormente no post Como Gravar Dados no Cartão Sd com Arduino. Já o módulo DS3231 é um módulo RTC (Real Time Clock, ou Relógio de Tempo Real), sucessor do DS1307, com cristal oscilador embutido que torna o módulo muito mais preciso em relação aos modelos anteriores. Além disso, esse módulo também já tem embutido um sensor de temperatura.

Modulo RTC DS3231

A comunicação do módulo é feita pela interface I2C, possui alimentação de 3,3 a 5V e trabalha com nível de sinal de 5V, podendo ser ligado diretamente ao microcontrolador. Possui também uma bateria que preserva os dados na memória do DS3231 em caso de falta de energia.

Circuito Datalogger com Arduino

Ligue o DS3231 ao Arduino utilizando os pinos da interface I2C (pinos analógicos A4 (SDA) e A5 (SCL)). Na ligação do módulo cartão SD, que trabalha com nível de sinal de 3.3V, vamos utilizar um conversor de nível lógico 3,3-5V Bidirecional, que vai reduzir a tensão das portas do Arduino (5V) para os 3.3V suportados pelo módulo. Você também pode montar um divisor de tensão com resistores, se preferir.

Circuito Datalogger

No conversor de nível lógico, observe a ligação das tensões de referência (5V para o lado do Arduino, 3.3V para o lado do módulo SD). Sem essa ligação, o conversor não funciona.

Programa Datalogger

Nesse programa vamos utilizar as seguintes bibliotecas, além da SPI, Wire e Sd, já presentes na IDE do Arduino:

Baixe as três bibliotecas e coloque-as dentro da pasta LIBRARIES da IDE do Arduino.

O programa que captura a data e a hora do módulo é baseado no programa de exemplo SetSerial, da própria biblioteca. Adicionamos a função de gravar no cartão SD as informações de data, hora e temperatura à cada 1 minuto.

//Programa: Datalogger com Arduino, modulo RTC DS3231 e cartao SD
//Alteracoes e adaptacoes: MakerHero

#include <DS3232RTC.h>
#include <Streaming.h>
#include <Time.h>
#include <Wire.h>
#include <SD.h>
#include <SPI.h>

//Pino CS do modulo cartao SD
int CS_PIN = 4;

File file;

void setup(void)
{
  Serial.begin(9600);
  //Inicializa o cartao SD
  inicia_SD();

  //Sincroniza a biblioteca Time com o RTC a cada 5 minutos
  setSyncProvider(RTC.get);
  Serial << F("Sincronizando com o RTC...");
  if (timeStatus() != timeSet) Serial << F(" Falha!");
  Serial << endl;
}

void loop(void)
{
  static time_t tLast;
  time_t t;
  tmElements_t tm;

  //Verifica se foi setado um novo horario
  //Formato: ano, mês, dia, hora, minuto, segundo
  if (Serial.available() >= 12) {
    int y = Serial.parseInt();
    if (y >= 100 && y < 1000)
      Serial<<F("Erro: Ano deve ter dois ou quatro digitos!") <<endl;
    else {
      if (y >= 1000)
        tm.Year = CalendarYrToTm(y);
      else    //(y < 100)
        tm.Year = y2kYearToTm(y);
      tm.Month = Serial.parseInt();
      tm.Day = Serial.parseInt();
      tm.Hour = Serial.parseInt();
      tm.Minute = Serial.parseInt();
      tm.Second = Serial.parseInt();
      t = makeTime(tm);
      RTC.set(t);
      setTime(t);
      Serial << F("Horario modificado para: ");
      printDateTime(t);
      Serial << endl;
      while (Serial.available() > 0) Serial.read();
    }
  }

  t = now();
  if (t != tLast) {
    tLast = t;
    printDateTime(t);
    //Grava dados no cartao a cada 1 minuto
    if (second(t) == 0)
    {
      float c = RTC.temperature() / 4.;
      float f = c * 9. / 5. + 32.;
      Serial << F("  ") << c << F(" C  ") << f << F(" F");
      Serial.println("nGravando dados no cartao SD...");
      grava_SD(t);
    }
    Serial << endl;
  }
}

//Mostra data e hora na serial
void printDateTime(time_t t)
{
  printI00(day(t), 0);
  Serial << monthShortStr(month(t)) << _DEC(year(t));
  Serial << ' ';
  //printTime(t);
  printI00(hour(t), ':');
  printI00(minute(t), ':');
  printI00(second(t), ' ');
}

//Grava dados no cartao SD
void grava_SD(time_t t)
{
  float c = RTC.temperature() / 4.;
  abre_arquivo_gravacao("data.txt");
  file.print("Data: ");
  file.print(day(t));
  file.print("/");
  if (month(t) < 10)
  {
    file.print("0");
  }
  file.print(month(t));
  file.print("/");
  file.print(year(t));
  file.print(" Hora: ");
  if (hour(t) < 10)
  {
    file.print("0");
  }
  file.print(hour(t));
  file.print(":");
  if (minute(t) < 10)
  {
    file.print("0");
  }
  file.print(minute(t));
  file.print(":");
  if (second(t) < 10)
  {
    file.print("0");
  }
  file.print(second(t));
  file.print(" Temperatura: ");
  file.println(c);
  fecha_arquivo();
}

//Correcao para imprimir "00" ao inves de "0" caso
//o valor seja menor do que 10
void printI00(int val, char delim)
{
  if (val < 10) Serial << '0';
  Serial << _DEC(val);
  if (delim > 0) Serial << delim;
  return;
}

void inicia_SD()
{
  pinMode(CS_PIN, OUTPUT);

  if (SD.begin())
  {
  } else
  {
    return;
  }
}

int abre_arquivo_gravacao(char filename[])
{
  file = SD.open(filename, FILE_WRITE);

  if (file)
  {
    return 1;
  } else
  {
    return 0;
  }
}

void fecha_arquivo()
{
  if (file)
  {
    file.close();
  }
}

Para setar a data e hora do módulo, entre no serial monitor e digite as informações no formato abaixo:

ano, mês, dia, hora, minuto, segundo

Serial Monitor - Horario

Para verificar as informações registradas, retire o cartão SD do módulo e abra o arquivo data.txt no seu computador utilizando o notepad ou outro editor de textos de sua preferência:

Serial Monitor - Dados

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

121 Comentários

  1. boas pessoal, o meu conversor de nivel lógico é o Conversor Bi-Direcional De Nível Lógico 4-Canais Por I2C BSS138 e não estou a conseguir ligar o conversor corretamente, podem dar uma ajuda??

  2. achei bem interessante! Como podemos fazer um com sensores termopares?
    pelos menos 30 entradas de Tipo J ou T.

    Sua medição é por meio de sinas em mv.

    Faça esse projeto e me informe o preço!

    Grato!

  3. Não consigo baixar a biblioteca time

    1. Olá Nara,

      Você pode baixar diretamente pelo gerenciador de bibliotecas da IDE do Arduino.

      Vá em Ferramentas -> Gerenciador de Bibliotecas, digite Time na pesquisa e procure na lista a biblioteca “Time by Michael Margolis” e clique em instalar.

      Abraços!
      Vinícius – Equipe MakerHero

  4. Tem algum projeto que faça um voltimetro analogico que mostre os valores na tela do pc em forma grafica?

  5. Boa tarde .. Eu preciso dar um sinal em uma entrada da shield data logger e gravar uma estring com data e hora… é possivel algo parecido

  6. Adilson, comprei um Arduino Leonardo e as Shields Ethernet 5100 (com RJ45 e slot para microSD) e Datalogger Vr.1 (ela tem o RTC e slot de cartão SD) e mais a Shield LCD de duas linhas com botões. Ainda estou aprendendo com o Arduino os primeiros passos com sensores e leds, mas a minha dúvida é com relação aos I/O quando essas Shileds são montadas. A Ethernet informa que não posso usar a 4 ,10, 11, 12 e 13, sendo que a 4 é destinada para o microSD. Até então eu entendi, mas o Datalogger também usa a 4 para SD. Neste caso, basta eu usar apenas o RTC da Shield do Datalogger e para armazenas os dados eu poderei usar o microSD da Ethernet e salvar o arquivo txt lá? Porque ao usar a biblioteca SD e a porta 4, tem como fazer a destinção de qual cartão deve ser utilizado? Obrigado pela atenção.

  7. Boa tarde!

    É possível registrar no cartão dados de outros sensores de temperatura e umidade ligados no Arduíno uno, por exemplo, ao invés de registrar apenas o que vem no módulo RTC?

    1. Maicon, pode sim.

      Você deve criar o comando file.print(variavel do sensor), assim ele vai salvar no SD.

      Abraços!
      Diogo – Equipe MakerHero

  8. Bom dia Adilson. Como faço para incluir um sensor de umidade de solo no datalogger? Daí ele registra tempo, temperatura e umidade.

  9. Projeto interessante, comandante, mas eu preciso de um pouco mais de informações.
    O caso concreto é o seguinte: tenho um equipamento de monitoramento de motor que armazena dados e tem uma saída via interface serial. É um módulo de concepção antiga, e o que era usado para baixar o banco de dados era uma interface RS232, com conector DB-9, atualmente inviável de se encontrar até mesmo em notebooks mais antigos. Queria substituir por Arduíno. É uma interface meio “burra”, de sentido único, que ao pressionar de um botão envia a palavra “READY” pela saída serial a 9600 bps, 8N1. Soltando-se o botão o módulo descarrega todo o arquivo que pode conter milhares de registros em um formato .csv, para importação pelo Excel. Dos componentes deste projeto que apresentou eu acho que não preciso do módulo de relógio, mas os outros dão certo. Acha que posso usar o pino “0” (zero) do Arduíno Uno para receber os dados seriais e gravar no SD?

  10. olá sou cliente de Vcs. Adquiri o módulo Real Time Clock RTC DS3231. Estou seguindo os passos que vc descrê e inclui as referidas bibliotecas. Quando coloco a include #include , já coloquei a biblioteca ( DS3232RTC) mas quando compilo dá erro de compilação para a placa arduino. quando comento essa biblioteca e as que fazem referencia a instancia do “RTC”, tudo ocorre bem, mas não consigo fazer funcionar o RTC DS3231.

    1. Olá, Joseval

      Qual erro exatamente ocorre na hora de compilar? Verifique se a biblioteca está instalada 😉

      Abraços!
      Diogo – Equipe MakerHero

  11. Olá, sou um pouco leigo no que se refere a programação, preciso de um programa desse para monitorar quantidades de abertura por dia. Nesse contexto onde ele imprime temperatura, imprimiria 0 pra fechado e 1 pra aberto. Como posso proceder para montar um semelhante a esse, que atenda a demanda.
    Desde já agradeço se alguém puder me nortear…

    1. Roberto,

      Aconselho você levar essa sua dúvida para o nosso fórum, lá é mais tranquilo de fornecer uma ajuda 🙂

      Abraços!
      Diogo – Equipe MakerHero

  12. é possível ser com umidade relativa e temperatura?

    1. Alisson,

      É possível sim. Dê uma conferida no nosso tutorial sobre medição de temperatura: https://www.makerhero.com/blog/monitorando-temperatura-e-umidade-com-o-sensor-dht11/

      Depois, você deve juntar ambos os projetos para formar o que você deseja 😉 https://www.makerhero.com/blog/como-juntar-dois-projetos-em-arduino/

      Abraços!
      Diogo – Equipe MakerHero

  13. Boa tarde.
    Não entendi muito bem a parte do horário para armazenamento.

    Como eu posso alterar o código para armazenar os dados a cada 5 minuto?
    Mas queria tirar a média dos dados lido nesse intervalo e não apenas armazenar os dados a cada 5 minutos, pois assim o sensor não seria preciso.

    1. Matheus,

      Você pode mandar os dados para a nuvem e fazer um gráfico com os dados, aí teria uma media. Para isso, dê uma olhada no Thingspeak

      Abraços!
      Diogo – Equipe MakerHero

  14. Olá, existe alguma forma de fazer com que o arduino crie um novo arquivo txt – com nomeclatura diferente – , a ser armazenado num cartão SD, toda vez que o progrma rodar?
    Tentei fazer isso em um programa recentemente transformando o nome do arquivo em SD.open( , FILE_WRITE) em uma string, mas não funcionou

    1. Júlia, você pode fazer algo como:

      char fileName[] = "LOGGER00.txt"; // Nome base para o logger.

      void setup()
      {
      // Constrói o nome do arquivo para ser o próximo nome incrementado [00-99].
      for (byte i = 1; i <= 99; i++)
      {
      // checa antes de modificar o nome do arquivo
      if (SD.exists(fileName))
      {
      // se o nome já existir, adiciona o segundo dígito no índice do nome
      fileName[6] = i/10 + '0';
      fileName[7] = i%10 + '0';
      } else {
      break; // se não existir, ele sai do loop.
      }
      }
      }

      Veja se funciona 🙂

      Abraços!
      Diogo – Equipe MakerHero

  15. Boa tarde

    Estou fazendo um projeto final do meu TCC onde monitoro a Umidade, Temperatura e Luminosidade de um leito hospitalar e salvar os dados em um cartão micro SD no modulo micro SD que comprei com voces, quero fazer um datalogger usando o modulo Real Time Clock RTC DS3231, só que eu quero que ele salve os dados não usando o sensor de temperatura que vem embutino no Real Time Clock RTC DS3231 e sim usar sensor DHT 22 que le a umidade e temperatura e usar o sensor de luz BH1750, minha duvida é como faço para que o Real Time Clock RTC DS3231 leia e salve os dados da Umidade e temperatura do sensor DHT 22 e do sensor de luz BH1750, se puder esclarecer fico grato.

    Att: PedroJr

    1. Olá,

      Sugiro que você abra um tópico lá no fórum! O pessoal costuma ajudar por lá 🙂

      Abraços!
      Diogo – Equipe MakerHero

  16. Boa tarde, tenho um problema com o time RTC, que quando eu alimento ele pelo meu microcontrolador e adiciono a bateria com poucos dias ele incha, poderia me ajudar?

    1. Marcos,

      Pode ser problemas de temperatura. Esquenta muito?

      Abraços!
      Diogo – Equipe MakerHero

  17. Boa noite Adilson,
    Muito bom o seu projeto, e me ajudou a entender um pouco como usar horario e cartão sd no arduino, e estou me arriscando fazer um trabalho para a faculdade de engenharia onde pretendo fazer analise de medicoes de energia e gravar no cartão.
    Mas apareceram duas duvidas,

    A primeiro é sobre como testar um determidado horario tipo 22h ja que as variaveis são de um tipo diferente, como convertelas para inteiro por exemplo para poder fazer comparações?

    E A Segunda é sobre o cartão sd, como controlar o espaço do cartão e como saber quanto tempo ele vai gravar visto que estou analisando a energia a cada segundo. Quanto a isto acho que posso usar um armazenamento externo na ineternet com o protocolo MQTT, mas Teria como fazer uma funcao para ele sobrescrever os dados depois que o cartão tiver cheio ?

    Att.
    Wallace

  18. Prezado Adilson, boa tarde
    Gostaríamos muito de entrar em contato contigo para discutir esse projeto. Favor me retornar em [email protected]

    1. Olá Wesley!

      O que você gostaria de discutir? Pode colocar suas dúvidas nesse post mesmo.

      Abraços!

      André – Equipe MakerHero

      1. como faz p inserir um sensor de gas nesse projeto?

        1. Olá João!

          Sugiro dar uma olhada neste post:
          https://www.arduinoecia.com.br/2015/01/alarme-sensor-de-gas-modulo-mq-2.html

          Ali explica como faz para ler um sensor de gás com Arduino.

          Abraços!

          André – Equipe MakerHero

          1. Na verdade, ao invés do valor de temperatura, seria do sensor MQ,
            não estou conseguindo

          2. Olá João!

            Você conseguiu fazer o sensor MQ funcionar sozinho?

            Abraços!

            André – Equipe MakerHero

  19. Boa noite,como seria a modificação no script para inserir dados coletados pelo pluviômetro? Onde o datalogger armazenaria os dados de data, hora, temperatura e mm de chuva.

    1. Olá Rauff!

      É neste trecho de código:
      t = now();
      if (t != tLast) {
      tLast = t;
      printDateTime(t);
      //Grava dados no cartao a cada 1 minuto
      if (second(t) == 0)
      {
      float c = RTC.temperature() / 4.;
      float f = c * 9. / 5. + 32.;
      Serial << F(" ") << c << F(" C ") << f << F(" F");
      Serial.println("nGravando dados no cartao SD…");
      grava_SD(t);
      }
      Serial << endl;
      }
      }

      Você substitui o horário e data pelos valores no pluviômetro.

      Abraços!

      André – Equipe MakerHero

  20. Excelente! Sabem se há como enviar o arquivo txt de resultado para um servidor ftp utilizando shield ethernet ou wifi?

    1. Olá Cesar!

      Ainda não testamos aqui, mas você pode dar uma olhada nesse post, talvez ele te ajude:

      https://www.makerhero.com/blog/tutorial-ethernet-shield-w5100/

      Se você conseguir, nos avisa aqui? 🙂

      Abraços!

      André – Equipe MakerHero

  21. BOM DIA
    TENTEI FAZER FUNCIONAR PORÉ DEU ERRO E NÃO ESTOU CONSEGUINDO RESOLVER.
    PODE ME AJUDAR? OBRIGADO
    In file included from C:\Users\Mario\Documents\Arduino\libraries\DS3232RTC-master\src/DS3232RTC.h:25:0,

    from E:\000 Projetos\Projeto DataLogger\Arduino\sincronizando_rtc\sincronizando_rtc.ino:4:

    C:\Program Files (x86)\Arduino\libraries\TimeLib-master/TimeLib.h:27:23: fatal error: Tick/Tick.h: No such file or directory

    #include “Tick/Tick.h”

    ^

    compilation terminated.

    Foram encontradas múltiplas bibliotecas para “TimeLib.h”
    Usado: C:\Program Files (x86)\Arduino\libraries\TimeLib-master
    Não usado: C:\Users\Mario\Documents\Arduino\libraries\Time-master
    Foram encontradas múltiplas bibliotecas para “DS3232RTC.h”
    Usado: C:\Users\Mario\Documents\Arduino\libraries\DS3232RTC-master
    Não usado: C:\Program Files (x86)\Arduino\libraries\DS3232RTC-master
    exit status 1
    Erro compilando para a placa Arduino Nano
    Uma biblioteca chamada DS3232RTC-master já existe
    Biblioteca inválida encontrada em C:\Program Files (x86)\Arduino\libraries\u8glib-master: C:\Program Files (x86)\Arduino\libraries\u8glib-master
    Biblioteca inválida encontrada em C:\Program Files (x86)\Arduino\libraries\u8glib-master: C:\Program Files (x86)\Arduino\libraries\u8glib-master

    1. Olá Mario!

      Já experimentou reinstalar a biblioteca? Parece que o erro foi ali.

      Abraços!

      André – Equipe MakerHero

  22. Irei comprar os componentes em sua loja, poderia me falar quais eu preciso para essa programação?

    1. Olá Bruno!

      Na seção “Material necessário” você encontra tudo o que precisa adquirir para realizar esse projeto.

      Abraços!

      André – Equipe MakerHero

      1. Na vdd vou fazer isso aí gravar data, hora e temperatura, mas com o sensor max6675, poderia me ajudar com esse matérias.

        Colo farei pra ele gravar exatamente assim? Quais matéria vou precisar pra isso?

        1. Olá Bruno!

          Aí alem dos materiais listados aqui, você também precisa do necessário para utilizar o sensor.

          Dica: Faça as coisas separadamente. Primeiro somente leia os dados do sensor. ´
          Depois grave qualquer dado no SD.

          Quando estiverem funcionando as duas coisas separadamente só aí você junta tudo 🙂

          Abraços!

          André – Equipe MakerHero

  23. Boa noite, Tudo bem?

    tenho uma duvida?

    Gostaria de um programa para fazer exactamente isso, mas com um sensor de temperatura MAZ6675, com um botão para iniciar a coléta de dados e com um led pra falar que ta rodando o software.

    Poderia me da uma ajuda, com base nessa sua programação?

    1. Olá Bruno!

      Você precisa somente ler a tensão do seu sensor e adicionar ao programa, para gravar junto no SD.

      Você conseguiu ler os dados do sensor já?

      Abraços!

      André – Equipe MakerHero

      1. Não é que ai vc usa um sensor diferente né?
        Gostaria de fazer exatamente isso aí gravar data, hora e têmpera mas com o sensor max6675. Não tô conseguindo fazer a programação

  24. Bom dia !
    Eu consigo adicionar a esse programa, o medidor de corrente não invasivo ? Fazendo com o que o o cartão SD grave data e hora e o valor da corrente naquele instante ?

  25. Bom dia. Qual é a formatação do cartão? Fat 16 ou Fat 32? Existe algum controle para impedir o cartão de extrapolar o limite de espaço? O sistema formata o cartão se for preciso com algum comando? Caso sim, pensei em criar uma rotina aliada à data com aviso de confirmação (por led de alerta aceso) de apagar os dados.

  26. Seria possivel gravar uma variavel e recuperá-la para usar depois no aplicativo?

    Minha ideia seria um contador que mesmo depois de desligado armazenasse o valor e quando ligado continuasse contando de onde parou!

  27. Parabéns pelo trabalho. Como faço para salvar as informações numa planilha do EXCEL?

  28. Como que eu faço para inserir um lcd 16×2 que mostre a data e a hora neste circuito?

    Marcos Vinícius Góes Ferreira
  29. Adilson, não consigo baixar a biblioteca “time” quando tento baixar sou direcionado a uma página toda bugada, o que faço?
    [

  30. Muito bom tutorial!
    Mais esta dando erro ao carregar:
    Erro compilado para a plaa Arduino/Genuino Uno

    O q pode ser?

    Teria como tb acionar o registro da data , dia e temperatura no cartao Sd por um botão?

    Att

  31. Muito bom!!
    Parabéns Adilson Thomsen!

    Seria possúvel eu acionar esse data logger com um botão e ficar registrado a hora e o dia q foi acionado?

    Att

    1. Boa tarde,

      É possível sim. Creio que você possa usar este post como base, e adicionar um RTC para gravar a data e hora.

      Abraço!

      Adilson

  32. olá …muito bom tutorial! Parabéns!
    É possível aplicar esse código em um arduino nano para registro de HC-SR04?

  33. olá meu nome e marcus vinicius e tenho 10 anos,eu gostaria de sua ajuda porque eu coloquei esse comando para um projeto do meu pai e ta dando alguns problema que algumas palavras nao estar declarado no scope e ja tentei de tudo se vc poder me ajudar eu fico muito grato.

    marcus vinicius firmino pereira
  34. Boa tarde, estou com um projeto em andamento, preciso fazer a leitura de tensão em dois equipamentos simultaneamente, para posteriormente fazer um comparativo entre as duas.
    É possível?

  35. Se o leitor de SD for conectado diretamente na porta 3.3V do arduino é necessario o divisor ou conversor de tensão?

    1. Na porta 3.3V ele não vai funcionar. Apenas na de 5 Volts.

  36. Caro Adilson, boa noite.

    Estou tendo problemas com a montagem acima, me empenhei ao máximo para não cometer erros na montagem mas o fato é que não está gravando nada no cartão. Não dá erro e nada é gravado.

    Você pode me dar alguma orientação ?

    Atenciosamente.

    1. Oi, Luiz.

      Eu tive o mesmo problema.
      Arrumei o meu erro não colocando o conversor de sinal.
      Aparentemente, o meu tinha um conversor interno.

  37. Boa tarde, estou tentando compilar esse código e esta dando um erro no IDE 1.8.2, tentei compilar no IDE 1.6.6, porém as bibliotecas disponíveis no link não são reconhecidas, o que eu posso fazer?

  38. filipe bom dia. achei ótima sua ideia. Com esse projeto consigo gravar informações de tensão e corrente na saída de uma maquina de soldar?

  39. Olá,

    Tenho um Sensor Shield V5.0, pelas informações, ele já tem as conexões para o Cartão SD, utilizando-as, eu ainda assim necessito do conversor de nível lógico 5-3,3V ? Ou posso realizar a ligação diretamente?
    Haveria algum tutorial sobre isso?

  40. Olá, galera!

    Eu tenho uma dúvida. Eu consigo mandar algum arquivo para um cartão SD conectado no arduino, sem que ele esteja conectado diretamente no PC… sei lá usando um módulo Bluetooth ou coisa parecida. Eu simplesmente conectaria (parearia) meu PC com o módulo, e enviaria dados para o cartão SD.
    Se a resposta for sim, como eu faria isso??

    Obs: Não sei se o que perguntei foi algo absurdo, mas não custa nada tentar.

    1. Você pode fazer algo assim, Stevam. O Arduino consegue escrever em arquivos do cartão de memória, assim como consegue receber dados pelo Bluetooth. Este artigo ensina como gravar os dados no cartão SD: https://www.makerhero.com/blog/cartao-sd-com-arduino.html . Aqui o artigo sobre o Bluetooth: https://www.makerhero.com/blog/tutorial-modulo-bluetooth-com-arduino.html .

      Existem várias outras formas de fazer estas coisas, se pesquisar bem. Tenta usar o livro “Arduino em Ação”, que é muito bom também.

      1. Olá Rafael Barbosa, valeu pela dica. Vou unir estes dois tutoriais e tentar fazer o “mini server” kkk

      2. Rafael, você sabe se há como interagir as duas coisas? No caso, enviar via Bluetooth dados que foram salvos no cartão sd?

  41. Estou querendo gravar no cartão de memória outras variáveis além da data, hora e temperatura. Como faço para ficar tudo numa mesma linha ?? Digo isso por que as variáveis que acrescentei estão sendo gravadas sempre abaixo da linhas (data, hora e temperatura) do arquivo txt.

    1. Fábio, acho que isso pode ser resolvido se você limpar o arquivo antes de registrar um novo valor. Com isso você terá apenas uma variável no arquivo.
      Um abraço,

  42. Boa tarde, estou tendo o seguinte erro na compilação do código, o que está impedindo da gravação ser feita no cartão SD. Grata desde já com qualquer ajuda. 🙂

    C:UserscarolDocumentsArduinoDataLogguer__FP_166DataLogguer__FP_166.ino: In function ‘void grava_SD(time_t)’:

    C:UserscarolDocumentsArduinoDataLogguer__FP_166DataLogguer__FP_166.ino:91:35: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    abre_arquivo_gravacao(“data.txt”);

    ^

    1. Voce conseguir resolver seu problema ? Estou com o mesmo…

  43. Boa tarde amigos,
    Eu utilizo duas versões da IDE do Arduino a 1.0.4 e a 1.6.4, após baixar as bibliotecas e verificar o programa, nas duas versões aparecem o mesmo erro, gostaria de saber se com algum de vocês ocorreu este erro e se poderia me ajudar. Obrigado.

    Descrição do erro:

    Datalogger_com_RTC_3231.cpp.o: In function `printDateTime(unsigned long)’:
    C:UsersJohn LenonDocumentsProgramas para projetosArduinoarduino-1.0.4-windowsarduino-1.0.4/Datalogger_com_RTC_3231.ino:85: undefined reference to `monthShortStr(unsigned char)’

    1. John Lenon, eu estava tendo esse mesmo problema, daí baixei a IDE 1.6.6 e funcionou normalmente.

  44. Boa Tarde!
    Será que vocês poderiam me ajudar ?

    Criei um circuito com arduino e ldr, e gostaria de salvar o tempo que o led acende e printar na tela.

    Como faço a programação ?

    Estou usando essa programação

    //Sensor de luz

    int ledPin = 7; //Led no pino 7
    int ldrPin = 0; //LDR no pino analígico 8
    int ldrValor = 0; //Valor lido do LDR

    void setup() {
    pinMode(ledPin,OUTPUT); //define a porta 7 como saída
    Serial.begin(9600); //Inicia a comunicação serial
    }

    void loop() {
    ///ler o valor do LDR
    ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023

    //se o valor lido for maior que 500, liga o led
    if (ldrValor>= 800) digitalWrite(ledPin,HIGH);
    // senão, apaga o led
    else digitalWrite(ledPin,LOW);

    //imprime o valor lido do LDR no monitor serial
    Serial.println(ldrValor);
    delay(100);
    }

  45. Filipe,
    Estou gostando muito do material do seu site, no caso o arquivo foi salvo em um txt no micro SD, conseguiria acessar o SD do arduino como um servidor FTP e buscar o arquivo? Como eu faria para mudar o clock do meu datalogger via PC? No caso criaria uma variável do inteira e escreveria nela via tcp/IP.

  46. Bom dia Adilson e galera!
    Uma dúvida básica de um iniciante: estou desenvolvendo um programa parecido com este do datalogger só que meu tempo de espera entre leituras é de 30 minutos e estou usando a função delay ( ) para contagem deste tempo. Como faço para o sistema economizar energia durante este longo tempo de espera? Existe algo mais eficiente, em termos de gasto de energia da fonte, que a função delay ( )?
    Obrigado,
    Wilson

  47. No meu apareceu um erro no código setSyncProvider(RTC.get)..
    Você saberia me dizer como coloco a data, hora e temperatura em um módulo matriz de led, para que possa aparecer no led letreiro esses dados?

  48. Boa noite, gostaria de saber a possibilidade de pegar os dados do display ou seja a temperatura e a umidade e jogar para um arquivo no computador em formato de texto.

    1. Bom dia Alex,

      Você pode fazer isso com o Processing.. dê uma olhada neste link: http://electronics.stackexchange.com/questions/54/saving-arduino-sensor-data-to-a-text-file

      Abraço!

      Adilson – Equipe MakerHero

  49. Eu consigo criar um arquivo do tipo tabela de excel para jogar os dados no excel e etc?

    1. Oi Jonathan,

      Você pode importar os dados diretamente no excel, como texto.

      Abraço!

      Adilson – Equipe MakerHero

  50. é possivel usando lcd visualizar os dados armazenados no cartao sd?

  51. Estava utilizando esse tutorial, estava tudo funcionando até poucos dias agora da este erro :

    exit status 1
    ‘setSyncProvider’ was not declared in this scope

    por favor preciso de ajuda, se possível responder

    1. Boa tarde Alexandre,

      Qual versão da IDE você está usando ? Aqui com a 1.6.10 dá o mesmo erro. Utilizando uma IDE anterior (1.6.6, por exemplo), compila normalmente.

      Tente compilar usando uma versão mais antiga da IDE, por favor. Vou tentar descobrir se há algum conflito de bibliotecas com a IDE mais nova.

      Abraço!

      Adilson – Equipe MakerHero

      1. Aqui está dando o mesmo erro. Estou usando a IDE 1.6.13. Vou verificar se o mesmo ocorre com uma IDE mais antiga

  52. Estou com dificuldades para visualizar o circuito com o divisor de tensão com resistores. Vocês poderiam me mandar uma imagem de como ficaria o circuito?

    Paulo Henrique Ribeiro Pivoto
  53. preciso ligar um anemômetro com datalogger, tem alguma dica de como posso fazer ??

  54. Boa noite gostaria de saber se tem algum tutorial deste para o Arduino mega 2560, pois estou com dificuldades para utilizar este módulo nesta placa.

  55. Boa noite,
    Nunca usei Arduino e nunca trabalhei com cartão SD e então eu gostaria de saber se posso gravar dados (total de 12 bytes) a cada 5ms no cartão SD.
    Minha intenção é usar o MEGA 2560.
    obrigado,

  56. Gostaria de saber se há alguma forma de ler os dados do arquivo através do Arduino, depois de salvo no cartão SD.

  57. Ola! no meu projeto estou o pino 12 e 13 ( não tem como alterar), neste caso tem como alterar para outros pino tipo o pino 7 e 6 que também é digital ? se sim como faço essa alteração?

  58. Preciso de um projeto desse pra registrar data e hora no cartão SD quando aperta em um botao gostaria do código e esquema se possivel

  59. Cara preciso de um código pra está função quando aperta um botao ele registrar a data e hora e salvar no cartão SD

  60. Bom dia, alguém poderia me explicar como funciona a biblioteca Streaming?

    1. Bom dia Francisco,

      Nesse link você tem maiores informações sobre o funcionamento da biblioteca: http://arduiniana.org/libraries/streaming/

      Abraço

      Adilson – Equipe MakerHero

  61. Olá. Gostaria de uma sugestão : Como posso fazer para implementar um higrometro e um ldr, onde deverei alterar para fazer a gravação dos dados do mesmo.

  62. Boa tarde,

    eu consigo colocar mais dois circuitos como este em apenas um Arduino? Estou precisando fazer a medição de 3 pontos distintos ao mesmo tempo e adquirir 3 placas Arduino ficaria muito custoso.

    Obrigado

  63. Olá Adilson, seu artigo me ajudou muito. Eu quero agora colocar mais dados de sensores analogicos e digitais, na porta do arduino. Aonde eu insiro o código para ler as portas e gravar no arquivo txt?

  64. Boa tarde,

    Poderia me informar se essa programação é compatível com o RTC DS1307 ? Seria necessário muitas modificações no programa ?

  65. Boa noite,

    Qual programa você utiliza para fazer o desenho dos circuitos?

  66. Ok Adilson! Excelente!! Gosto muito e sempre acompanho o blog de vcs,
    Muito obrigado pelo esclarecimento

  67. Por curiosidade, no que e, como seria aplicado esse circuito/projeto, por gentileza?
    Obrigado

    1. Bom dia Daniel,

      Geralmente em algum circuito do qual você precise guardar os dados para gerar algum relatório posterior. No nosso post, por exemplo, você pode jogar os dados no Excel e analisar como foi a variação de temperatura em um determinado período de tempo, determinar máximas, mínimas, médias, etc. Você também pode gravar no SD os dados de um alarme, saber quando foi aberta ou fechada uma porta, acionado um sensor, apenas citando algumas aplicações mais simples.

      Abraço!

      Adilson – Equipe MakerHero

      1. olá!

        Gravar os dados de um alarme me interessou. Seria possível fazer um arduino nano + hc-sr04?

        Att

      2. Boa tarde,
        estou com um problema e queria ajuda em relação a exatamente nisso que você citou aqui. Eu extraí uma tabela de um logger, que conta quanto tempo fica ligada uma determinada lâmpada, dentro de um determinado período. Porem existe variações e intervalos de tempo. E gostaria de contabilizar com formulas na tabela o tempo total e também o tempo das variações de intervalo. consigo progrmar isso no VBA no excel? ou com alguma fórmula?

  68. Ele executa de 1 em 1 segundo, certo?
    Se eu quiser que execute de 2 em 2 segundo é só colocar um delay de 2 segundos no final do Loop?

  69. Boa tarde,

    Gostaria de alterar o tempo de gravação, para um valor abaixo de 1 minuto, porém não tenho certeza se entendi o código, ele pega a variável de segundos e toda vez que ela é igual a zero grava os dados no cartão? Gostaria de alterar para gravar a cada 20 seg por exemplo.

    1. Bom dia Bruno,

      Isso mesmo. Cada vez que o valor de segundos chega a 0, ele grava os dados no cartão. Para fazer isso a cada 20 segundos, você pode implementar um contador no programa e fazer o mesmo teste da linha 66.

      Abraço

      Adilson – Equipe MakerHero

      1. Boa tarde.

        Existe a possibilidade de se gravar no cartão o tempo de sessão de uso projeto. Isto é ao invés de registrar os dados de segundo em segundo, ser registrado o tempo de quando o projeto/arduino foi ligado e quando ele foi desligado. Registrando assim as sessões uso?

        Obrigado

  70. Adilson,
    tentei comprar o DS3231 mas esta esgotado, tem previsão de quando chega?
    abraço!

    1. Vc não tem um seu q não esteja usando pra liberar pra mim pra aproveitar o frete com outras coisas q estou comprando?

    2. Bom dia,

      Estamos aguardando a chegada de um novo lote. A previsão de entrega é de 30 dias.

      Abraço

      Adilson – Equipe MakerHero

      1. blza, ja voltou a ficar disponível lá e já comprei o kit q eu precisava!
        obrigado pela atenção amigo!

        1. Onde está o sensor de Temperatura? Como ele está medindo a temperatura?

  71. Estou tendo dificuldades para calcular um divisor de tensão de 5 para 3.3v . O maior valor que consegui foi 2.5V com dois resistores de 1k. Pode me dar uma ajuda?

    1. Bom dia,

      Tente utilizar a calculadora deste link, colocando valores diferentes para os 2 resistores, ex: http://www.arduinoecia.com.br/p/calculador-divisor-de-tensao-function.html

      Use por exemplo, 220 ohms para o R1 e 470 ohms para o R2, que vai gerar algo em torno de 3.4V

      Abraço

      Adilson – Equipe MakerHero

  72. Estou pensando em adicionar nesse projeto um lcd 16×2 mas ambos utilizam a interface I2C. Como posso ligar os dois em uma placa arduino UNO?

    1. Bom dia Breno,

      Na interface I2C você pode utilizar vários dispositivos no mesmo barramento, desde que tenham endereços diferentes.

      Abraço

      Adilson – Equipe MakerHero

  73. Quais os valores dos resistores para o divisor de tensão?

    1. Bom dia,

      Você pode utilizar a calculadora de tensão deste link: http://www.arduinoecia.com.br/p/calculador-divisor-de-tensao-function.html

      Abraço.

      Adilson – Equipe MakerHero