프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

아두이노 에어마우스

2015-04-07 19:03:39

 

 

HID 기기로 인식하게 만드는 아두이노 레오나르도와 자이로/가속도 센서 mpu-6050 을 사용하여 에어마우스를 만든 프로젝트입니다.

 

 

 

 

 

 

준비물

아두이노 레오나르도

MPU-6050

Jumper Cable

 

 

배치

회로도는 간단합니다. 아두이노 레오나르도와 Mpu-6050을 연결하기만 하면 됩니다.

 

 

 

 

Mpu-6050 을 손가락에 고정시키든 각자의 아이디어로 만들면 됩니다.

 

 



코드

 

 

 

아두이노스토리 카페에 있는 MPU-6050 예제를 변형시켜 사용하였습니다.  http://cafe.naver.com/arduinostory/18039 

 

 

 

 

아래는 zip 파일 내의 AirMouse.ino 파일의 소스입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <Wire.h>
#include "Kalman.h"
 
int16_t gyroX, gyroZ;
 
int Sensitivity = 600;
int delayi = 3;
 
uint32_t timer;
uint8_t i2cData[14]; // Buffer for I2C data
 
void setup() {
  Serial.begin(9600);
  Wire.begin();
  i2cData[0= 7// Set the sample rate to 1000Hz - 8kHz/(7+1) = 1000Hz
  i2cData[1= 0x00// Disable FSYNC and set 260 Hz Acc filtering, 256 Hz Gyro filtering, 8 KHz sampling
  
  i2cData[3= 0x00// Set Accelerometer Full Scale Range to ±2g
  while(i2cWrite(0x19,i2cData,4,false)); // Write to all four registers at once
  while(i2cWrite(0x6B,0x01,true)); // PLL with X axis gyroscope reference and disable sleep mode
  while(i2cRead(0x75,i2cData,1));
  if(i2cData[0!= 0x68) { // Read "WHO_AM_I" register
    Serial.print(F("Error reading sensor"));
    while(1);
  }
 
  delay(100); // Wait for sensor to stabilize
 
  /* Set kalman and gyro starting angle */
  while(i2cRead(0x3B,i2cData,6));
  timer = micros();
 
  Mouse.begin();
}
 
void loop() {
  /* Update all the values */
  while(i2cRead(0x3B,i2cData,14));
  gyroX = ((i2cData[8<< 8| i2cData[9]);
  gyroZ = ((i2cData[12<< 8| i2cData[13]);
 
  gyroX = gyroX / Sensitivity / 1.1  * -1;
  gyroZ = gyroZ / Sensitivity  * -1;
 
  Serial.print("\t");
  Serial.print(gyroX);
  Serial.print(gyroZ);
 
  Mouse.move(gyroZ, gyroX);
 
  Serial.print("\r\n");
  delay(delayi);
}
 
 
 
 
cs

감도를 제어하려면 맨위의 Sensivity 값을 변경하면 됩니다. 작으면 감도가 빨라지는 대신 정확도가 작아지고, 크면 감도가 작아지는 대신 센서를 크게 움직여야 됩니다.

 

 

결과

 

손가락에 고정후 사용해봤습니다. 마우스 클릭을 위하여 임시로 마우스를 잡고 올린 상태에서 그리기를 했습니다. 왼쪽 마우스클릭을 구현해 볼 방법을 찾고 있습니다..

 

유시온

마우스, 에어마우스, 레오나르도, HID
profile

SaBo 2015-04-07 23:50:56

오락실에 있는 사격 게임이 이런 원리였군요~ ㅎㅎ 완전 신기하네요

profile

keeper 2015-04-08 08:32:51

신기합니다 ㅋㅋ 손재주 좋은 사람이 사용하면 참 재밌겠네요

profile

성숙 2015-04-08 09:06:56

그러게.. 미디어 아티스트들이 사용하면 작품이 나올지도... 잭슨폴록은 페인트를 뿌려서 부자가 됐는데..

profile

노짱 2015-04-08 09:59:40

으아 이걸로 게임해보고싶네요 ㅋㅋ 저도 한번 만들어보고 싶네요.
제작과정 알 수 있을까요?

profile

유시온 2015-04-09 00:07:02

오락실에 있는 사격 게임이 이거인지는 잘 모르겠어요 ㅋㅋ.....
수정해서 소스와 회로도 올렸습니다.

profile

수박쨈 2015-04-09 17:13:16

좋은 프로젝트 감사합니다!ㅎㅎ

profile

노짱 2015-04-12 00:01:23

우아앗 감사합니다~^^ zip 파일은 다운로드가 안되네요 ㅠ

profile

이세영 2015-10-19 18:37:25

오 이거 꼭 따라해 봐야지~

profile

송덕원 2015-11-10 16:07:50

사진이 깨져있어요. 복구 가능하신가요?

profile

권오균 2016-07-31 16:17:37

유시온님 아두이노 공부하고있는 학생입니다. 유시온님의 AirMouse 자료에 너무 감탄하고갑니다. 꼭 따라해보고싶습니다. 그런데 사진이랑 .zip 파일이 다운이안되는데 혹시 글 다시 수정해주실수 있는지요 아니면 jrdhrbs@naver.com 로 메일보내주시면 감사드리겠습니다. 연락 바랍니다.

profile

기똥 2017-04-02 15:08:50

안녕하세요? 전자종합설계 프로젝트를 하고 있는 학생입니다. 에어마우스 관련 기술지원때문에 그렇습니다. ws0010@nate.com 메일좀 부탁드립니다.