프로젝트

망가진 비행기 조이스틱과 아두이노를 이용하여 설계프로그램 조작하기

페이지 정보

작성자 Fischer Müller 작성일16-10-16 23:06 조회3,715회 댓글0건

본문

5501772df42a52f674a05bd9b16cdc45_1476683
 

 

안녕하세요! 글을 처음 올려봅니다.

원래 이 프로젝트는 예전에 진행했던 프로젝트인데 다시 올려보았습니다.(부품누락으로 작동이 버벅거리네요.)

 

아두이노 레오나르도는 일반 아두이노와 다르게 

USB 통신 기능을 통합한 Atmega32U4 칩이 내장되어있습니다.

USB의 Communications Device Class (CDC) 드라이버의 인스턴스가 생성되면서 연결됩니다.

즉 마우스,키보드처럼 사용이 가능합니다(코딩하였을 경우)

제가 사용하는 설계 프로그램인 솔리드웍스는 마우스 휠키+움직임으로 3차원 입체를 돌려 화면을 확인하는데

거의 모든 설계툴이 이 방식을 이용합니다. 그래서 어떤 업체에서는 설계전용 3D마우스를 판매합니다.

하지만 20만원이 넘는 가격에 도저히 살 수 없더군요... 그래서 만들었습니다.

버리는 조이스틱과, 아두이노 레오나르도를 이용하여 조작기를 만들어봤습니다.

 

<소스>

#include <Keyboard.h>

#include <Mouse.h>

 

const int Button = 6;

const int xAxis = A0;

const int yAxis = A1;

const int ledPin = 13; 

const int buttonPin = 2;

 

int range = 12;

int responseDelay = 5;

int threshold = range/4;

int center = range/2;

int buttonState = 0;  

boolean mouseIsActive = false;

 

 

void setup() {

  pinMode(Button, INPUT);

  pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT);

  Mouse.begin();

  delay(1000);

}

 

void loop() {

 

      buttonState = digitalRead(buttonPin);

      mouseIsActive = !mouseIsActive;

      digitalWrite(ledPin, mouseIsActive);

 

  int xReading = readAxis(A0);

  int yReading = readAxis(A1);

 

  if (mouseIsActive) {

    if (buttonState == HIGH) {

    Mouse.press(MOUSE_MIDDLE);

    Mouse.move(xReading, yReading, 0);

  } else {

    digitalWrite(ledPin, HIGH);

  }

  }  

 

  delay(responseDelay);

}

 

int readAxis(int thisAxis) { 

  int reading = analogRead(thisAxis);

  reading = map(reading, 0, 1023, 0, range);

  int distance = reading - center;

 

  if (abs(distance) < threshold) {

    distance = 0;

  } 

  return distance;

}

 

소스를 보시면 수시로 포텐셔미터의 아날로그값을 측정하여 변환한 후 마우스함수에 넣는방식입니다.

아두이노 레오나르도만 사용가능한 함수들이 있는데요.

Mouse.move(x,y);  

Mouse.click(MOUSE_LEFT);

입니다. .move에 x값, y값을 넣으면 해당 좌표만큼 움직입니다. 원점은 움직이기 전 위치가 원점입니다.

.click에 LEFT,MIDDLE,RIGHT를 넣으시면 클릭이 됩니다.

 

 

댓글목록

등록된 댓글이 없습니다.


모바일 버전으로 보기