Histórico de dados de acionamento do Arduino no Excel utilizando VBA

Histórico de dados

Qual é o objetivo deste artigo?

Sabe-se que uma das coisas mais importantes para qualquer tipo de controle de processos é a realização do registro de uma série de dados essenciais e que podem ser utilizados para auxiliar nas tomadas de decisão por parte das pessoas responsáveis pela eficiência de um determinado processo.

Propõe-se neste artigo uma continuação do conteúdo pelo qual introduziu-se a utilização do VBA com o Microsoft Excel para realizar o controle das saídas digitais de um Arduino UNO. Sendo assim, o objetivo do presente material consiste em compartilhar uma maneira pela qual pode-se elaborar um registro histórico para os valores das saídas digitais citadas.

Depois de conferir o conteúdo deste artigo, o leitor poderá obter um resultado semelhante ao apresentado na figura 1.

Resultado final esperado.
Figura 1 – Resultado final esperado.

Formato do histórico de dados

O primeiro passo para a criação de um histórico de dados (que consiste basicamente em uma tabela) é a elaboração de um cabeçalho adequado para proporcionar uma organização eficiente das informações.

Neste sentido, utilizou-se a estrutura apresentada na figura 2 para a organização dos dados:

Histórico de dados.
Figura 2 – Histórico de dados.

Repare que em uma determinada linha insere-se a data, hora e o estado de todas as saídas digitais, ao passo que, no próximo registro, as informações são inseridas na linha posterior. Desta maneira, neste artigo, apresenta-se primeiramente o procedimento utilizado para registrar as informações e em seguida será mostrado para o leitor como determinar quando acontecerão estes registros.

Registro das informações no histórico

Para registrar os estados das saídas em um determinado momento, basta copiar as informações contidas no painel de estados (apresentado no artigo anterior) e inserir as mesmas em uma determinada linha do histórico de dados

Painel de estados.
Figura 3 – Painel de estados.

Note que algumas informações são importantes para a realização do procedimento citado. Primeiramente, o painel de estados esta contido em uma planilha chamada Embarcados, enquanto o histórico de dados esta em uma planilha chamada Gráficos.

Suponha agora que o estado do pino 2 esteja localizado na célula R4 da planilha Embarcados e o cabeçalho do histórico, localizado na planilha Gráficos, esteja localizado na linha 3 e o campo DATA esteja localizado na coluna L, portanto, o estado do pino 2 deve ser colocado na célula imediatamente abaixo do campo PINO 2 (portanto, na célula N4). O código em VBA responsável por este procedimento é o seguinte:

O mesmo procedimento pode deve ser feito para todas as outras saídas, no entanto repare que as primeiras células de uma determinada linha do histórico contém a data e a hora. Isto pode ser feito da seguinte maneira:

Observe que a maneira descrita para a realização do preenchimento do histórico possui um caráter manual, de modo que, para que o mesmo seja preenchido linha por linha automaticamente, torna-se necessário a criação de um procedimento dinâmico. Para isso é necessário criar uma variável que percorra as células adequadas inserindo os valores correspondentes do painel de estados no histórico de dados.

A variável citada será denominada RangeDinamico e pode ser criada da seguinte maneira:

Para preencher a linha adequada do histórico, é necessário descobrir qual foi a última linha preenchida para então completar a linha posterior, isto pode ser feito escolhendo uma célula como ponto de partida, no caso a célula L3 (correspondente ao campo Data, no cabeçalho), de modo que, a partir desta testa-se as células imediatamente abaixo para verificar qual é a próxima célula não escrita (esta estará contida na linha a ser preenchida).

Em um primeiro momento associa-se a variável do tipo Range RangeDinamico à célula L3. Posteriormente, nota-se que existe a função Do/Loop Until() que irá fazer com que o seu conteúdo interno seja repetido até o momento em que uma determinada sentença seja verdadeira (esta sentença é o retorno da função IsEmpty(), que verifica se o argumento da mesma é uma célula vazia). 

Dentro da função Do/Loop Until() encontra-se uma função If que juntamente com a função IsEmpty() verifica se a célula associada ao RangeDinamico está com algum conteúdo, caso esteja, a variável RangeDinamico apontará a célula imediatamente abaixo da qual estava relacionada anteriormente. Isto é feito através da função Offset(), onde o primeiro parâmetro da mesma corresponde ao deslocamento em linha e o segundo em coluna. Este deslocamento irá sendo feito até o momento em que a próxima célula vazia contida na coluna das datas (onde está o campo Data), for encontrada.

Neste momento, escreve-se os respectivos nas células da linha encontrada, desde a célula que irá conter a data até a célula que conterá o último pino de saída digital. Note no código abaixo que parte-se da célula apontada por RangeDinamico e desloca-se para a direita tendo a mesma como referência.

Momento de realização dos registros no histórico

Por ultimo é necessário definir o momento em que o histórico de dados deve ser atualizado. Neste artigo optou-se por atualizar o mesmo sempre que um dos botões de controle (apresentados no artigo anterior) for acionado, ocasionando portanto, uma mudança de estado em alguma das saídas. 

Lembre-se que quando um botão de controle é acionado, além de escrever no painel de estados o novo estado de uma determinada saída, era enviado um caractere pela porta serial para o Arduino UNO. O código abaixo refere-se ao botão responsável por levar fazer com que a saída digital do pino 2 fique em nível alto (para ver o código que já está associado ao botão basta clicar com o botão direito sobre o mesmo, selecionar a opção atribuir macro e escolher a opção editar).

Para que as novas funcionalidades deste botão sejam implementadas, deve-se alterar a programação do mesmo utilizando as porções de códigos descritas anteriormente, além disso, uma pequena modificação deve ser realizada para o caso onde a saída esteja em um determinado estado e o botão que leva a mesma para este mesmo estado seja apertado. Neste caso, ignora-se o acionamento do botão, já que não houve alteração de estado, portanto, não há motivo para atualizar o histórico (segundo o critério de atualização utilizado).

Desta maneira o código do botão HIGH da saída do pino 2 deve ser alterado primeiramente conforme apresentado abaixo. Note que a alteração do estado do botão somente ocorrerá quando o estado desejado for diferente do estado atual.

Finalmente, para inserir os dados no histórico a partir do clique deste botão de controle, basta completar a programação do mesmo com as porções de código mostradas anteriormente.

Note que este procedimento deve ser realizado para todos os outros botões de controle (no caso de o leitor utilizar a alteração de um estado qualquer como parâmetro para a atualização do histórico).

Atualizando o histórico de dados

Como dito anteriormente, as informações do histórico são atualizadas sempre houver alteração no estado de uma das saídas, no entanto, percebe-se que, caso estas não sofram nenhum tipo de alteração, o histórico ficará defasado no tempo, bem como os dados dos gráficos, portanto, uma maneira de resolver este impasse, consiste em criar um botão que apenas adiciona uma linha contendo os estados atuais das saídas no histórico (da mesma forma realizada anteriormente).

Manipulação do histórico.
Figura 4 – Manipulação do histórico.

Apagando o histórico de dados

Para encerrar este conteúdo, note que na figura anterior também existe um botão para limpar o histórico. Além de cumprir esta função, o botão em questão ainda realiza o registro da primeira linha com os estados atuais para que o histórico possua um ponto de partida.

Este procedimento pode ser realizado criando-se o botão (como já apresentado) e inserindo no mesmo o seguinte código em VBA.

Este código começa com a declaração da variável tabela e em seguida esta é associada a célula L3 (esta é a célula onde está localizado o campo Data no histórico). Posteriormente, na próxima linha de códigos seleciona-se a célula imediatamente abaixo do campo Data e a partir da mesma seleciona-se os demais dados da tabela (deixando somente o cabeçalho fora da seleção) e por fim, a função Selection.ClearContents() é a responsável por apagar toda a região selecionada. Observe que após estes procedimentos, chama-se a função para preenchimento da primeira linha do histórico (a função PreencherHist equivale ao código utilizado anteriormente para preencher uma linha do mesmo).

Seguindo os passos demonstrados neste artigo será possível obter um resultado semelhante ao da figura 5 (idêntica à figura 1). 

Resultado da aplicação proposta.
Figura 5 – Resultado da aplicação proposta.

Esperamos que você tenha gostado deste conteúdo, sinta-se à vontade para nos dar sugestões, críticas ou elogios.

Outros artigos da série

<< Acionamento das saídas digitais do Arduino utilizando VBA no ExcelCriação de gráficos para o histórico de dados do Arduino no Excel utilizando VBA >>
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.

Arduino » Histórico de dados de acionamento do Arduino no Excel utilizando VBA
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
BlueNRG-LP – Bluetooth 5.2 de longo alcance para aplicações industriais

Data: 05/11 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link