Gerenciador de consumo de energia elétrica e água com sistema supervisório web/remoto – Parte 3

Gerenciador de consumo de energia sistema supervisório
Este post faz parte da série Gerenciador de consumo de energia elétrica e água. Leia também os outros posts da série:

Esta é a terceira parte da série de artigos que descrevem um projeto de um Gerenciador de consumo de energia elétrica e água com sistema supervisório web/remoto. A série é composta de três artigos, sendo eles:

  • Parte 1 – Introduzir o leitor sobre o que consiste o projeto e apresentar o que será utilizado em seu decorrer;
  • Parte 2 – Apresentar o desenvolvimento de hardwares e a montagem dos mesmos;
  • Parte 3 – Abordar sobre o desenvolvimento de software bare metal e a solução remota utilizada, nesse caso um aplicativo mobile Android que gerencia o sistema.

Este artigo tem como base o TCC de Engenharia Elétrica dos alunos da Faculdade Politécnica de Jundiaí, formados em 2014, são eles: Jefferson dos Santos Abrahão, Neandro Anzolini, Sérgio Luiz Marchi e Vinicius de Almeida.

Pré-requisitos

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

  • Conhecimento de linguagem de programação C;
  • Conhecimento em desenvolvimento de sistemas embarcados em geral;
  • Conhecimento de hardware e utilização prévia de Arduino e suas Shields;
  • Conhecimento das variáveis de medição de energia elétrica e consumo de água.

No que consiste esta parte do projeto?

Esta parte do projeto consiste na explanação do software bare metal desenvolvido e da solução encontrada para exibir remotamente os dados.

Visão geral do Software

O software foi desenvolvido através do kit Arduino Mega 2560 e a linguagem de programação utilizada foi C/C++. Basicamente, o software é dividido em duas partes, setup e loop.

O primeiro é responsável pela configuração do hardware e inicialização de parâmetros que serão tratados e utilizados no decorrer do programa, tais como variáveis, memórias, configuração da ethernet, configuração do bluetooth, definição dos GPIOs, entre outros.

O loop é responsável pela execução das ações a serem tomadas pelo software. Neste projeto em específico foi designado que a sequência básica do loop é de execução da tela de inicialização, ou seja, “hello word” do software através de uma mensagem no display. Após essa execução o programa entra em modo de gerenciamento, que nada mais é que a varredura dos sensores conectados ao módulo e envia sequencialmente para a página web, para a serial nativa do Arduino e para o aplicativo android via bluetooth.

Neste estágio de gerenciamento, além de enviar os dados aos periféricos já devidamente calculados, o módulo executa a varredura do teclado. A rotina de varredura do teclado lê cada GPIO referente às teclas e caso alguma tecla seja acionada retorna um valor indicando qual foi acionada. Nesta rotina em específico, caso a tecla ENTRA seja pressionada o módulo sai do modo de gerenciamento e entra no setup. Neste momento até a entrada de algum parâmetro os dados param de serem calculados e enviados aos periféricos. Caso a tecla RETURN seja pressionada, o módulo entra na tela de amostragem de tensão. Importante ressaltar que independente da função que está sendo amostrada no display, todas as grandezas estão sendo calculadas e enviadas aos demais periféricos.

Foram criadas telas de parametrização com o intuito de auxiliar o usuário caso ele não queira ficar na tela de gerenciamento, ou seja, para o caso de querer monitorar no display uma grandeza em específico, há essa possibilidade. O setup de programação foi dividido em dois grupos, Energia e Água, e subdivididos em tensão, corrente, potencias ativa, reativa e aparente, fator de potência e consumo de energia pelo lado de Energia e fluxo e consumo de água pelo lado de Água.

Além disso, há a rotina que monta a página web em html e envia os dados para que o shield W5100 envie o pacote TCP/IP para a rede e, também, a rotina que envia um buffer próprio para o módulo HC-05 bluetooth e também para a serial.

Há duas funções especificas que são bem importantes para o conjunto, a primeira delas é o desligamento do display, ou sleep mode, que apaga as informações do display mas continua mandando as mesmas para os periféricos. E a segunda é a função de reset, que uma vez apertado o botão surgem duas opções: ou reset do terminal, que faz o reset da placa via software; ou o reset das variáveis, que zera os valores de consumo de energia e água, uma vez que estes parâmetros não zeram com o desligamento do gerenciador.

Comunicação com a Shiled Bluetooth

A configuração da shield é feita na inicialização do Arduino, onde são definidos os parâmetros, tais como número do PIN, condições de pareamento, nome do dispositivo, entre outros.

Para facilitar a implementação da camada de aplicação Android, foi definido um protocolo próprio. Trata-se de um protocolo que inicia com STX, que sinaliza que iniciará a transmissão dos dados, e termina com ETX, que indica que o buffer termina nesse momento. Como separador entre dados foram utilizadas vírgulas.

Desenvolvimento do aplicativo

O aplicativo desenvolvido para este projeto foi criado a partir do Eclipse com ADT (Android Development Tools), ou seja, uma IDE para desenvolvimento com plugin com ferramentas para desenvolver Android. A linguagem de programação utilizada para o desenvolvimento do aplicativo foi Java, porém em alguns pontos foi necessário programar em XML.

O processo para se desenvolver um aplicativo é composto por árvores, e para esta aplicação é feita por três etapas, são elas: o desenvolvimento da tela e do ícone de atalho; o desenvolvimento da árvore principal; e o desenvolvimento do serviço de bluetooth, que roda em background, não sendo visível aos olhos do usuário final.

A etapa de desenvolvimento da tela consiste em designar a disposição dos dados a serem mostrados na tela e do botão que executa a conexão com a placa. O ícone, necessariamente, precisa possuir extensão PNG e ter dimensões 64×64 pixels. Neste projeto foi desenvolvido um ícone que transmitisse a mensagem de um gerenciador de consumo de energia e água.

A árvore principal tem a função de intermediar se o botão de conexão foi pressionado e solicitar a estrutura de serviço que execute a conexão propriamente dita. Outra função desta árvore é receber os dados tratados e direcioná-los à tela na ordem devida. Basicamente ela tem a função de gerenciar as atividades como um todo.

Já o serviço de bluetooth tem a função de estabelecer a conexão com o shield, realizar a paridade, receber os dados, tratá-los um a um segundo o protocolo que está sendo enviado e direcioná-los a estrutura principal para que ela envie para a tela. Para tanto, é extremamente importante que a aplicação conheça com quem está falando e como estão vindo os dados, por isso no capítulo de comunicação com o Shield Bluetooth foi explicado sobre o protocolo que é enviado. Sem um protocolo previamente conhecido e passível de interpretação, não é possível realizar o tratamento dos dados recebidos.

Sistema supervisório - Tela do aplicativo desenvolvido
Figura 1 – Tela do aplicativo desenvolvido.

Produto gerado

O protótipo foi batizado de CEA01BE (Controle Energia e Água 01 Bluetooth e Ethernet).

Sistema supervisório - Produto
Figura 2 – Produto gerado.
Sistema supervisório - Parte interna do produto
Figura 3 – Parte interior do produto.

Vídeo demonstrativo do projeto

Download

Código-fonte do software bare metal

Código-fonte do aplicativo Android

Conclusão e agradecimentos

Este projeto consistiu desde seu início num trabalho acadêmico voltado para uma situação sobre a qual o consumidor final tem pouco controle, ou seja, o acompanhamento “real time” de seus consumos. Estamos estudando atualmente na migração desse projeto para algo vendável. Gostaria de deixar meus agradecimentos aos parceiros deste projeto: Jefferson dos Santos Abrahão, Neandro Anzolini e Sérgio Marchi. E também ao Pedro Bertoleti que nos auxiliou muito no desenvolvimento do aplicativo Android.

Outros artigos da série

<< Gerenciador de consumo de energia elétrica e água com sistema supervisório web/remoto – Parte 2

Graduado em Engenharia Elétrica, atualmente curso especialização em Eletrônica Embarcada na Unisal e trabalho na área de sistemas embarcados baremetal há mais de 4 anos com foco em sistemas de pesagens. Como venho da escola de eletrônica gosto bastante da área mais baixo nível , mas estou procurando me aperfeiçoar e especializar também nas áreas mais alto nível envolvendo SOs.

Notificações
Notificar
guest
13 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Paulo De Souza
Paulo Roberto de Souza
07/10/2018 08:50

Bom dia, tem como arrumar os links para download, está dando erro pra baixar, obrigado

Fabio Benevides
Fabio Benevides
20/07/2018 17:10

Excelente projeto. Parabéns pessoal.

Pedro Henrique Arantes
PH Arantes
11/03/2016 09:24

Parabéns, muito interesse, estou lendo e tirando ideias…uma pergunta de muitas que tenho, sobre essa caixa do produto final, como fez ela ? mandou fazer onde ?

Vinicius Almeida
Vinicius Almeida
Reply to  PH Arantes
12/03/2016 10:54

Obrigado!

Nós compramos ela num site de componentes eletrônicos: http://www.casadoresistor.com.br. Mas é possível encontrar em outros tamanhos também.

Fique à vontade para perguntar.

Abraço.

Pedromakegam
Pedro Vanderlan Santana
26/07/2016 17:11

Está dando erro ao tentar realizar o download dos códigos.

Pode concertar por favor?

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Pedro Vanderlan Santana
26/07/2016 17:28

Pedro Por favor faça os Downloads através dos links a seguir:
http://goo.gl/FsjS6i
http://goo.gl/tR5pJs

Vamos corrigir o problema no post.

Obrigado

Pedromakegam
Pedro Vanderlan Santana
Reply to  Fabio_Souza_Embarcados
27/07/2016 08:11

Muito obrigado por responder com celeridade mas o segundo link não está funcionando. Aparentemente ele foi desativado pela Google por não atender alguma politica.

Se puder enviar um novo link eu agradeço.

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Pedro Vanderlan Santana
27/07/2016 10:08

Olá Pedro, atualizei os Links no texto. Acho que agora está funcionando.

Grato pelo retorno.

Amorim Francisco
Amorim Aldimiro Orim
08/07/2016 13:26

não consigo baixar o código fonte que disponibilizaste,quando dou 1 clique diz que a imagem não pode ser carregada,como faço para baixar?

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Amorim Aldimiro Orim
26/07/2016 17:28

Amorim por favor faça os Downloads através dos links a seguir:
http://goo.gl/FsjS6i
http://goo.gl/tR5pJs

Vamos corrigir o problema no post.

Obrigado

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Fabio_Souza_Embarcados
27/07/2016 10:08

Atualizei os Links no texto. Acho que agora está funcionando. 😉

Gerson Sena
Gerson Sena
16/06/2016 20:46

Um ótimo trabalho, eu não poderia deixar de dar meus parabéns. Eu estou um pouco frustrado com um projeto similar… eu estava gostando da ideia de poder usar a biblioteca que você usou, mas me deparei com o problema de não saber como explicar ela (pois trata-se de um TCC onde eu deveria fazer todas as leituras). No final estou sofrendo (por conhecer e dominar muito pouco do hardware do Arduino, uso um UNO R3) para fazer o código que lê diretamente os valores no AD dele e converte para RMS. Inclusive uso o mesmo sensor de corrente que o… Leia mais »

Vinicius Almeida
Vinicius Almeida
Reply to  Gerson Sena
18/06/2016 11:39

Gerson, muito obrigado!

Se tiver alguma dúvida e/ou sugestão fique à vontade para perguntar.

Um abraço

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H