Como utilizar o Processing com Arduino: Parte 1

processing-com-arduino
Font Size

Olá tudo bem? Hoje vamos iniciar uma série de posts os quais irão abordar sobre: Processing com Arduino.

Vamos aprender a como mostrar graficamente os nossos projetos e como através da tela do nosso computador, controlar as saídas do Arduino. Vamos nessa?

O que é Processing?

Basicamente, Processing é uma linguagem de programação, totalmente gratuita e de código aberto. Ela foi um projeto iniciado em 2001 por Casey Reas e Ben Fry, ambos ex-membros do Grupo de Computação do MIT Media Lab, tendo como objetivo, desenvolver artes eletrônicas e projetos visuais.

Além disso, ela busca ensinar noções básicas de programação de computadores em um contexto totalmente visual.

A sua instalação é igual a IDE do Arduino, basta realizar o seu download de acordo com o sistema operacional da sua máquina e depois é só executar a instalação e pronto, você já pode começar a criar suas primeiras artes eletrônicas!

Mas você sabia também que já temos no blog um projeto de radar utilizando o Processing? Ainda não viu? Então clica no link abaixo e confira uma aplicação com Arduino utilizando a ferramenta Processing.

Sendo assim, para realizar o seu download, basta clicar na imagem abaixo que você será direcionado a página de download do processing:

Download Processing

Testando o Processing

Para testar se o nosso software está funcionando corretamente, vamos realizar um pequeno “Olá Mundo!” para você começar a compreender como essa ferramenta trabalha.

Assim, ao abrir a IDE do Processing, você vai notar uma certa familiaridade com a IDE do nosso Arduino, o que facilita bastante o nosso trabalho. Com a IDE aberta, digite:

println (“Olá Mundo”);

Observe que no espaço onde aparece os erros do código, tem alguma coisa escrita ali, o que é? Exatamente, é a mensagem que escrevemos!

Agora vamos para outro teste, que tal criar um elipse? E ainda aprender a escrever na janela que abre quando executamos o código? Para isso basta executar o seguinte código:

frame.setTitle ("Nome da Janela");  // Código para colocar nome na janela
size (500,500);  // Tamanho da janela que será aberta
ellipse (250, 250, 150, 150);     // Objeto a ser criado (Elipse) (x, y, Larg, Compri)
text("Controle do Led", 200, 50);  // Texto a ser escrito na tela ("Texto", x, y)

Processing com Arduino

Vamos entrar agora no objetivo do post de hoje, que é mostrar como é realizada a comunicação entre Processing e Arduino. Para isso, precisamos saber de alguns detalhes:

Além disso, a ideia da comunicação entre Processing e Arduino é basicamente assim: o Processing pode ser utilizado de duas formas, fazendo o Arduino executar determinada tarefa ou atuando como uma representação gráfica e visual daquilo que está acontecendo no seu protótipo em protoboard.

Quando o Processing atua como um agente que vai “comandar” o Arduino, então temos que fazer com que o Arduino apenas realize a leitura da porta serial (onde é feita a comunicação entre eles).

Caso o Arduino receba algum valor, enviado pelo processing, ele realiza determinada função, ou seja, ele só fará uma ação X, ligar um led, por exemplo, se, o Processing mandar o valor correto, caso contrário isso não ocorrerá.

Agora quando o processing atua como uma representação visual daquilo que está ocorrendo na protoboard, temos basicamente o contrário. Agora é o Arduino que vai enviar pela serial o que está acontecendo na protoboard e a partir desse dado enviado, uma imagem (ou uma janela de cores) é mostrada no processing.

Caso contrário, outra imagem (ou uma janela de cores) é mostrada. Sabendo disso, vamos partir para o nosso primeiro exemplo, vamos piscar um Led através do Processing. Então para isso, vamos aos materiais do nosso projeto.

Materiais Utilizados

Processing com Arduino – Ligação do Circuito 

Esquema de ligação do circuito no Arduino

Fonte: AutoCore Robótica

Código do Arduino Comentado

Como já mencionei, devemos realizar o upload do código no Arduino primeiro, assim, realize o upload do seguinte código em seu Arduino:

/* ========================================================================================================
 
  Projeto: Utilizando Processing com Arduino Parte 1
  Autor: Danilo Nogueira
  Data: 16/10/2018

// ======================================================================================================== */

// -- Definindo as variáveis --
  int LED = 13;
  int entrada = 0;
// ========================================================================================================

// -- Definindo o Setup() --
  void setup()
  {
    Serial.begin(9600);
    pinMode(LED, OUTPUT);
  }
// ========================================================================================================

// -- Definindo o Loop() --
void loop()
  {
    if (Serial.available() > 0)
    {
      entrada = Serial.read();
    
      if (entrada == '0')
        digitalWrite(LED, LOW);
    
      else if (entrada == '1')
        digitalWrite(LED, HIGH);
    }
  }
// ========================================================================================================

Agora basta realizar o upload da pasta com as imagens dos leds mais o código abaixo e realizar o upload em seu Processing, para que o led conectado ao pino 13 comece a piscar:

Download Arquivos Led

Código do Processing Comentado

/* ========================================================================================================
 
  Projeto: Utilizando Processing com Arduino Parte 1
  Autor: Danilo Nogueira
  Data: 16/10/2018

// ======================================================================================================== */

// --- Iniciando a Serial ---
import processing.serial.*;

// ========================================================================================================

// --- Definindo as Variáveis ---
Serial porta;
PImage imagem;
int valor = 0;

// ========================================================================================================

// --- Definindo o Setup() ---
void setup()
{
  frame.setTitle ("Controle do Led");     //Criando a janela
  size (1280,765);     //Tamanho da janela
  
  println("Portas seriais disponíveis:");  //Mostra a lista de postas disponíveis
  println(Serial.list());
  
  String nomePorta = Serial.list()[0];
  porta = new Serial(this, nomePorta, 9600);   //Salva a porta que o Arduino está
  
  imagem = loadImage("led-off.png");    //Carrega a imagem inicial do led
}

// ========================================================================================================

// --- Definindo o Draw() ---
void draw()
{
  fill(0);
  textFont(createFont("SansSerif", 36));
  
  text("Controle do Led", 10, 40);     //Título da janela
  textFont(createFont("SansSerif", 18));  //Fonte utilizada e o seu tamanho
  text("Clique sobre a imagem para acender ou apagar o led.", 10, 80);
  
  // Exibir a imagem carregada
  image(imagem, 250, 120);   //Atualização da imagem do led ao clicar nela
}

// ========================================================================================================

// --- Definindo o mouseClicked() ---
void mouseClicked()
{
  if (valor == 0)    //Verifica se o led está apagado
  {
    valor = 1;
    imagem = loadImage("led-on.png");
    porta.write('1');        //Escreve o numero '1' na serial do Arduino
    println("Enviando: 1");
  }
  
  else
  {
    valor = 0;
    imagem = loadImage("led-off.png");
    porta.write('0');
    println("Enviando: 0");
  }
}
// ========================================================================================================

Analisando o Código

Código do Arduino

No código do Arduino, como sempre, iniciamos definindo o pino que estamos trabalhando e colocamos ele como saída.

Mas além disso, também inicializamos a comunicação serial, a qual é o meio de comunicação entre o Arduino e o Processing.

Logo depois entramos no loop do código, onde nele temos o seguinte código:

void loop()
{
  if (Serial.available() > 0)
 {
  entrada = Serial.read();

  if (entrada == '0')
  digitalWrite(LED, LOW);

  else if (entrada == '1')
  digitalWrite(LED, HIGH);

 }
}

Inicialmente temos um comando if, o qual vai ter a tarefa de checar se algo foi enviado para a serial do Arduino, caso chega alguma coisa na serial, ela será lida através do código:

entrada = Serial.read();

Após essa informação ser lida, ela será armazenada na variável ‘entrada’. Esse valor armazenado será comparado para saber se o led será habilitado ou não. Essa comparação é feito no próximo if o qual verifica se o valor é igual a zero, caso seja, o led é desligado.

Mas caso o valor armazenado seja igual a 1, então o led é habilitado e, se nenhuma dessas condições for verdadeira, o Arduino volta a ler a serial e espera um outro valor.

Código Processing

Inicialização do Código

Primeiro, em todo projeto que vamos utilizar o processing devemos sempre iniciar a comunicação serial, pois é com ela que vamos nos comunicar com o Arduino, dessa forma escrevemos o comando:

import processing.serial.*;

Após de iniciar a serial, vamos definir os tipos de variáveis que vamos utilizar em nosso código. Vamos começar com a variável do tipo Serial:

Serial porta;

Esse comando criou uma variável do tipo Serial a qual vai armazenar qual porta o Arduino está conectado (é aquela COMx, lembra?) e além disso, será por ela que vamos enviar os valores para a serial do Arduino.

Logo depois, foi definido a variável do tipo PImage:

PImage imagem;

Este tipo de variável é utilizada para armazenar imagens. Ou seja, é através dessa variável que vamos colocar imagens na janela do programa. Os formatos de imagens que ela suporta são: .gif , .jpg , .tga e.png .

Além disso, a classe PImage contém campos para a largura e altura da imagem. Contudo, para chamar uma imagem ao programa, devemos utilizar o comando:

imagem = loadImage("nome-da-imagem-salva");

Definindo o Setup

Entrando no void setup() temos a construção da nossa janela inicial do programa através da linha de código:

frame.setTitle ("Controle do Led");
size (800,480);

As linhas que seguem irão mostrar no espaço das mensagens de erro, quais portas estão disponíveis (normalmente aparece só aquela que o Arduino está) e vai armazenar essa porta na variável portaCOM do tipo String:

println("Portas seriais disponíveis:");
println(Serial.list());
String nomePorta = Serial.list()[0];

Logo depois, utilizamos a variável porta criada para guardar a porta do Arduino para que futuramente possamos enviar dados através dela, no comando ela armazena qual porta será utilizada e qual será a velocidade de conexão:

porta = new Serial(this, nomePorta, 9600);

Definindo o Draw

Dentro do draw, que é o void loop do Arduino, é onde vai acontecer todo o efeito de apagar e acender o led no momento que você clicar no led que aparece na tela. Todos os comandos que estão dentro dessa função, irão configurar toda a parte gráfica da janela que abre quando executamos o programa:

fill(0);
textFont(createFont("SansSerif", 36));
text("Controle do Led", 10, 40);

textFont(createFont("SansSerif", 18));
text("Clique sobre a imagem para acender ou apagar o led.", 10, 80);

// Exibir a imagem carregada
image(imagem, 250, 120);

Definindo o mouseClicked()

A função mouseClicked() tem como aplicação, identificar se o botão do mouse foi pressionado e solto, ou seja, foi clicado. Assim, toda vez que clicarmos no led que vai aparecer na tela, a função vai entrar dentro do if. Tal if vai verificar se o led está em posição de ligado ou desligado.

Caso o led esteja desligado (valor == 0) então valor passa a valer 1. Assim, escrevemos na serial do Arduino o valor de 1, para poder ligar o led na protoboard, através do comando:

porta.write('1');

Ou seja, vamos escrever 1 (write) na porta serial que está armazenada na variável porta (que é a porta no Arduino COM-valor-da-porta). Mas, se quando eu clicar no led e ele estiver ligado, então será enviado o valor de 0 na serial e o led será apagado.

Resultado do Projeto

Para terminar, segue o vídeo do nosso canal do Youtube onde mostra o código do nosso projeto de hoje em funcionamento!

Mas e ai? Gostou? Caso tenha ficado algo incompleto para você, comenta abaixo 

Dicas?  Dúvidas?  Idéias de post? Críticas?  Só comentar também! 

Forte abraço!

Posts relacionados

Aprenda a Utilizar o Sensor de Umidade e Temperatura DHT11 com Arduino

por autocore
7 anos ago

Conhecendo as diferenças entre os módulos Bluetooth HC e HM

por autocore
8 anos ago

Entendendo o Funcionamento de Uma Porta Analógica

por Danilo Nogueira
3 anos ago
Sair da versão mobile