Social Icons

6.2.1) Arduino + Mouse PS2 + Servo Simples [Parte 2 e 3]


Parte 2 e 3 do meu projeto com arduino e um mouse ps2.
Na primeira tentativa, testei com o mouse sem ter uma interface com o computador, direto com o arduino.
Então comecei a pesquisar no site oficial do Arduino, por uma interface entre o mouse, o computador e o arduino. Descobri uma maneira de interligar tudo isso, a partir de um tal de Processing.
Processing, não sei dizer ao certo sua denominação, porém ele pode fazer a comunicação do computador com uma placa arduino, pois ele consegue acessar e usar a porta paralela do pc para mandar informações e para receber, testei e logo posto aqui um potenciômetro que regula uma cor na tela do PC que seria o de mandar informações do arduino pro PC. Do mesmo jeito que o SerialMonitor do sketch do arduino faz, mas com uma sofisticação maior.
Inicialização muito parecida com a do arduino.
Para fazer esta comunicação (interface), você deve fazer o download da biblioteca processing em, biblioteca processing.
Ele roda tanto no Linux quanto no Windows e MacOS, usei ja no Windows e no Ubuntu funcionou perfeito.
Depois de ter feito o download, siga os seguintes passos:
  • Descompacte a biblioteca e copie a pasta “arduino” dentro da sub-pasta “bibliotecas” do seu sketchbook do seu processing. (Você pode achar o diretório de seu sketchbook abrindo as preferências do processing. Se você não tiver uma sub-pasta “biblioteca” em seu sketchbook, crie uma!)
  • Rode o arduino, abra Exemplos > StandardFirmata sketch, e faça o upload para a placa.
  • Configure o processing com o serial em: http://processing.org/reference/libraries/serial/
  • Dentro do processing, abra um dos exemplos que vem junto da biblioteca arduino.
  • Edite o exemplo para acertar a porta serial.
  • Rode o exemplo.
Pronto esta configurado!

Como já sabemos um pouco sobre cada módulo e o necessário para iniciarmos nossa experiência com estes componentes, vamos ao que interessa!

Primeiramente devemos escrever o código no Arduino (está comentado linha a linha):
 

#include<servo.h> //inicializa biblioteca servo

Servo servo1; Servo servo2; cria o objeto servo 1 e 2

void setup() {
pinMode(1,OUTPUT);
servo1.attach(14); //pino analógico 0
servo2.attach(15); //pino analógico 1
Serial.begin(19200); //inicia comunicação serial
Serial.println("Preparado"); //imprime na tela do computador
}
void loop() { // o void loop ainda está um pouco
// complicado para eu poder explicar.
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read();
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0';
break;
case 's':
servo1.write(v);
v = 0;
break;
case 'w':
servo2.write(v);
v = 0;
break;
case 'd':
servo2.detach();
break;
case 'a':
servo2.attach(15);
break;
}
}
}

Assim sendo, grave o sketch no arduino e partiremos para a próxima etapa, o processing.

Depois de instalado o processing (post anterior) e já ter feito o upload do sketch para o arduino, compile este programa dentro do processing:

import processing.serial.*;
int gx = 15; //declaração das variáveis de processo
int gy = 35;
int spos=90; //esta é a variável que controla o servo 1 ou 2
//repare que ela já recebe o num. 90, o que indica
//que o servo irá inicializar em 90°!
float leftColor = 0.0;
float rightColor = 0.0;
Serial port;
void setup()
{
size(720, 720);
colorMode(RGB, 1.0);
noStroke();
rectMode(CENTER);
frameRate(100);
println(Serial.list()); // List COM-ports
port = new Serial(this, Serial.list()[2], 115200);
//esta linha é muito importante para a comunicação serial
//em Serail.list()[2] troque o 2 pelo número do indice da porta "COM"
//que esta se comunicando com o arduino. Em 115200 é a velocidade
//que ela se comunica, você também deve trocar este valor se diferir da
//velocidade da sua.
}
void draw()
{
background(0.0);
update(mouseX);
update(mouseY);
fill(mouseX/4);
fill(mouseY/4);
rect(150, 320, gx*2, gx*2);
fill(180 - (mouseX/4));
rect(450, 320, gy*2, gy*2);
fill(180 - (mouseY/4));
}
void update(int x)
{
//Calculata a posição do servo por mouseX e mouseY
spos= x/4; spos=y/4;
//Atualiza saída do servo 1 ( de 0 a 180)
port.write("s"+spos);
//Atualiza saída do servo 2 ( de 0 a 180)
port.write("w"+spos);
// Just some graphics
leftColor = -0.002 * x/2 + 0.06;
rightColor = 0.002 * x/2 + 0.06;
gx = x/2;
gy = 100-y/2;
}



Nenhum comentário:

Postar um comentário