Mause ile 2 eksen kontrol

bolubeyi

Profesyonel Üye
Katılım
27 Eyl 2008
Mesajlar
1,666
Puanları
421
Yaş
54
Konum
Trabzon
Bu dersimizde bir platformu mause ile 2 eksen (sağ - sol ve yukarı - aşağı) hareket ettirmeyi öğreneceğiz. Platforma ben örnek olarak bir kaç tane led bağladım. Led yerine kamera ya da projektör gibi başka metaryeller bağlayarak bu metaryalleri 2 eksen kontrol edebilirsiniz. PC arayüzü olarak processingi kullanacağız. İhtiyaç duyulması halinde konuya ait dosyaları orjinal konu ekinden (üyelik gerektirir)indirebilirsiniz.

arduino67.jpg


Malzeme listesi:
Arduino uno
2 adet servo motor
Pan tilt servo motor montaj kiti
DC güç kaynağı (Pil ya daadaptör 6 Volt)
Bağlantı kaboları
Deney bordu

Fritzing çizimi:
arduino66.png


Arduino kodlarımız:
Kod:
#include <Servo.h>

Servo yservo;  Servo xservo; // servos for x and y
//set initial values for x and y
int ypos = 0;
int xpos= 0;

void setup(){
  xservo.attach(14); //(analog pin 0) for the x servo
  yservo.attach(15);  //(analog pin 1) for the y server
  Serial.begin(19200); // 19200 is the rate of communication
  Serial.println("Rolling"); // some output for debug purposes.
}

void loop() {
  static int v = 0; // value to be sent to the servo (0-180)
  if ( Serial.available()) {
  char ch = Serial.read(); // read in a character from the serial port and assign to ch
  switch(ch) { // switch based on the value of ch
  case '0'...'9': // if it's numeric
  v = v * 10 + ch - '0';
  /*
  so if the chars sent are 45x (turn x servo to 45 degs)..
  v is the value we want to send to the servo and it is currently 0
  The first char (ch) is 4 so
  0*10 = 0 + 4 - 0 = 4;
  Second char is 4;
  4*10 = 40 + 5 = 45 - 0 = 45;
  Third char is not a number(0-9) so we  drop through...
  */
  break;
  case 'x': // if it's x
  /*
  ....and land here
  where we send the value of v which is now 45 to the x servo
  and then reset v to 0
  */
  xservo.write(v);
  v = 0;
  break;
  case 'y':
  yservo.write(v);
  v = 0;
  break;
  }
  }
}

Processing kodlarımız:
Kod:
import processing.serial.*;   

int xpos=90; // set x servo's value to mid point (0-180);
int ypos=90; // and the same here
Serial port; // The serial port we will be using

void setup()
{
  size(360, 360);
  frameRate(100);
  println(Serial.list()); // List COM-ports
  //select second com-port from the list (COM3 for my device)
  // You will want to change the [1] to select the correct device
  // Remember the list starts at [0] for the first option.
  port = new Serial(this, Serial.list()[0], 19200);
}

void draw()
{
  fill(175);
  rect(0,0,360,360);
  fill(255,0,0); //rgb value so RED
  rect(180, 175, mouseX-180, 10); //xpos, ypos, width, height
  fill(0,255,0); // and GREEN
  rect(175, 180, 10, mouseY-180);
  update(mouseX, mouseY);
}

void update(int x, int y)
{
  //Calculate servo postion from mouseX
  xpos= x/2;
  ypos = y/2;
  //Output the servo position ( from 0 to 180)
  port.write(xpos+"x");
  port.write(ypos+"y");
}
 

Forum istatistikleri

Konular
127,951
Mesajlar
913,870
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst