Comunicação entre o Arduino e o Processing

Comunicação entre o Arduino e o Processing

Para fazer o Arduino se comunicar com o Processing precisamos pegar a biblioteca que é responsável por criar o caminho de comunicação entre os dois. Para que a biblioteca funcione corretamente é necessário ter rodando no Arduino o firmware Firmata. É possível realizar a comunicação entre os dois fazendo uso da biblioteca Serial do Processing e do Arduino, mas isso da mais trabalho e não me parece elegante.

Faça o download da biblioteca e descompacte-a dentro da pasta libraries que se encontra na pasta Scketchbook do seu Processing. Agora abra a IDE do Arduino e faça o upload do exemplo que se encontra em: LIbrary-Firmata>StandardFirmata para a placa.

No Processing digite o seguinte exemplo para o teste inicial:

import processing.serial.*;
import cc.arduino.*;
 
Arduino arduino;
int ledPin = 13;
 
void setup()
{
    arduino = new Arduino(this, Arduino.list()[0]);
    arduino.pinMode(ledPin, Arduino.OUTPUT);
}
 
void draw()
{
    arduino.digitalWrite(ledPin, Arduino.HIGH);
    delay(1000);
    arduino.digitalWrite(ledPin, Arduino.LOW);
    delay(1000);
}

Rode este programa e se tudo ocorreu como planejado o led que está conectado no pino 13 do Arduino deve começar a piscar. Maiores detalhes sobre as funções da biblioteca do Processing podem ser encontradas na sua página no Arduino Playground.

Vamos começar a brincadeira!

Vou usar um circuito simples com LDR (Resistor Variável Conforme Incidência De Luz) que é mostrado na página 31 do Arduino Booklet para interagir com os programas escritos no Processing.

000012

Lendo os valores do sensor

import processing.serial.*;
import cc.arduino.*;
 
Arduino arduino;
int pino_sensor_ldr = 0;
int valor_capturado_ldr = 0;
 
void setup()
{
    println(Arduino.list());
    // cria um novo objeto arduino
    arduino = new Arduino(this, Arduino.list()[0]);
    // seta os pinos do arduino
    arduino.pinMode(pino_sensor_ldr, Arduino.INPUT);
}
 
void draw()
{
    // captura o valor do sensor
    valor_capturado_ldr = arduino.analogRead(pino_sensor_ldr);
    // imprime esse valor no terminal do processing
    println(valor_capturado_ldr);
}

Alterando diâmetro de um circulo

circulo

import processing.serial.*;
import cc.arduino.*;
 
Arduino arduino;
int pino_sensor_ldr = 0;
int valor_capturado_ldr = 0;
 
void setup()
{
    size(400,400);
    background(255, 204, 0);
    ellipseMode(CENTER);
    println(Arduino.list());
    arduino = new Arduino(this, Arduino.list()[0]);
    arduino.pinMode(pino_sensor_ldr, Arduino.INPUT);
}
 
void draw()
{
   // captura o valor do sensor
    valor_capturado_ldr = arduino.analogRead(pino_sensor_ldr);
    background(255, 204, 0);
    // usa o valor capturado para alterar o diâmetro do círculo
    ellipse(200, 200,  valor_capturado_ldr*2,  valor_capturado_ldr*2);
}

Gerando sons e alterando a forma de onda do sinal

Alterei o exemplo SineWaveSignal do Processing que originalmente muda as formas de onda com base nos valores capturados da posição onde o cursor do mouse se encontra. Agora ele funciona com um LDR :)

import ddf.minim.*;
import ddf.minim.signals.*;
import processing.serial.*;
import cc.arduino.*;
 
Minim minim;
AudioOutput out;
 
// SineWave é uma subclasse de Oscilador, que é uma
//classe abstracta que implementa a interface AudioSignal
SineWave sine;
 
Arduino arduino;
int pino_sensor_ldr = 0;
int valor_capturado_ldr = 0;
 
void setup()
{
    size(512, 200, P2D);
 
    println(Arduino.list());
    arduino = new Arduino(this, Arduino.list()[0]);
    arduino.pinMode(pino_sensor_ldr, Arduino.INPUT);
 
    minim = new Minim(this);
    // cria um line out para o Minin
    out = minim.getLineOut(Minim.STEREO);
    // cria um sinal oscilante de 440Hz e 0.5 de amplitude
    sine = new SineWave(440, 0.5, out.sampleRate());
    // seta a velocidade do portamento para 200millisegundos
    sine.portamento(200);
    // adiciona o sinal ao line out
    out.addSignal(sine);
}
 
void draw()
{
    background(0);
    stroke(255);
 
    valor_capturado_ldr = arduino.analogRead(pino_sensor_ldr);
 
    // muda a frequencia do sinal
    float freq = map(valor_capturado_ldr, 0, height, 1500, 60);
    sine.setFreq(freq);
    float pan = map(valor_capturado_ldr, 0, width, -1, 1);
    sine.setPan(pan);
 
    // desenha a forma de onda
    for(int i = 0; i < out.bufferSize() - 1; i++)
    {
        float x1 = map(i, 0, out.bufferSize(), 0, width);
        float x2 = map(i+1, 0, out.bufferSize(), 0, width);
        line(x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50);
        line(x1, 150 + out.right.get(i)*50, x2, 150 + out.right.get(i+1)*50);
    }
}
 
void stop()
{
    out.close();
    minim.stop();
    super.stop();
}

Alguém já fez algum projeto usando essa interação entre o Arduino e o Processing?

12 comentários »

  1. [...] Arduino Brasil » Comunicação entre o Arduino e o Processing (tags: http://www.arduino.com.br 2009 mes1 dia8 arduino processing blog_post) [...]

  2. Régis
    6:10
    9 Fevereiro, 2009
  3. Tá demais isso aqui!
    Boa, Alan

  4. 6:30
    17 Fevereiro, 2009
  5. Rodei o blog procurando um e-mail de contato e não achei.
    Me manda uma mensagem, quero te passar uma informação comercial (SPAM nos comentários não vale, né?)

    vlw

  6. Samuel Teodoro Ferreira
    16:28
    18 Maio, 2009
  7. Me ajude pelo amor de Deuss !!!!! rsrsrsr

    Já usou o sensor ping da tatuíno ? Comprei um mas até agora nada de conseguir fazer funcionar.

    Se tiver usado me passa uma dica de como receber informações dele.

    Tá showw aquii !!

  8. Régis
    17:46
    18 Maio, 2009
  9. Olá, Samuel,
    eu nunca usei o Tatuino. Alguém aqui usou? Algum comentário?

  10. 17:53
    21 Abril, 2011
  11. Olá amigo, seu tutorial foi extremamente eficaz para me iniciar meus estudos no processing.
    Agradeço muito. Só gostaria de deixar uma alerta no 1º código postado, na linha “arduino = new Arduino(this, Arduino.list()[0]): ” ele está terminando com dois pontos ao invés de ponto e virgula, bem digamos que eu levei 40 minutos até perceber porque não rodava =D, para quem está iniciando e copiando códigos, mas enfim valeu pelo tutorial.

  12. Régis
    13:19
    24 Abril, 2011
  13. Olá, Ezequiel,

    corrigimos o erro. Muito obrigado pela dica!

    Boa sorte com o brinquedinho!

  14. 16:56
    23 Maio, 2011
  15. Boa noite gostaria de divulgar um software e hardware que fiz baseado no arduino chama CLPDUINO
    Gostaria de Saber se algem criaria o modulo de entrada e saida para colocar na placa do arduino
    Eu fiz uma placa nova mas,esta placa ja tem os modulos de in e out do clp mas gostaria de saber se algem quer desenvolver os modulos para o arduino .
    flavioleivafilho@hotmail.com
    site: http://sites.google.com/site/hmig3escada/Home/clpduino

  16. cleo
    6:04
    26 Agosto, 2011
  17. Oi pessoal, comprei o meu arduino, ou melhor compativel, no site http://www.empretecnet.com.br, com preço excelente e entrega imediata.

  18. Luciano Alvim
    3:02
    16 Maio, 2012
  19. O site acabou? =(
    Não consigo ver as imagens desse post… e o vídeo também tá fora do ar.
    Que pena, parecia interessante.
    Abraço!

  20. Régis
    8:13
    31 Maio, 2012
  21. Não acabou, só está em modo de hibernação.

  22. 21:08
    28 Março, 2013
  23. Agora que descobri esse Arduino, vou coorendo comprar o meu também quero brincar né…
    se não for muito encomodo arrumem o video.

RSS de comentários a este artigo.

Deixe um comentário

Assinar (RSS)

Powered by WordPress

Theme by Índice.

Arduino.com.br by +zero and Índice is licensed under a Creative Commons Attribution-Share Alike 2.5 Brazil License.