Tutorial Processing com Arduino e Firmata

Neste tutorial de Processing com Arduino vamos ver como mostrar informações do Arduino na tela do computador utilizando o Processing, uma linguagem de programação de código aberto usada para escrever programas utilizando representação gráfica. Com ela você consegue criar imagens e animações e por esse motivo é uma linguagem muito utilizada por profissionais de design e ilustradores.

No Arduino, podemos utilizar o Processing para coletar as informações da placa e mostrá-las na tela do computador, como fiz ligando ao Arduino um botão tipo push-button e um led.

A parte superior da tela temos o Estado Botão, onde um círculo mostra se o led está apagado (círculo em preto), ou aceso (círculo em vermelho). No meio da tela, um contador incrementado a cada acionamento do botão, e na parte inferior um gráfico que vai sendo atualizado conforme acionamos o circuito.

Para obter esse resultado, vamos instalar o Processing no computador e também preparar o Arduino carregando o FIRMATA, que é um protocolo que vai fazer com que o Arduino receba e envie dados ao computador, via porta serial.

Configurando o Arduino

Vamos começar pelo Arduino, entrando na IDE, em Arquivo => Exemplos => Firmata => StandardFirmata:

Transfira o StandardFirmata para o Arduino e monte o circuito abaixo, composto por um push-button, um resistor e um led:

Como estamos utilizando o Firmata, todas as definições de portas , variáveis e outros detalhes do programa serão feitos diretamente no Processing.

Instalando o Processing

Faça o download do Processing diretamente do site oficial do programa, nesse endereço: https://www.processing.org/download/?processing. Neste tutorial estamos utilizando a versão 2.2.1 para Windows 32 Bits, conforme destacado. Estão disponíveis também versões para Linux e Mac OS:

Após o download, descompacte o arquivo e você terá uma pasta chamada processing-2.2.1. Dentro dessa pasta você terá o executável do programa, que é o processing.exe. Se preferir, crie um atalho para o Processing na sua área de trabalho.

Biblioteca do Arduino para o Processing

Faça agora o download da biblioteca do Arduino para o Processing. Essa biblioteca vai cuidar de toda a parte de comunicação entre o Arduino e o computador: https://github.com/pardo-bsso/processing-arduino.

Descompacte o arquivo e você terá uma pasta chamada Arduino. Copie essa pasta para dentro da pasta de bibliotecas do Processing (não confunda com a pasta libraries do Arduino) que se encontra geralmente em Meus DocumentosProcessingLibraries. Essa pasta é criada na primeira vez que você executar o Processing:

Programando o Processing

Abra o Processing , e você verá a tela abaixo, que por sinal é muito parecida com a IDE do Arduino :

E não é só a IDE. A programação do Processing também é muito parecida com a do Arduino. Também temos uma seção SETUP, onde você coloca as definições iniciais do programa, e uma seção DRAW (semelhante ao LOOP do Arduino), onde estão os comandos para desenhar na tela e a  comunicação com o Arduino.

Na tela do Processing, carregue o seguinte programa :

// Programa : Informacoes na tela com o processing
// Autor : Arduino e Cia

// Carrega as bibliotecas Serial e Arduino
import processing.serial.*;
import cc.arduino.*;
 
Arduino arduino;

// Definicao das variaveis
int ledPin = 3;
int pinobotao = 7;
int valor = 0;
int x = 0;
int y = 290;
int contador = 0;
 
void setup()
{
 // Abre uma janela no tamanho 500x300
 size(500,300);
 // Habilita o anti-aliasing
 smooth();
 // Define fundo na cor preta
 background(0);
 println(Arduino.list());
 
 // Comunicacao com Arduino
 arduino = new Arduino(this, Arduino.list()[0], 57600);
 // Define o pino do led como saida
 arduino.pinMode(ledPin, Arduino.OUTPUT);
 // Define o pino do botao como entrada
 arduino.pinMode(pinobotao, Arduino.INPUT);
 
 ellipseMode(RADIUS);

 //Carrega a fonte de texto a ser utilizada
 textFont(createFont("Arial Bold",18));
 textAlign(CENTER);
 
 // Cor da linha = branco
 fill(255);
 // Desenha o retangulo no centro da janela
 rect(110,125,275,31);
 
 // Inicio do cabecalho
 // Desenha o retangulo azul
 fill(90,109,238);   // Cor preenchimento
 rect(0,0,width,40);
 // Define o tamanho da fonte
 textSize(31);
 // Define a cor e imprime o texto
 fill(255);  // Cor branca
 text("Arduino e Cia", width/2,30);
 // Final do cabecalho
   
 // Texto Estado Botao
 textSize(25);
 text("Estado botão", 220,90);
 
 // Texto Inicial contador
 fill(0);
 text("Contador : " + contador, width/2, height/2);
}
 
void draw()
{
  valor = arduino.digitalRead(pinobotao);
  stroke(255);
  fill(0);  
  // Atualiza o circulo referente ao Estado Botao
  ellipse(340, 80, 15,15);
  
  // Apaga o led
  arduino.digitalWrite(ledPin, Arduino.LOW);
  
  // Verifica se o botao foi pressionado
  if (valor !=0)
  {
    // Incrementa o contador
    contador = contador+1;
    // Atualiza as informacoes do contador na tela
    fill(255);
    rect(111,126,273,28);
    fill(0);
    text("Contador : " + contador, width/2, height/2);
    // Acende o led
    arduino.digitalWrite(ledPin, Arduino.HIGH);
    // Ajusta o valor de Y para desenho do grafico
    y = 200;
    // Define a cor da linha como vermelho
    stroke(255,7,7);
    // Desenha uma linha vermelha no grafico
    line( x, 290, x, y);
    // Desenha o botao Estado Botao em vermelho
    fill(255,7,7);
    ellipse(340, 80, 14, 14);    
  }
  
  // Atualiza o grafico 
  stroke(0);
  line(x+1,291, x+1, 199);
  stroke(33,223,109);
  line(x,290, x, 245);
   
  // Atualiza o valor de X para desenhar a
  // proxima linha do grafico
  x = x +1;
  // Se o valor de X for igual ao tamanho da tela (500),
  // reinicia a contagem 
  if (x == width)
  {
    x = 0;
    stroke(0);
    line(x,291, x, 199);
  }

  // Aguarda 10 milisegundos e reinicia o processo
  delay(10);
}

Clique no ícone RUN, na parte superior esquerda do Processing.

Nesse momento, será carregada a tela que mostramos no início desse post, e a comunicação com o Arduino será iniciada.

Integração Processing com Arduino

No início do programa definimos um objeto Arduino e atribuímos a ele o nome arduino. Esse objeto vai permitir que possamos enviar e receber informações da placa, definir portas e controlar toda a parte de comunicação.

A linha arduino = new Arduino(this, Arduino.list()[0], 57600) inicializa o objeto Arduino e seta a velocidade da comunicação serial para 57600, que é a velocidade padrão configurada no firmware FIRMATA que carregamos anteriormente.

Outras linhas que utilizamos para enviar comandos ao Arduino são :

Que servem para definir o modo de funcionamento das portas (INPUT (entrada) ou OUTPUT (saída)), e também para modificar o estado da porta do led, colocando-a em nível baixo ou alto.

Para a a parte gráfica, definimos o tamanho da tela com o comando size(), que deve ser colocado logo no início do setup, antes de definirmos as outras opções da parte gráfica, como linhas, fontes e cores.

Os demais comandos utilizados são o line(), para desenhar linhas, o ellipse(), utilizado para desenhar o botão de estado do led, e o rect(), para desenhar os retângulos.Uma lista detalhada dos comandos aceitos pelo Processing, com sintaxe e exemplos de uso, pode ser acessada no site oficial do programa, nesse link: http://processing.org/reference/

O vídeo abaixo mostra o circuito e o programa utilizados neste tutorial Processing com Arduino:


Gostou do tutorial Processing com Arduino? Confira outros posts usando Processing com Arduino aqui mesmo no Arduino e Cia!

5/5 - (2 votos)

Related posts

Alarme sensor de gás com o módulo MQ-2

by Arduino e Cia
10 anos ago

Gravador USBasp AVR com ATMega328P

by Arduino e Cia
11 anos ago

GSM Shield SIM900: Acione portas do Arduino por SMS e realize chamadas telefônicas

by Arduino e Cia
9 anos ago
Sair da versão mobile