quinta-feira, 24 de agosto de 2017

Protótipo Datalogger usando ARDUINO e NODEMCU



Internet das coisas, Arduino e NODEMCU

O Arduino, a partir de 2005, tornou-se a principal ferramenta de makers e hobbistas para a o prototipação de projetos eletrônicos, conforme afirma Irving(2016).  Em meados de 2014 surgiu um concorrente à altura, que alguns afirmam até, muito superior: O ESP8266, um módulo eletrônico menor, mais veloz, potente e mais barato do que o Arduino, além de já possuir conexão Wi-Fi.
Esse módulo possibilita os mais diversos projetos conectados à Internet e é possível programá-lo usando a mesma IDE do Arduino. O potencial do ESP é tão grande que ele venceu o prêmio de hardware do ano (2015/16) pelo IoT Awards (IRVING:2016).


Funcionamento do dispositivo

O dispositivo desenvolvido para coleta e armazenamento dos dados é composto de um hardware controlador, sensor de umidade e temperatura e um software embarcado. Ele é capaz de medir a temperatura e umidade do ar , calcular o ponto de orvalho, e registar a cada intervalo programável ( de 2 a 15 minutos),  a data,  hora e  temperatura, umidade e o ponto de orvalho no cartão tipo SD. O dispositivo transmite os dados para uma plataforma gratuita disponível no site www.thingspeak.com, em um canal criado para este fim, permitindo o download para uso em planilhas. Também é possível o acesso aos dados através do cartão SD. Uma variação do protótipo traz um display para acompanhamento das medidas, mantendo as outras funcionalidades. É necessária uma rede wifi com acesso à internet para o pleno funcionamento do protótipo. ( Figura 2 - placa utilizada – NODEMCU ESP8266 ):



Figura 2 – modulo NODEMCU ESP8266







Materiais e Métodos

Este estudo caracteriza-se principalmente como experimental, com a realização de montagens e testes com dispositivos programáveis e sensores. Também é um estudo com base em revisão bibliográfica de artigos e textos publicados sobre o assunto. Foi desenvolvido um protótipo, microcontrolado,  com o objetivo de coletar e armazenar dados meteorológicos, sendo escolhida a plataforma de desenvolvimento Arduino associado ao NODEMCU ESP8266, que inclui uma placa com entradas e saídas digitais e analógica. Do lado do software, foi utilizada a linguagem C do ambiente Arduino, que é ligeiramente diferenciada para esta plataforma.
O material utilizado para a construção do protótipo pode ser conferido no quadro 1 abaixo:

Quadro1 – material utilizado para o protótipo

Fonte: os autores

Os itens relacionados no quadro1 podem ser adquiridos em lojas espalhadas pelo país, através dos seus sites, como Filipeflop, Arduinolandia, Usinainfo, dentre outras, ou ainda disponíveis no Mercadolivre, apresentando facilidade de  acesso e baixo custo.

Na figura 3 a seguir pode-se ter uma visão geral do protótipo aberto, com as peças interligadas. Pode- se observar que as peças são pequenas e a placa principal (NODEMCU) mais ainda.




Figura 3 – protótipo do data logger com suas ligações gerais

Fonte: os autores


A coleta dos dados de umidade e temperatura é realizada através de sensor de umidade e temperatura modelo DHT22 ( figura 4 ) , um sensor de custo relativamente baixo e boa precisão. Após a coleta da temperatura e umidade, faz-se o cálculo do ponto de orvalho, através de uma equação de natureza empírica, escrita em linguagem C abaixo:


#include "DHT.h"
..
float POC3 = 234.175;
float POC2 = 17.08085;
..
h = dht.readHumidity();                       // leitura da humidade através de uma função
temp = dht.readTemperature();           // leitura da temperatura

calc =  ( POC3 * ( log (h / 100) + (POC2 * temp) / (POC3 + temp ) ) ) / ( (POC2 - log (h / 100) - (POC2 * temp) / (POC3 + temp) ));




O sensor requer a ligação apenas de três pinos: o VCC, ligado em um pino de 5v do NODEMCU, o GND ligado em um pino GND do NODEMCU e o pino 2 ( DATA ) ligado à uma das portas digitais da placa.

Figura 4 – sensor de umidade de temperatura DHT22



A fim de garantir os registros de data e hora das leituras, optou-se pelo uso de um módulo de relógio mantido por bateria, que mesmo em situações de queda de energia, garante a precisão da data e hora. Foi escolhido o DTC DS3231 por seu baixo custo e facilidade de uso e acesso. ( Figura 5 )

Figura 5 – modulo DTC DS3231



A obtenção das informações atualizadas de data, hora e minuto, podem ser realizadas através de função específica como apresentado abaixo.

#include <DS3232RTC.h>
#include <TimeLib.h>

 char dados[100];
 time_t t;
  ..
  t = now();
  ..
 sprintf (dados, "#1;%02d/%02d/%04d;%02d:%02d:%02d;U2;%02d.%02d;T2;%02d.%02d;*C;PO2;%02d.%02d;*C;PO2-T2;%02d.%02d;*C\n", (int)day(t), (int)month(t), (int)year(t), (int)hour(t) , (int) minute(t), (int)second(t), (int) h, (int) ( h * 100) % 100,  (int) temp, (int) (temp * 100) % 100, (int) calc, (int) (calc * 100 ) % 100 , (int) diftemp, (int) (diftemp * 100) % 100 );


A gravação dos dados, um requisito importante para um data logger, é feita através de um módulo de cartão SD ou micro SD. Este tipo de dispositivo oferece uma boa segurança de funcionamento, baixo custo e facilidade de acesso aos dados. A figura 6 abaixo apresenta um modelo SD, equivalente ao micro SD nas ligações:

Figura 6 – modulo cartão SD ou Micro SD

Fonte: disponível em http://blog.filipeflop.com/modulos/cartao-sd-com-arduino.html acesso em maio de 2017

As ligações ao NODEMCU podem ser feitas conforme apresentadas abaixo:

#define CS_PINO   15                        // pino D8 - pino CS do SD card
#define SCK_PINO  14                      // pino D5 - pino SCK
#define MOSI_PINO 13                     // pino D7 - pino MOSI
#define MISO_PINO 12                     // pino D6 - pino MISO

A gravação é realizada a partir de uma função ( grava() ), que recebe como parâmetros, o nome do arquivo, e os dados ( através de um pointer  *dados ), que foram previamente formatados:

void grava( char *dados, char *nome)
{
  File dataFile;
  Serial.println( nome );
  dataFile = SD.open(nome, FILE_WRITE) ;
  if ( !dataFile )
  {
    Serial.print( "Erro de abertura do arquivo\n");
erros++;
    errosd++;
    delay(1000);
  }
  else
  {
    dataFile.print (dados);
  }
  dataFile.close();
}


Os dados coletados são registrados em cartão de memória tipo MicroSD, muito populares nos smartphones. Além disto, para permitir monitoramento em tempo real, além de maior probabilidade de registro dos dados ( redundância: os mesmos dados gravados são encaminhados para outro dispositivo/mecanismo) estes mesmos dados são transmitidos para um site denominado Thinkspeak ( www.thinkspeak.com ), gratuito para certos volumes de dados. Abaixo pode ser conferido o trecho do software para a transmissão dos dados de umidade, temperatura, ponto de orvalho, diferença entre temperatura e ponto de orvalho e tamanho do arquivo, para o canal do site www.thingspeak.com .

void sendhtp(float humd, float temp, float po, float diftpo, unsigned long tam)
{
  char chumd[10],  ctemp[10], cpo[10], ctam[10], cdif[10];
  WiFiClient client;

  sprintf ( chumd,  "%02d.%02d",  (int) humd, (int) (humd * 100) % 100 );
  sprintf ( ctemp,  "%02d.%02d",  (int) temp, (int) (temp * 100) % 100 );
  sprintf ( cpo,  "%02d.%02d",  (int) po, (int) (po * 100) % 100 );
  sprintf ( cdif,  "%02d.%02d",  (int) diftpo, (int) (diftpo * 100) % 100 );
  sprintf ( ctam, "%08d",  (unsigned long) tam);

  if (client.connect(server, 80))     // use ip 184.106.153.149 ou api.thingspeak.com
  {
    Serial.println("WiFi Conectado ");
    String  postStr = apiKey1;
    postStr += "&field1=";
    postStr += chumd ;
    postStr += "&field2=";
    postStr += ctemp ;
    postStr += "&field3=";
    postStr += cpo ;
    postStr += "&field4=";
    postStr += ctam ;
    postStr += "&field5=";
    postStr += cdif ;
    postStr += "\r\n\r\n";

    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + apiKey1 + "\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("\n\n");
    client.print(postStr);

  }   //end if
  sent++;
  client.stop();
}                //    final da função de envio dos dados


Resultados

Os principais pontos a destacar como resultados do desenvolvimento do protótipo foi a sua versatilidade, aliado ao baixo custo e confiabilidade. Conforme se pode observar na figura 7, os dados de monitoramento ficam disponíveis em tempo real, através de um endereço de internet, com acesso público ou privado ( configurável ), permitindo-se o compartilhamento da informação para tomada de decisões importantes.
Na figura 7 são apresentadas as telas referentes à temperatura, umidade, tamanho do arquivo gravado no micro-sd, ponto de orvalho calculado e a diferença entre a temperatura e o ponto de orvalho.
Com estes dados, é possível identificar pontos de máximos e mínimos, médias, comportamento e até mesmo situação de falha na gravação dos dados no cartão micro-sd, quando o arquivo cessa o seu crescimento, por exemplo.

Figura 7 – telas públicas de monitoramento dos dados do protótipo

Fonte: os autores. Disponível em https://thingspeak.com/channels/229909

Com acesso físico ao cartão SD, os dados focam disponibilizados por dia ( um arquivo por dia de coleta ), no formato CSV, compatível com a maior parte das planilhas eletrônicas existentes, permitindo-se o tratamento estatístico que se quiser implementar.


Considerações finais

O desenvolvimento deste protótipo propiciou resultados interessantes relacionados à aprendizagem relativa à medidas meteorológicas com ampla aplicação na engenharia, como é o caso da umidade, temperatura e do ponto de orvalho. Também foi possível identificar em trabalhos publicados em diversas partes do país e do mundo, o interesse e empenho de pesquisadores e estudantes no sentido de projetar equipamentos de baixo custo com o objetivo de registrar dados e propiciar estudos minuciosos ( data loggers ). Neste sentido, percebe-se a importância da plataforma aberta Arduino e assemelhados, com crescimento da placa NODEMCU, com recursos embarcados para iOt ( internet das coisas ). Assim, conseguiu-se o desenvolvimento e experimentação de um data logger de baixo custo, flexível e com muitas possibilidades de aplicações em organizações empresariais dos mais diversos tipos e tamanhos. Foi possível identificar um enorme potencial técnico para implementação de soluções de monitoramento em tempo real, associados à melhoria de processos e gestão da qualidade.




Referências


ARDUINO & CIA. Disponível em http://www.arduinoecia.com.br/2016/02/web-server-esp8266-nodemcu-dht22.html acesso em maio de 2017.

BIODIVERSITY DATA JOURNAL. Open source data logger for low-cost environmental monitoring. Disponível em  https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4030251/ acesso em maio de 2017.

FARIA, W.C. et alii. Sistema Open-Source para coleta e armazenamento de dados meteorológicos. Incitel 2014 – Congresso de Iniciação Científica do Inatel – Santa Rita do Sapucaí, Disponível em http://www.inatel.br/incitel/anais-incitel/incitel-2014-1 acesso em maio de 2017.

FILIPEFLOP (Blog). Disponível em http://blog.filipeflop.com/modulos/cartao-sd-com-arduino.html acesso em maio de 2017.

NÚCLEO ESTUDANTIL DE INOVAÇÃO TECNOLÓGICA – I9. Disponível em http://www2.joinville.udesc.br/~i9/2016/01/13/hands-arduino-lcd-real-time-clock-relogio/ acesso em maio de 2017.

Revista Brasileira de Engenharia Agrícola e Ambiental.

TALAIA, M.; VIGÁRIO, C. Temperatura de ponto de orvalho: um risco ou uma necessidade. Disponível em http://hdl.handle.net/10316.2/39916 acesso em maio de 2017.

THINGSPEAK. Disponível em www.thingspeak.com acesso em maio de 2017.


IRVING ( Blog ). NodeMCU (ESP8266) o módulo que desbanca o Arduino e facilitará a Internet das Coisas… Disponível em http://irving.com.br/esp8266/nodemcu-esp8266-o-modulo-que-desbanca-o-arduino-e-facilitara-a-internet-das-coisas/ acesso em maio de 2017.