Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Interação Arduino + Potenciômetro + Processing

Imprimir
Avaliação do Usuário: / 4
PiorMelhor 

Um dos grandes baratos do Processing é poder interagir com o Arduino e gerar gráficos a partir do que está sendo lido através de sensores ou usar os gráficos para fazer uma interface mais amigável com o equipamento.

Eis a proposta aqui: usaremos um potenciômetro de 10K ohm para simular um sensor qualquer e a partir das leituras obtidas com ele em um Arduino iremos criar gráficos com o Processing.

Primeiro vamos montar a experiência com o Arduino:

Ligue o potenciômetro ao Arduino, os dois pinos laterais são ligados ao 5V e a GND do Arduino. O lado do 5V e do GND mais ou menos tanto faz, apenas o lado do GND será o zero do potenciômetro e o lado onde estiver ligado do 5V será o 1024 (leitura máxima analógica).

Ligue o pino central do potenciômetro ao pino analógico 0 (A0) do Arduino.



Agora vamos escrever e carregar o seguinte código ao Arduino:

void setup() {
 Serial.begin(9600);
}
 
void loop() {
 Serial.println(analogRead(A0));
 delay(10);
}

Com esse código lemos o pino analógico 0 (A0) do Arduino e escrevemos os valores lidos na porta serial.

Verifique o funcionamento via Serial Monitor, movimente o potenciômetro e veja os valores lidos:



Antes de continuar recomendo uma olhada em Como realizar interação entre o Arduino e o Processing e em Processing: o que é e para que serve?.

Vamos então ao código do Processing:

import processing.serial.*;
 
Serial serial;
 
void setup () { 
 size(800, 600); 
 serial = new Serial(this, "COM3", 9600); 
 serial.bufferUntil('\n'); 
}
 
void draw () { 
} 
 
void serialEvent (Serial myPort) { 
 String leitura = serial.readStringUntil('\n');
 float valor = float(trim(leitura));
 background(color(255));
 ellipse (width/2,height/2,valor,valor); 
}

Com esse código lemos a entrada de dados pela porta serial coletando os números enviados pelo Arduino e usamos esses números para determinar o tamanho do círculo a ser desenhado.

Com serial = new Serial(this, "COM3", 9600); determinamos que a porta serial a ser utilizada é a COM3 (verifique em qual seu Arduino está conectado) e a taxa de transmissão em 9600bps.

Com serial.bufferUntil('\n'); aguardamos que seja recebido um ENTER (caractere \n) para dar continuidade ao programa.

Nada é feito na função draw() tudo acontece na função predefinida serialEvent() que é chamada apenas quando há um evento pela interface serial, como parâmetro essa função recebe qual porta serial deve monitorar.

Em String leitura = serial.readStringUntil('\n'); concatenamos todos os caracteres recebidos pela porta serial na variável até que o caractere recebido seja um ENTER (próxima linha);

Com float valor = float(trim(leitura)); convertemos a string recebida pela porta serial em um número do tipo float.

Depois é só desenhar a elipse com o tamanho determinado pelo número enviado pelo Arduino. Usamos as constantes width que retorna o comprimento da janela e width que retorna a altura, com elas determinamos o meio da tela como centro para a elipse.

Execute e mova o potenciômetro ligado ao Arduino:



 

Comentários  

 
+1 #2 Dúvida Serial EventJosé Aparecido 15-12-2014 17:47
Olá,

Estou estudando sobre o tema, e achei legal o exemplo, bem simples e objetivo, muito claro como funciona.

Estou com uma dúvida quando trabalhamos com a serialEvent, ao que parece, a tela "pisca", não dando um bom resultado parte gráfica, principalmente quando usa cor de preenchimento.

Tentei mudar para ler através da função serial.read(), mas parece não retornar os dados corretamente.

Já reparou neste problema? Da tela ao invés de "imprimir suavemente", fica piscando (reflexo branco) em meio ao desenho... tentei alterar o frameRate, mas não adiantou muito.

Se puder dar uma dica, desde já obrigado.
Citar
 
 
0 #1 aguardamdo sugestaoeduardo canavon 27-05-2014 19:55
duvida estou precisando de um sensor que de acordo com o deslocamento de ar sobre ele acelere um induzido isto seria possível uma espécie de potenciômetro para um projeto em meu carburador de uma gaiola de arrancada agradeço pelas sugestões
Citar
 

Adicionar comentário


Código de segurança
Atualizar

You are here: