5 formas de utilizar o Monitor serial no desenvolvimento de programas do Arduino

O Monitor serial da IDE do Arduino é uma ferramenta simples e muito útil. É uma forma simples de visualização para o Arduino que muitas vezes sofre pela falta de um display ou tela.

Neste artigo vou mostrar algumas formas de utilizar a porta serial do Arduino para trocar dados com o computador com a finalidade de auxiliar no desenvolvimento de programas.

Vamos usar então a ferramenta Monitor serial para visualizar estes dados.

Ao criar programas mais complexos no Arduino, podemos sentir falta de uma ferramenta de debugger. As ferramentas de debugger são aquelas que permitem ao programador “enxergar” o que está acontecendo dentro do programa durante sua execução, para descobrir falhas ou problemas. Ele permite parar o programa em alguma linha pré-definida, visualizar valores de variáveis e até alterar valores durante a execução do programa (on-the-fly).

Infelizmente no Arduino temos que ser um pouco mais criativos e desenvolver nossas próprias ferramentas de debugger. O jeito mais fácil de fazer isso é usando as ferramentas Monitor serial e Plotter serial da IDE.

Para acessar estas ferramentas utilizamos o menu Ferramentas:

tela8

Eu uso frequentemente essas ferramentas no desenvolvimento de programas de jogos e automação. A seguir, eu descrevo como.

 

1 – Monitoração de variáveis.

tela101

Na imagem acima eu mostro um exemplo bem simples de como monitorar variáveis do programa na ferramenta Monitor Serial do Arduino.

Neste exemplo temos apenas 3 variáveis: contagem, pressão e temperatura. A cada 100 ms o programa envia as 3 variáveis pela interface serial e elas aparecem na tela do Monitor serial.

Uma prática muito útil é utilizarmos a diretiva “#define DEBUG” (linha 5) para ligarmos e desligarmos a função de monitoração de variáveis (e qualquer outra função de debug do programa).

Somente queremos que o programa fique enviando estes dados pela serial quando estamos na etapa de desenvolvimento do programa. Quando o programa é finalizado, não é bom deixar que ele fique enviado dados desnecessários para não atrapalhar o processamento normal do programa.

Para isso serve a diretiva “#define DEBUG”. Quando colocamos esta diretiva no inicio do programa, as instruções que estão entre “#ifdef” e “#end” (linhas 16 e 23) são executadas. Caso a linha “#define DEBUG” for apagada ou comentada, as instruções de debug não serão compiladas, portanto, não serão executadas pelo programa.

Podemos colocar quantas variáveis quisermos para monitorar desta forma. Só temos que ficar atentos para não prejudicar o tempo de execução do programa. Temos que saber que o tempo de envio para um caractere com taxa de 9600 é aproximadamente 1 ms.

No nosso exemplo estamos enviando por volta de 60 caracteres em cada linha, portanto leva mais ou menos 60ms. Dependendo da aplicação esse tempo pode atrapalhar.

Podemos utilizar uma taxa de comunicação maior. Até 115200 eu sei que não dá nenhum problema em pequenas distâncias. Até 50 cm pelo menos.

Usando uma taxa maior, diminuímos o tempo de envio de dados. Isso pode ajudar, dependendo da aplicação.

Lembrando que temos que usar a mesma taxa de comunicação dos dois lados da aplicação: Arduino e Monitor serial.

A taxa de comunicação no Arduino é definida na rotina setup( ) do programa:

Serial.begin(9600);

A taxa de comunicação do Monitor serial é definida em :

tela9

 

2 – Datalogger

Utilizando a mesma estrutura usada acima para visualização de variáveis, podemos criar um datalogger. Um datalogger é uma aplicação (programa) muito utilizada em várias áreas.

É uma aplicação que registra os valores de variáveis ao longo do tempo. Isso pode ser útil, por exemplo, para descobrirmos como é a variação de temperatura e pressão em um equipamento ou ambiente.

Precisamos primeiramente definir a base de tempo para os registros. Por exemplo, se queremos registrar os valores de temperatura e pressão, podemos definir o tempo com 1 segundo.

Podemos utilizar o mesmo programa acima e mudar o tempo da função delay para 1000 (1 segundo). Vamos manter a variável contagem para termos uma referência de tempo.

Logicamente temos que ter em algum ponto do programa uma parte que faz a leitura da temperatura e pressão do ambiente e que atualiza as variáveis. Esta parte não esta demonstrada no exemplo.

O Monitor serial não serve como um datalogger porque os dados não ficam salvos em nenhum arquivo para ser consultado a posterior. Neste caso temos que utilizar um programa do tipo Hyperterminal do Windows.

O Hyperterminal funciona como o Monitor serial e tem a opção de gravar os dados recebidos em arquivo texto. Através do seguinte atalho:

tela2

Ao selecionar esta opção (Transfer-> Capture Text) somos direcionados a escolher um nome para o arquivo que será gravado e a partir dai todo dado com formato de caractere (ASCII) é salvo neste arquivo.

Para finalizar a captura de texto, temos que selecionar no Hyperterminal “stop” no mesmo atalho (Transfer->Capture Text->Stop).

Depois é só abrirmos o arquivo texto gravado e visualizar os dados salvos.

 

3 – Visualização de sinais em função do tempo.

Para a visualização de sinais variando ao longo do tempo, vamos utilizar outra ferramenta dentro da IDE do Arduino: o Plotter serial.

O Plotter serial funciona como o Monitor serial, mas só entende os dados numéricos que recebe e vai registrando os valores em um gráfico 2D.

Para desenhar mais que uma linha podemos enviar os valores de mais que uma variável em sequencia separados por uma instrução:

Serial.print(” “);                //envia um espaço

Conforme o exemplo abaixo:

tela3

Neste exemplo estamos calculando o valor de seno para 4 ângulos defasados de 90 graus e enviando ao Plotter serial.

O último dado do bloco de 4 valores, temos que enviar utilizando a instrução:

Serial.println(resultado,4);

Esta instrução envia o dado juntamente com o comando de mudar de linha e assim o Plotter serial sabe que o bloco de dados termina neste valor.

Para plotar apenas um traço (uma variável) podemos utilizar somente uma instrução:

Serial.println(resultado,4);

Para plotar ao mesmo tempo mais que uma variável, temos que utilizar a estrutura do exemplo acima.

O número 4 na instrução define a precisão do número enviado (4 dígitos depois da vírgula). Temos que definir a precisão já que a variável “resultado” é do tipo double.

 

4 – Marcação de pontos de passagem do programa.

Quando estamos testando um programa que é um pouco mais complexo com vários saltos condicionais e “loopings”, é comum ficarmos em dúvida se o programa está passando por algum trecho em particular.

As vezes esta informação pode ajudar a resolver algum problema na lógica do programa.

Outras vezes acontece simplesmente do nosso programa ficar travado em alguma parte e é difícil identificar em que parte o programa está travando.

Nestas duas situações podemos usar o monitor serial para sinalizar a passagem do programa por algum trecho específico. Para fazer isso temos somente que colocar a instrução:

Serial.println(“Marcação 1”);

O texto que iremos enviar pela serial pode ser qualquer um que possamos identificar facilmente. Podemos usar simplesmente números: 1, 2, 3, 4 etc.

Outra forma é utilizar uma variável e ir incrementando a cada vez que passamos em um determinado trecho. Vai depender do tipo de dúvida que você está tentando resolver.

Colocada a instrução no programa, é só executá-lo e abrir o Monitor Serial. Se o programa passar pelo trecho onde a instrução Serial.println foi colocada, o texto irá aparecer na tela do Monitor serial.

 

5 – Alteração de variáveis “on-the-fly”

Como já dissemos, alteração de variáveis “on-the-fly” é quando precisamos interferir no programa através de um processo externo e alterar o valor de alguma variável, sem que o programa pare de ser executado.

Quando temos uma interface com display e teclas, isso é fácil de ser feito. Mas no caso de uma placa de Arduino Uno sozinha não temos esta interface.

Podemos então usar o Monitor serial para fazer isso.

Para isso, vamos ter que criar uma forma do Arduino receber os dados que são digitados no Monitor serial.

Podemos fazer isso usando uma função do Arduino que é executada sempre que um dado é recebido pela porta serial do Arduino:

void serialEvent( )

{

}

Este é um dos tipos de interrupção do programa. Uma interrupção provoca a parada da execução normal do programa dentro da rotina loop( ).

Quando o Arduino recebe um dado pela interface serial, a interrupção ocorre e as instruções dentro de serialEvent( ) são executadas um vez. Depois o programa volta a executar as instruções dentro do loop( ) no ponto onde havia parado.

Abaixo está um programa bem simples que altera o valor da variável “parametro” quando um dado é recebido pela interface serial do Arduino. Mas o valor da variável somente é alterado se o dado for um número (de 0 a 9). Caso contrário, o dado é ignorado.

tela6

No loop( ) estamos enviando o valor da variável “parâmetro” a cada um segundo. Desta forma podemos conferir se o valor que estamos enviando pela serial está alterando o valor da variável corretamente.

Para enviamos um número do computador para o Arduino, usamos o Monitor serial também.

Colocamos o número no campo apontado pela seta azul e apertamos o botão apontado pela seta vermelha.

tela7

Estes foram apenas alguns exemplos de como utilizar o Monitor serial. Depois que você se habituar a usar esta ferramenta, eu tenho certeza que irá encontrar muitas outras formas de aproveitá-la.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s