Como fazer um Datalogger com Arduino 57

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.

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 ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP !

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

57 Comentários

  1. 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 FILIPEFLOP

  2. 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 FILIPEFLOP

  3. 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 FILIPEFLOP

  4. 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 FILIPEFLOP

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

  5. 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 FILIPEFLOP

      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

  6. 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?

  7. 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 FILIPEFLOP

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

  9. Boa noite,

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

  10. Boa tarde,

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

  11. 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?

    Estevão Cover De Santi
  12. 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

  13. 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.

  14. 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 FILIPEFLOP

  15. 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

  16. 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

  17. 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?

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

  19. 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,

  20. 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.

    Gustavo Jean Menegazzo
  21. preciso ligar um anemômetro com datalogger, tem alguma dica de como posso fazer ??

    Felipe Pegoraro Doll
  22. 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
  23. 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 FILIPEFLOP

      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

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

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

    Jonathan Machado De Souza
    1. Oi Jonathan,

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

      Abraço!

      Adilson – Equipe FILIPEFLOP

  26. 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 FILIPEFLOP

  27. 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?

    JOSÉ ADENILSON PESSOA
  28. 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

  29. 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.

  30. 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);
    }

  31. 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.

  32. 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”);

    ^

  33. 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,

  34. 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: http://blog.filipeflop.com/modulos/cartao-sd-com-arduino.html . Aqui o artigo sobre o Bluetooth: http://blog.filipeflop.com/wireless/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

  35. 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?

  36. 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?

  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. 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.

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