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
Fonte: disponível em http://www.arduinoecia.com.br/2016/02/web-server-esp8266-nodemcu-dht22.html acesso em maio de 2017
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
|
Fonte: disponível em http://www.instructables.com/id/How-to-use-DHT-22-sensor-Arduino-Tutorial/ acesso em maio de 2017
|
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
|
Fonte: disponível
em http://www2.joinville.udesc.br/~i9/2016/01/13/hands-arduino-lcd-real-time-clock-relogio/ acesso em
maio de 2017
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
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.
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.