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 :
- arduino.pinMode(ledPin, Arduino.OUTPUT);
- arduino.pinMode(pinobotao, Arduino.INPUT);
- arduino.digitalWrite(ledPin, Arduino.LOW);
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!