此文翻译了国外大神的作品,不过也有些自己努力的结果,所以勉强就算原创吧,首先用到的硬件:
arduino nano3.0,mpu9150.
软件:
i2cdevlib-master,arduino1.5.2.,unity3d。
连线方法:
mpu9150的scl连接arduino的A5。
mpu9150的sda连接arduino的A4.
mpu9150的int连接arduino的d2.
mpu9150的gnd连接arduino的gnd.
mpu9150的vdd连接arduino的3.3v.
用到的库和源文件如下:
- i2cdevlib-master/Arduino/I2Cdev
- i2cdevlib-master/Arduino/MPU6050
用arduino打开mpu6050就可以了,编译下ok上传就可以了。
接下来用unity3d来工作:
1,启动unity3d,GameObject->create other->cube
2,创建脚本,脚本如下:
using System;
using System.IO.Ports;
using System.Threading;
using UnityEngine;
public class ControlObjectByMPU9150InUnity : MonoBehaviour {
private const string SERIAL_PORT = "COM4";
private const int SERIAL_BAUD_RATE = 115200;
private const int SERIAL_TIMEOUT = 100;
private Thread _readThread;
private static SerialPort _serialPort;
private static bool _continue;
private static Quaternion _handQuaternion = new Quaternion();
void Start() {
_readThread = new Thread(Read);
_serialPort = new SerialPort(SERIAL_PORT, SERIAL_BAUD_RATE);
_serialPort.ReadTimeout = SERIAL_TIMEOUT;
_serialPort.Open();
_continue = true;
_readThread.Start();
}
void Update() {
transform.rotation = _handQuaternion;
}
void OnApplicationQuit() {
_continue = false;
_readThread.Join();
_serialPort.Close();
}
private static void Read() {
string[] values;
float x, y, z, w;
while (_continue) {
if (_serialPort.IsOpen) {
try {
values = _serialPort.ReadLine().Split('\t');
if (values[0] == "quat") {
x = float.Parse(values[2]);
y = -float.Parse(values[4]);
z = float.Parse(values[3]);
w = float.Parse(values[1]);
_handQuaternion.Set(x, y, z, w);
}
} catch (TimeoutException) {
}
}
Thread.Sleep(1);
}
}
}
要注意一点:在unity3d中可能会提示说没有system.io.ports,这是需要修改下unity3d ->player setting->.net2.0,这样就可以了