Acionando as saídas do Arduino com PWM utilizando VBA no excel

Qual é o objetivo deste artigo?

 

Sabe-se que um dispositivo como o Arduino UNO possui uma série de saídas digitais, as quais por meio de seus acionamentos podem ligar ou desligar elementos que estiverem conectados nas mesmas. Desta maneira, pode-se utilizar uma das saídas em questão para, por exemplo, controlar o estado de um LED, ligando ou desligando o mesmo. 

 

No entanto, em algumas aplicações necessita-se mais do que este dois estados (ligado e desligado) no controle dos dispositivos, como é o caso do controle do brilho de um LED ou a alteração da velocidade de um motor elétrico. Para lidar com esta situação utiliza-se uma técnica chamada PWM ou Pulse Width Modulation, que consiste na aplicação de um sinal digital pulsante para manipular as características citadas.

 

Sendo assim, este artigo tem como objetivo complementar os materiais produzidos anteriormente referentes à utilização do Microsoft Excel para a realização do acionamento das saídas do Arduino UNO, no entanto, desta vez, será apresentado como utilizar o PWM nas saídas digitais através do mesmo.

 

Ao final deste artigo espera-se que o leitor seja capaz de desenvolver uma aplicação semelhante à apresentada na figura abaixo.

 

Planilha de acionamento do Arduino com PWM utilizando VBA.
Figura 1 - Planilha de acionamento utilizando PWM

 

 

Manipulação da porta COM

 

Primeiramente, deve-se ter em mente que este artigo faz parte de uma série de conteúdos que abordam o mesmo assunto (a utilização do VBA para implementar aplicações envolvendo o Arduino UNO), portanto, alguns procedimentos que foram realizados previamente serão omitidos neste momento.

 

Esta observação é necessária, pois, neste artigo, assim como no primeiro desta série, ocorre o envio de informações através da porta COM, portanto, deve-se ressaltar que, para a utilização correta do conteúdo presente aqui, deve-se proceder da mesma forma demonstrada anteriormente para a manipulação da porta COM.

 

 

Envio dos dados de acionamento para o Arduino UNO

 

O procedimento de envio das informações adequadas para o acionamento de uma determinada saída digital utilizando PWM é semelhante ao utilizado no primeiro artigo desta série para o estabelecimento dos níveis lógicos alto e baixo. No entanto, neste caso é necessário que mais parâmetros sejam passados do Microsoft Excel para o Arduino UNO, pois, além de identificar a saída, deve-se também identificar o valor que será utilizado como parâmetro para o PWM.

 

Painel de acionamento do PWM
Figura 2 - Painel de acionamento do PWM

 

Os dados que serão enviados pela comunicação serial possuem o seguinte formato:

 

 String passada do Microsoft Excel para o Arduino UNO
Figura 3 - String passada do Microsoft Excel para o Arduino UNO

 

O código abaixo descreve justamente o funcionamento do botão responsável por fazer com que a saída digital do pino 11 seja acionada utilizando o PWM

 

 

Primeiramente, declara-se a variável pwm como uma variável do tipo String. Em seguida, esta é preenchida com o valor contido na célula L12 (célula onde o usuário deve inserir o valor desejado para ser utilizado como parâmetro na função analogWrite()).

 

Na terceira linha deste código realiza-se a concatenação dos caracteres p e 1 (aqui existente na condição de caractere) com string contida na variável pwm, para que a mensagem a ser enviada esteja com o formato descrito na figura 3.

 

Por fim, registra-se o valor encontrado na célula L12 na célula C10 (contida no painel de estados (apresentado na figura 4), para conter o valor atual do pwm que está sendo utilizado) e envia-se através da o conjunto de caracteres pela porta serial.

 

Painel de estados
Figura 4 - Painel de estados

 

 

Desenvolvimento do código do Arduino UNO

 

No código do Arduino UNO deve-se primeiramente declarar 3 variáveis que serão utilizadas para realizar o acionamento proposto. Uma destas deve ser do tipo char (denominada comando), para conter os caracteres recebidos através da porta COM pela função Serial.read(). Por outro lado, deve-se ter uma variável do tipo String (denominada pwm) que será preenchida com os caracteres da variável comando e uma variável do tipo int, chamada valor, utilizada no acionamento da saída digital existente no pino 11 por meio da função analogWrite()

 

 

Posteriormente, na função setup(), inicializa-se a interface de comunicação através da porta serial e além disso declara-se os pinos que serão utilizados como saídas (como o exemplo será dado utilizando apenas o pino 11, somente este está sendo declarado).

 

 

O procedimento realizado pelo código inserido dentro da função loop() é análogo ao realizado no primeiro artigo desta série, onde, primeiramente, verifica-se a existência de algum byte no buffer da porta serial para ser lido e, caso exista, a variável comando recebe o caractere em questão.

 

Se o conteúdo da variável comando for a letra p, o Arduino UNO deve entender que o Microsoft Excel requisitou um pedido de acionamento de uma saída digital utilizando PWM. Em seguida, limpa-se a variável do tipo string pwm e lê-se o próximo byte do conjunto de dados que foi enviado (note que esta segunda leitura identifica qual porta deve ser acionada neste caso, a saída presente no pino 11).

 

Posteriormente utiliza-se um laço for para ler os próximos 3 bytes, ou seja, 3 caracteres existentes no buffer da porta COM, de modo que, a cada leitura, adiciona-se estes caracteres à variável do tipo string pwm. Por fim, após a execução total do laço, utiliza-se a função toInt() para transformar o conteúdo da variável pwm em um número inteiro e este é armazenado na variável valor, que por sua vez é utilizada para o acionamento da porta correspondente por meio da função analogWrite().

 

 

No meio do código é possível encontrar a função delay() sendo utilizada, pois comprovou-se experimentalmente que, caso esta não estivesse presente, o Arduino UNO não conseguiria realizar as leituras dos dados recebidos através da porta COM corretamente.

 

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

<< Criação de gráficos para o histórico de dados 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.

Deixe um comentário

Seja o Primeiro a Comentar!

Notificar
avatar
 
wpDiscuz