프로젝트

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

아두이노 에어마우스

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