25 novembro 2018

Importando os dados do Data logger em uma planilha

A algum tempo atrás (um bom tempo, na verdade), escrevi este post aqui sobre Como usar o Data logger Shield com RFID, armazenando os dados lidos do sensor RFID em um arquivo texto. Hoje vamos ver como usar esse mesmo shield para coletar os dados de um sensor de temperatura e importá-los em uma planilha.

Arduino Data Logger Shield com DHT11

O procedimento que vamos apresentar aqui pode ser testado com outras versões do shield, ou até mesmo com módulos cartão SD. O processo de captura dos dados e gravação no cartão é o mesmo.

O data logger shield Arduino


Vamos apenas fazer um resumo rápido do  Data Logger Shield Arduino, que é uma placa com slot para cartão SD, um botão de reset, suporte para bateria, leds indicadores de funcionamento e uma pequena área de prototipagem, caso você queira montar um projeto de forma permanente:

Data Logger Shield para Arduino

A placa tem um chip RTC (Real Time Clock ou Relógio de Tempo Real) bem conhecido, o DS1307, que fornece as informações de data e hora, básicas em qualquer projeto de data logger.

Usando o data logger com sensor de temperatura DHT11


Nesse teste vamos usar o datalogger com Arduino Uno, lendo e armazenando os dados de um dos sensores mais comuns: o sensor de temperatura DHT11.

Vamos conectar o sensor de temperatura no pino analógico A0 do Arduino, conforme a imagem abaixo:

Circuito Arduino Uno Datalogger Shield e DHT11

No slot para cartão SD, coloque um cartão formatado com FAT32.

Programa Arduino Datalogger com DHT11


Vamos utilizar a biblioteca DHT11, que você pode baixar à partir da própria IDE do Arduino, em Sketch -> Incluir Bibliotecas -> Gerenciar bibliotecas. Procure por DHT11 e selecione a biblioteca DHT Sensor by Adafruit, clicando em Instalar:

Biblioteca DHT11 Adafruit Arduino
 
Faça o mesmo procedimento para a biblioteca RTCLib, também da Adafruit:

Biblioteca RTCLib Adafruit

No programa, vamos ler a hora do DS1307, depois as informações de temperatura e gravar isso no arquivo dados.csv. Essa leitura será feita a cada 10 segundos nos nossos testes, mas altere a linha 90 do programa para definir o intervalo de medição de sua preferência:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//Programa: Data logger com sensor de temperatura DHT11
//Autor: Arduino e Cia

#include "RTClib.h"
#include "DHT.h"
#include <SD.h>

//Pino CS do cartao SD
int Pino_CS = 10;

//Definicoes do sensor de temperatura DHT11
#define DHTPIN A0 //Pino de conexao
#define DHTTYPE DHT11 //Tipo de sensor
DHT dht(DHTPIN, DHTTYPE); //Cria objeto DHT

RTC_DS1307 rtc;
File file;

void setup()
{
  Serial.begin(57600);
  Serial.println("Data logger com sensor de temperatura DHT11");
  Serial.println();
  //Inicia o cartao SD
  Serial.println("Iniciando cartao SD...");
  if (!SD.begin(Pino_CS))
  {
    Serial.println("Falha na inicializacao do SD!");
    return;
  }
  Serial.println("Cartao SD iniciado. OK");
  Serial.println();

  //Verifica as condicoes do RTC
  if (! rtc.begin())
  {
    Serial.println("RTC nao encontrado!");
    while (1);
  }
  if (! rtc.isrunning())
  {
    Serial.println("RTC nao operante!");
    //A linha abaixo ajusta o RTC com a data e hora do momento da compilacao
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    //A linha abaixo permite ajustar manualmente a data e hora do RTC
    //Formato: DateTime(ano, mes, dia, hora, minuto, segundo)
    //rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  //Inicializa o DHT11
  dht.begin();
}

void loop(void)
{
  //Le as informacoes da temperatura
  float t = dht.readTemperature();
  //Le as informacoes do RTC
  DateTime now = rtc.now();
  //Serial monitor informacoes de hora
  Serial.print(now.hour() < 10 ? "0" : "");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute() < 10 ? "0" : "");
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second() < 10 ? "0" : "");
  Serial.print(now.second(), DEC);
  Serial.print(" ");
  Serial.print("Temperatura: ");
  Serial.println(t, 0);
  
  //Gravacao do cartao
  //Abre arquivo no SD para gravacao
  file = SD.open("dados.csv", FILE_WRITE);
  //Grava os dados no cartao SD
  file.print(now.hour() < 10 ? "0" : "");
  file.print(now.hour(), DEC);
  file.print(':');
  file.print(now.minute() < 10 ? "0" : "");
  file.print(now.minute(), DEC);
  file.print(':');
  file.print(now.second() < 10 ? "0" : "");
  file.print(now.second(), DEC);
  file.print(",");
  file.print(t, 0);
  file.println();
  //Fecha arquivo
  file.close();
  //Delay ate a proxima leitura
  delay(10000);
}

Se você acompanhar o processo no Serial Monitor, verá uma tela como essa:

Data logger Serial Monitor

E abrindo o arquivo dados.csv em um editor de textos comum, verá os dados armazenados no formato abaixo separado por vírgulas, característico de um arquivo CSV:

Arquivo CSV Datalogger

Para facilitar o processo de importação, coloquei apenas a hora e o valor da temperatura que foi lida naquele momento. Você pode colocar também a data com dia, mês e ano, além da umidade medida pelo DHT11.

Importando os dados para o Google Sheets


O processo de importação do arquivo CSV para o Google Sheets (ou Planilhas Google, em português) é bem simples, e em poucos passos você terá um gráfico com os dados coletados. Antes de mais nada, retire o cartão SD do data logger e coloque no seu computador.

Crie uma nova planilha no Google Drive, dando a ela um nome qualquer. No menu da planilha, clique em Arquivo e em seguida em Importar:

Google Sheets - Importar

Na janela que abrirá em seguida, selecione Upload e arraste para essa janela o arquivo dados.csv:

Importar arquivo

Após o upload, será aberta uma tela de opções perguntando se vc deseja criar uma nova planilha ou substituir essa já existente. Selecionamos as opções abaixo:

Importação - Formato do arquivo

Clique em Importar Dados e a sua tela ficará mais ou menos assim:

Dados importados na planilha Google Sheets

Para gerar o gráfico, selecione todos os dados das duas colunas....

Gerando o gráfico

E em seguida clique em Inserir -> Gráfico:

Inserir gráfico

Pronto. Seu gráfico foi gerado!

Google Sheets - Gráfico Datalogger


Como comentei acima, este é um gráfico bem simplificado que usa apenas os dados de hora e temperatura, mas você pode inserir outros dados no arquivo CSV, separando o gráfico por dia, mês, ano, etc, de acordo com as necessidades do seu projeto.

6 comentários:

  1. Parabéns pelo post está bem explicado.
    Percebi que utilizou um delay de 10 s e pergunto: como salvar no sdcard apenas de 10 em 10 min, estou trabalhando em uma estação meteorológica e os dados são visualizados pelo público de de 10 em 10s ? Grato

    ResponderExcluir
    Respostas
    1. Oi Carlos,

      Obrigado! Para salvar de 10 em 10 minutos, substitua o comando delay(10000) na linha 90 por delay(600000).

      Abraço!

      Adilson

      Excluir
  2. Utilizei isso para salvar muitas horas dos 16 dados captados para meu TCC. Boa dica para quem precisar salvar dados experimentais.

    ResponderExcluir
  3. Olá, Estou terminando um trabalho de TCC na área de arduino e preciso do nome de quem publica as postagens, se possível mandar um e-mail para contato para que possa obter dados e colocar como referências, Obrigado

    ResponderExcluir
    Respostas
    1. Oi Alvaro!

      Obrigado. Por favor entre em contato utilizando o formulário de contato no lado direito da página ("Fale com o administrador"). Conversamos por email.

      Abraço!

      Adilson

      Excluir