体感游戏手柄

来自Microduino Wikipedia
Hustshenyang@126.com讨论 | 贡献2015年7月19日 (日) 05:50的版本 (Created page with "{{Language| 体感游戏手柄}} {| style="width: 800px;" |- | ==目的== 通过体感模拟键盘W、A、S、D按键,可以控制游戏。 ==原理== 利用三轴加速度...")
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
Language English

目的

通过体感模拟键盘W、A、S、D按键,可以控制游戏。

原理

利用三轴加速度传感器MPU6050检测手柄的运动状态变化,然后利用Microduino-CoreUSB的模拟键盘功能模拟W、A、S、D按键。


设备

模块 数量 功能
Microduino-CoreUSB/zh 1 核心板
Microduino-10DOF/zh 1 矢量传感器模块

搭建硬件

  • Setup 1:将CoreUSB接到电脑。打开示例程序,选择好板卡和串口下载程序。

Motion_Handle

  • Setup 2:将CoreUSB与10DOF叠堆。
  • Setup 3:将CoreUSB接到电脑,此时电脑会识别到一个键盘,在设备管理器会枚举出“HID Keyboard Device”设备。
Microduino-sensorhub rule.JPG

软件调试

代码说明

  • 控制变量初始化:
MPU6050 accelgyro;   //三轴加速度传感器
int ax,ay,az;       //三轴加速度变量
float Ax,Ay,Az;

void setup(){
  Serial.begin(9600);
  Keyboard.begin();      //模拟键盘初始化 
  Serial.println("Initializing I2C devices...");
  accelgyro.initialize();     //三轴加速度传感器初始化
    // verify connection 
  Serial.println("Testing device connections...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}
  • 判断手柄的运动状态。手柄向左,右,前,后摆,分别对应按键A,D,W,S。
   void loop() {
    accelgyro.getAcceleration(&ax, &ay, &az); 
    Ax = ax/16384.00;         //计算X轴加速度
    Ay = ay/16384.00;         //计算Y轴加速度
    Az = az/16384.00;         //计算Z轴加速度
    if(Ay >= 0.6 )            //手柄向左摆
    {
      Keyboard.press('A');    //按键‘A’    
    }
    else if(Ay <= -0.6)       //手柄向右摆
    {
      Keyboard.press('D');   //按键‘D’
    }
    else if(Ax >= 0.6)       //手柄向前摆
    {
      Keyboard.press('S');   //按键‘S’
    }
    else if(Ax <= -0.6)     //手柄向后摆
    {
       Keyboard.press('W'); //按键‘W’
    } 
    else
    {
        Keyboard.releaseAll();  //释放按键
    }   
    delay(200); 
}

结果

在电脑上打开记事本,将CoreUSB连接到电脑上,想手柄向左摆,记事本上会持续打印出字母A,手柄再摆回原位置,记事本停止打印,其他按键同理。

视频