Acionamento das saídas digitais do Arduino utilizando VBA no Excel

Qual é o objetivo deste artigo?

 

O VBA ou Visual Basic for Applications consiste em uma espécie de variante do Visual Basic, no entanto, esta pode ser utilizada em conjunto com todos os programas existentes dentro do pacote Microsoft Office, como por exemplo o Microsoft Excel, bem como com outras aplicações da Microsoft.

 

O princípio de funcionamento do VBA é semelhante ao de qualquer outra linguagem de programação, onde o código é definido pelo usuário para que determinada funcionalidade seja executada por um sistema ou dispositivo. Especificamente, no caso do Microsoft Excel, o VBA é utilizado principalmente para automatizar planilhas, oferecendo ao usuário maior facilidade na execução de procedimentos, utilização de recursos de análise de dados, navegação entre as planilhas existentes, além de outras aplicações mais avançadas. 

 

Desta maneira, este artigo tem como objetivo apresentar uma das aplicações avançadas citadas anteriormente, que por sua vez, consiste em criar a possibilidade de comandar um Arduino UNO através do Microsoft Excel por meio de uma interface de comunicação entre os mesmos utilizando o VBA. No final deste conteúdo o leitor estará capacitado para desenvolver uma aplicação semelhante à apresentada na figura 1.

 

Figura 1 - Planilha para controle do Arduino UNO.

 

Aba de desenvolvimento

 

Para começar a desenvolver a aplicação proposta, deve-se habilitar a barra de ferramentas de desenvolvedor no Microsoft Excel. Sendo assim, torna-se necessário que o leitor acesse o menu Arquivo (File), selecione o item opções (Options) e em seguida no item personalizar faixa de opções (Customize Ribbon) para então marcar a caixa de seleção adequada para o aparecimento da aba de desenvolvimento (Developer).

  

Aba para o desenvolvimento de aplicações em VBA
Figura 2 - Aba para o desenvolvimento de aplicações em VBA

 

Manipulação da porta COM

 

O primeiro passo na criação da interface de comando consiste na manipulação da porta COM adequada para o recebimento e envio das informações pertinentes, sendo assim, neste momento serão utilizados dois botões, onde um deles é responsável pela abertura da porta COM adequada e o outro para fechar a mesma.

 

O primeiro botão a ser criado é aquele que abrirá a porta COM correspondente. Neste momento, o leitor deve selecionar a opção Inserir (insert) na aba de desenvolvimento e em seguida a opção Botão (Button), existente dentro das ferramentas de controle de formulário (Form Controls).

  

Inserindo um botão
Figura 3 - Inserindo um botão

 

Após a seleção da ferramenta de criação dos botões, deve-se selecionar a área correspondente na planilha e arrastar o mouse para obter o botão com o tamanho desejado.

 

Botão para abrir a porta COM
Figura 4 - Botão para abrir a porta COM

  

Assim que o botão for criado, aparecerá a janela mostrada na figura abaixo (caso a mesma não apareça, o leitor pode clicar com o botão direito do mouse sobre o mesmo e selecionar a opção Atribuir Macro (Assign Macro)), onde será possível inserir um determinado código, responsável pela realização da funcionalidade para a qual o botão foi designado. Neste ponto, deve-se escolher um nome para a Macro e clicar em Novo (New).

 

Associando uma macro a um botão
Figura 5 - Associando uma macro a um botão

 

Neste momento aparecerá um ambiente de programação para o leitor. Repare que o ambiente citado já traz duas linhas escritas, onde uma delas contém a sentença Sub Button1_Click() e a outra contém a sentença End Sub. Para aqueles que não conhecem o VBA, estas duas sentenças correspondem ao início e ao final de um bloco de ações que podem acontecer caso o botão em questão seja acionado. Sendo assim, deve-se inserir o código referente aos atos resultantes do clique do botão.

 

O código a seguir é o responsável pela determinação dos parâmetros da porta COM, bem como pela abertura da mesma. Note que nas linhas 2 e 3, as variáveis do tipo String porta e taxa são preenchidas com os elementos existentes nas celulas (9,3) e (10,3) ou C9 e C10 respectivamente.

 

Parâmetros da porta COM
Figura 6 - Parâmetros da porta COM

 

Posteriormente, a função Shell (linha 5) é utilizada para definir os parâmetros da porta COM e a função Application.Wait (linha 6) é utilizada para determinar um tempo de espera de cerca de 2 segundos (note o +2 no terceiro parâmetro da função TimeSerial) para que a função Open (linha 8) possa proceder com segurança na abertura da porta COM escolhida (repare que na sintaxe desta função, referencia-se a porta COM aberta, pelo termo #1, ou seja, sempre que for necessário executar algum procedimento que envolva a porta em questão, deve-se identifica-la no código por meio da nomenclatura #1).

 

 

O mesmo procedimento de criação deve ser feito para a elaboração do botão responsável por fechar a porta COM aberta.

 

Botão utilizado para fechar a porta COM
Figura 7 - Botão utilizado para fechar a porta COM

 

No entanto, para realizar o fechamento da porta COM que está sendo utilizada, deve-se apenas inserir a função Close (lembre-se que o #1 representa a porta COM que foi aberta anteriormente) no código referente à ação que deve ser executada quando ocorrer um clique neste botão.

 

 

 

Botões de controle

 

Existem várias maneiras diferentes para elaborar os elementos gráficos responsáveis por interagir com o Arduino UNO, porém neste artigo foram utilizados dois botões por saída digital, sendo que um deles possui a função de fazer com que uma determinada saída fique em nível alto (HIGH) enquanto o outro atua nesta mesma saída, no entanto, fazendo com que a mesma permaneça em nível baixo (LOW).

 

Botões de Controle
Figura 8 - Botões de Controle

 

A criação dos botões de controle é feita da mesma maneira que os botões de manipulação da porta COM, de modo que as diferenças entre eles aparecem apenas nos códigos. Para que o Arduino UNO execute alguma ação proveniente dos botões de controle, ele deve ler a instrução que chega através da porta serial e interpreta-la da maneira correta.

 

O código abaixo traz as ações que devem ser realizadas quando houver um clique no Botão3 (responsável por colocar uma determinada saída digital em nível alto). Observe que primeiramente deve ser colocado um caractere (neste caso a letra a) na porta COM (referenciado por #1) e envia-lo através da função Put. Obviamente, como já ressaltado, torna-se necessário que o código do Arduino UNO seja capaz de receber este caractere e executar a função de colocar o pino em questão em nível alto.

 

Em seguida, escreve-se a palavra HIGH na célula R24 (posteriormente será explicado o porque deste procedimento) da planilha Embarcados (este é o nome da planilha que está sendo utilizada).

 

 

Considere que o Botão4 por exemplo, cumpra a tarefa de colocar a saída digital descrita anteriormente em nível baixo, portanto, quando houver um clique no mesmo, será enviado um caractere (neste caso, o caractere b) e em seguida escreve-se a palavra LOW na célula R24 da planilha Embarcados.

 

 

 

Código do Arduino UNO

 

Neste momento será abordado um exemplo para ilustrar o funcionamento do código que deve ser inserido no Arduino UNO. Existem várias maneiras de implementar o modo pelo qual o Arduino UNO irá interpretar a informação recebida, uma delas consiste em utilizar um conjunto de sentenças Switch/Case para cada botão de controle. O exemplo dado a seguir consiste em criar um código para os botões HIGH e LOW do pino de saída digital 2 citados anteriormente.

 

O primeiro passo na criação do código consiste na declaração da variável do tipo char (utilizada para armazenar a informação enviada pelo Microsoft Excel) chamada comando.

 

Em seguida, dentro da função setup() inicia-se a comunicação serial por meio da função Serial.begin() e além disso define-se o pino 2 para atuar como uma saída digital por meio da função pinMode().

 

Na função loop() ocorre primeiramente a verificação da existência de algum tipo de informação para leitura por meio da porta serial, de modo que, caso exista, esta é armazenada na variável comando e posteriormente é analisada no conjunto de sentenças switch/case, onde caso o valor contido na mesma seja o caractere a, o Arduino UNO deve proceder colocando a saída digital existente no pino 2 em nível alto, ao passo que, caso o caractere encontrado seja b, o Arduino UNO deverá colocar a saída citada em nível baixo.

 

 

 

Estados dos pinos de saída digital

 

Para finalizar este conteúdo será apresentado para o leitor como foi elaborado o painel que mostra o estado de cada saída digital existente no Arduino UNO

 

Neste momento é necessário lembrar que no passo anterior, ao clicar em um determinado botão de controle, além do envio de caracteres, também ocorre a escrita de uma palavra (HIGH ou LOW) em uma certa célula. Sendo assim, no exemplo apresentado escreveu-se uma das duas palavras citadas (conforme o botão pressionado) na célula R24, no entanto, qual é a função desta célula? Conforme a figura 8, a célula R24 é justamente aquela que apresenta o estado da saída digital existente no pino 2, para o operador.

 

Painel para apresentar os estados das saídas
Figura 9 - Painel para apresentar os estados das saídas

 

Além disso para colorir as células que contêm o estado das saídas digitais, formulou-se algumas regras para os elementos da coluna R, associando uma determinada cor ao respectivo texto, neste caso, a cor verde está relacionada com a palavra HIGH enquanto a cor vermelha está ligada à palavra LOW.

 

Criação de regras para mostrar os estados das saídas
Figura 10 - Criação de regras para mostrar os estados das saídas

 

A formulação de regras pode ser feita acessando o item  Formatação condicional (Conditional Formatting) contido na aba Página Inicial (Home). Neste momento deve-se selecionar a opção de criação de uma nova regra (New Rule) para então optar pelo tipo de regra desejada (neste caso foi utilizada a regra formatar somente células que contenham (Format only cells that contain)).

 

Em seguida deve-se especificar o texto (na primeira lista de seleção na parte referente à edição da regra é necessário que o leitor selecione a opção Texto Específico (Specific Text)) que, caso esteja presente na célula, desencadeará mudança de cor da mesma (aqui foi estabelecido que quando houver a palavra HIGH em uma determinada célula existente na região citada (coluna R), a mesma deverá ser colorida com a cor verde).

 

Repare que o procedimento para os casos em que as células estiverem escritas com LOW é exatamente o mesmo.

 

Criação de uma nova regra
Figura 11 - Criação de uma nova regra

 

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

 

Figura 11 - Resultado final.

 

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

Histórico de dados de acionamento do Arduino no Excel utilizando VBA >>
Sou engenheiro eletricista graduado com ênfase em Controle e Automação pela Universidade Federal do Espírito Santo - UFES e Técnico em Eletrotécnica pelo Instituto Federal do Espírito Santo - IFES. Me interesso por todas as vertentes existentes dentro da Engenharia Elétrica, no entanto, as áreas relacionadas à automação e instrumentação industrial possuem um significado especial para mim, assim como a Engenharia de Manutenção que na minha opinião é um setor fascinante.