4 Comentários

Monitoramento de água com IoT - Parte 3

monitoramento de água
Este post faz parte da série Monitoramento de água com IoT. Leia também os outros posts da série:

Esta é a terceira parte da série de artigos que descrevem um projeto de monitoramento de água usando IoT. A série é composta de três artigos, sendo eles: 

  1. Parte 1 - objetiva introduzir o leitor ao que o projeto consiste e em como configurar a comunicação ZigBEE utilizada no projeto;
  2. Parte 2 - visa apresentar a parte bare-metal da solução, com explicações detalhadas do código e conceitos e estratégias de desenvolvimento;
  3. Parte 3 - parte final da série, destinada a explicar em detalhes a parte de Linux Embarcado do projeto e interação com usuário via Internet (aqui o conceito de IoT é dominante).

Este artigo tornou-se viável graças ao apoio da Eletrogate, a qual forneceu o sensor de fluxo de água utilizado no projeto.

Pré-requisitos

Devido à multidisciplinaridade deste projeto, para uma boa compreensão dos conteúdos desta série de artigos são desejados os seguintes pré-requisitos: 

  • Conhecimento básico de Linux Embarcado;
  • Conhecimento de linguagem de programação C;
  • Conhecimento de linguagem de programação Python;
  • Conhecimentos de MQTT (recomendo fortemente a leitura do artigo MQTT e Intel Edison);
  • Conhecimento em desenvolvimento de sistemas embarcados bare-metal (ter noção das principais técnicas e conceitos deste tipo de sistema, tais como: interrupções externas, timers, comunicação serial por interrupção, watchdog timer, etc.).

Sistema Linux Embarcado do projeto

Nesta terceira e última parte da série de artigos, mostramos a parte da solução que usa Linux Embarcado (Intel Edison). Este sistema consiste em um sistema rodando em Linux Embarcado, sendo este responsável por interfacear o usuário final com as medições obtidas na placa com sistema bare-metal, além de acrescentar funcionalidades de alto nível (serão melhor explicadas com o decorrer deste artigo).

Além disso, esta parte do sistema se comunica via MQTT com uma página web, sendo esta a interface com usuário final.

Em diagrama, esta parte do sistema pode ser descrita conforme a figura 1.

monitoramento de água: sistema com linux embarcado
Figura 1 - Diagrama do sistema Linux embarcado do projeto.

As funcionalidades deste sistema são: 

  • Solicitar consumo acumulado e vazão instantânea ao sistema bare-metal;
  • Solicitar versão do firmware do sistema bare-metal;
  • Resetar/zerar consumo acumulado total. Deste modo pode-se medir o consumo acumulado a partir do momento que o usuário desejar;
  • Estabelecer um limite de consumo de água. Se o limite for excedido, um e-mail é enviado ao usuário avisando da situação. Além disso, na interface com o usuário, haverá um aviso que o limite de consumo foi atingido.

Todas as interações com o usuário ocorrerão através de um site / tela no browser, sendo que os dados enviados e recebidos para o sistema utilizarão MQTT (veja este artigo para mais detalhes sobre MQTT).

O que será utilizado para compor o sistema Linux Embarcado?

Os recursos utilizados para compor este sistema estão descritos abaixo: 

Recursos de hardware

O hardware deste sistema consiste em um Intel Edison, uma placa expansora de I/O Arduino Breakout Board e um dongle ZigBEE ligado à porta USB Host da placa expansora.

A Intel Edison consiste em um sistema poderoso, capaz de rodar um sistema operacional Linux (de fábrica, já vem com uma distribuição baseada em Yocto instalada). Possui um hardware muito interessante para suas dimensões físicas (próximas às dimensões de um SD Card) e conectividade WiFi e Bluetooth embutidas, sendo assim uma solução muito boa para sistemas IoT e sistemas stand-alone (sobretudo pelo fato de não possuir interface gráfica, o que significa que o consumo é muito baixo em relação a uma Rapiberry Pi, por exemplo).  Mais informações sobre a Intel Edison podem ser obtidas neste artigo aqui.

Tal sistema possui conectividade Wi-Fi com a internet. Além disso, uma fotne 5V / 1,5A é utilizada para alimentar todo o sistema Linux Embarcado.

Recursos de software

O software do sistema é feito totalmente em Python, dada a maior facilidade de entender o código-fonte final (em relação a um feito em C puro, por exemplo).

Preparando a Intel Edison

Antes de prosseguirmos com o desenvolvimento do sistema em si, precisamos preparar a Intel Edison para se comunicar serialmente com o dongle ZigBEE. Este dongle utiliza um chip FTDI, logo é necessário instalar o driver dele na Intel Edison. Para isto, seguir os passos abaixo:

  1. Certificar-se que a Intel Edison está conectada à internet. Caso estiver utilizando o Wi-Fi do próprio Intel Edison para isto, esta verificação pode ser feita com o seguinte comando:
  2. Serão exibidas todas as ionterfaces de comunicação da Intel Edison, assim se na interface wlan0 estiver um IP associado, a Intel Edison está corretamente conectada à internet;
  3. A configuração do repositório de pacotes conforme este artigo instrui;
  4. Atualizar a lista de pacotes disponíveis com o seguinte comando:
  5. Instalar o driver do chip FTDI com o comando:

     

Após feito isso, coloque na USB Host da Arduino Breakboard o dongle ZigBEE. Aguarde alguns segundos e execute o comando abaixo: 

Este comando mostra todas as interfaces seriais disponíveis. Deverá aparecer uma entrada serial (no meu caso /dev/ttyUSB0) para o chip FTDI.

Além disso, é necessário baixar o pyserial (biblioteca Python para lidar com serial). Para isso, Primeiro baixe o pyserial com o seguinte comando: 

Descomprima o arquivo baixado com o seguinte comando:

E, por fim, execute os comandos a seguir para instalar o pyserial:

Observações gerais sobre a comunicação com sistema bare-metal

Segue abaixo algumas observações gerais sobre a comunicação com o sistema bare-metal: 

  1. Dada a chance de o comando enviado não chegar ao sistema bare-metal (dados corrompidos / perda de integridade dos dados, interferência, etc.), são feitas tentativas seguidas de envio do comando (até o sistema bare-metal responder corretamente, ou seja, o checksum dos dados recebidos coincidir com o calculado, garantindo assim a integridade dos dados recebidos);
  2. Cada tentativa de envio do comando tem um timeout de 1 segundo;
  3. Não há fila de transmissão e recepção.

Código-fonte

O script Python pode ser divido em duas partes distintas: contínua e sob demanda. A parte contínua roda "sem parar" (enquanto o script Python estiver em execução), enquanto a parte sob demanda responde a comandos enviados via MQTT da página de monitoramento.

A parte contínua faz a leitura das informações de vazão, consumo acumulado e versão de firmware do sistema bare-metal de cinco em cinco segundos (em outras palavras, consiste no laço principal).

Após a leitura, estes dados são enviados via MQTT para a página de monitoramento. Além destes dados, são enviados também a meta estabelecida de consumo e o status do consumo (se excedeu a meta de consumo de água ou não) e esta parte também é a responsável por enviar o e-mail de aviso ao usuário caso o consumo acumulado de água exceder a meta estipulada. 

A parte sob demanda é responsável por responder comandos MQTT recebidos da página de monitoração. Seguem esses comandos: 

  • Reset de consumo acumulado;
  • Início de calibração;
  • Finalização de calibração;
  • Requisição de informações (vazão, consumo acumulado e versão de firmware do sistema bare-metal, meta configurada e status de consumo de água);
  • Envio de meta de consumo de água e e-mail para avisar usuário em caso de a meta ser excedida.*

*Neste caso, ambos os dados são gravados em arquivos texto na Intel Edison. 

Será necessário ter uma conta de e-mail YahooMail, pois foi o único e-mail grátis que não barrou e-mail disparado pelo Python (não consegui fazer o mesmo com o GMail). Portanto, crie uma conta no YahooMail e preencha os dados de login e senha no código antes de rodar o script.

Abaixo, segue o código-fonte completo:

Ou, se preferir, baixe o arquivo com o script Python clicando [wpfilebase tag=fileurl path='posts/MonitoramentoAguaIOTPython.zip' linktext='aqui' /].

Execução do script Python

Durante a execução, no terminal de dados conectado à Intel Edison (via USB-Serial ou SSH) serão escritas algumas informações gerais da comunicação: recepção de dados solicitados da placa bare-metal (incluindo se o checksum "bateu" ou não, para se ter uma noção da qualidade da comunicação sem fio), leitura da meta configurada e alertas de entrada e saída do modo de calibração.

O script Python pode ser executado da forma clássica (comando: python AguaIOT.py). Porém, para uma aplicação embarcada que deve ser alimentada e sair funcionando, seria muito útil a execução automática do script ao inicializar a placa, não é mesmo?

Para isso, basta seguir um tutorial clicando aqui

Inteface Web para monitoramento de água

O código-fonte completo da interface Web pode ser baixado clicando [wpfilebase tag=fileurl path='posts/Sistema online.rar' linktext='aqui' /].

Esta consiste de um site simples, com alguns arquivos .js e imagens (ou seja, pode ser hospedado em qualquer servidor grátis por aí ou, até mesmo, rodar na sua própria máquina). Este se comunica via MQTT com um broker, assim como a Intel Edison. Deste modo, a Intel Edison e a página Web podem estabelecer comunicação. E o melhor: esta página roda em tablet, PC e smartphone, independente da "religião" (fãs das maçãs, robozinhos verdes e janelas agradecem)! Enfim, qualquer coisa que tenha um navegador com suporte a JavaScript consegue acessar. Em suma, trata-se de uma interface de usuário realmente portável.

Na figura 2 pode-se ver a tela de interface com usuário.

monitoramento de água: sistema web com IoT
Figura 2 - Screenshot do sistema web de monitoramento de água.

Este sistema pode ser acessado online também. Para isto, clique aqui.

Vídeo - Sistema completo

Um vídeo do sistema completo funcionando pode ser visto abaixo:

The end of the beginning - Considerações finais e possibilidades de expansão

Este sistema foi construído com o intuito de monitoramento inteligente de água utilizando conceitos de IoT, porém isto não pára por aqui.

Conforme a arquitetura de comunicação entre Intel Edison e sistema-bare metal adotado, sobretudo a topologia de comunicação (em estrela), com poucas modificações (no protocolo de comunicação) é possível colocar mais módulos sendo lidos. Logo, é possível controlar periféricos ou ler o consumo de energia remotamente, via Internet, adicionando um módulo/sistema bare-metal para cada funcionalidade extra. Portanto, eu gostaria muito que este projeto servisse de base para projetos maiores, com mais medições e controles via IoT sendo usados. Afinal, tudo evolui, certo?

Como sugestões de implementações futuras / sistemas bare-metal a serem acoplados no sistema, seguem: 

  • Medição de consumo de energia elétrica;
  • Controle on/off e monitoramento de cargas (lâmpadas, irrigadores, eletrodomésticos, etc.);
  • Monitoramento de temperatura em diferentes ambientes;
  • Monitoramento de poluição sonora em diferentes ambientes;
  • Monitoramento de consumo de água em vários locais diferentes de uma mesma planta, como o caso de um hotel, por exemplo;
  • Monitoramento de consumo de água potável em bebedouros (para fins de se ter uma média de consumo de água por período ou por consumidor);
  • ...E por aí vai!

Ou seja, este é o fim desta série, mas espero que não seja o fim de projetos utilizando os conceitos e sistemas aqui apresentados.

Agradecimentos

Sobre a realização desta parte do projeto, eu gostaria de agradecer ao Cleiton Bueno pela ajuda nas dúvidas e melhorias no script em Python construído.

Outros artigos da série

<< Monitoramento de água com IoT - Parte 2
Este post faz da série Monitoramento de água com IoT. Leia também os outros posts da série:
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Internet Das Coisas » Monitoramento de água com IoT - Parte 3
Talvez você goste:
Comentários:

4
Deixe um comentário

avatar
3 Comentários
1 Respostas
0 Seguidores
 
Discussão de maior alcance
Discussão mais quente
3 Autores de comentários
Matheus Schlosser BassoPedro Henrique BertoletiJoão Victor Paulo SilvaMONITORAMENTO DE ÁGUA VIA INTERNET « Revista In The Mine Comentários recentes
  Notificações  
recentes antigos mais votados
Notificar
Matheus Schlosser Basso
Visitante
Matheus

Olá! Gostaria de saber se o dongle zigbee é compatível com a minibreakout board se eu usar um conversor usb -> microusb

João Victor Paulo Silva
Visitante
João Victor Paulo Silva

Parabéns novamente pelo artigo, pretendo implementar a mesma solução porém utilizando ESP8266 e Raspbery. Esse artigo ajudou a esclarecer diversas dúvidas e ter algumas idéias e com certeza deverá aparecer nas referências do projeto.

Pedro Henrique Bertoleti
Visitante
phfbertoleti

João, muito obrigado!

Fico feliz que você curtiu a série e que irá utilizar os conceitos aqui apresentados. É gratificante saber que este projeto pode inspirar outros!

Séries



Outros da Série

Menu