バージョン情報
Arduino Nano , Arduino IDE 1.0.5 , processing 2.2.1 , windows 8.1
3軸加速度センサを使ってみた。
材料
加速度センサ:MPU6050
Arduino nano
参考にしたページ:こちら
回路
Arduino ソース
expampleのMPU6050_raw.inoをほぼそのまま使用。
#include "Wire.h" #include "I2Cdev.h" #include "MPU6050.h" MPU6050 accelgyro; int16_t ax, ay, az; int16_t gx, gy, gz; #define LED_PIN 13 bool blinkState = false; String str_out; void setup() { Wire.begin(); Serial.begin(38400); // initialize device Serial.println("Initializing I2C devices..."); accelgyro.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); } void loop() { // read raw accel/gyro measurements from device accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); str_out = String(ax) + "," + String(ay) + "," + String(az) + "," + String(gx) + "," + String(gy) + "," + String(gz); Serial.println(str_out); // blink LED to indicate activity blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); }
Processing ソース
加速度センサの値(ax,ay,az)の値を使ってBoxを表示させてみた。
cameraの使い方は前回の記事を参照。
シリアル通信の記事はこちらを参照。
import processing.serial.*; PShape box1; PVector v_center, v_camera; Serial myPort; int lf = 10; String str_get_data = null; String buf[]; int ax,ay,az; void setup(){ size(500,500,P3D); v_center = new PVector(0.0,0.0,0.0); v_camera = new PVector(700.0,900.0,700.0); box1 = createShape(BOX,100,100,100); box1.translate(50,50,50); myPort = new Serial(this, "COM5", 38400); } void draw(){ background(200); //枠 noFill(); strokeWeight(1); stroke(0,0,0); translate(250, 250, 250); box(500, 500, 500); translate(-250, -250, -250); //XYZ方向 strokeWeight(3); stroke(255,0,0); line(0,0,0,500,0,0); stroke(0,255,0); line(0,0,0,0,500,0); stroke(0,0,255); line(0,0,0,0,0,500); //オブジェクト配置 shape(box1); //カメラ配置 camera(v_camera.x, v_camera.y, v_camera.z, v_center.x,v_center.y,v_center.z, 0.0, 0.0, -1.0); } void serialEvent(Serial myPort){ str_get_data = myPort.readStringUntil(lf); if (str_get_data != null){ str_get_data = trim(str_get_data); //改行コード取り除き buf = split(str_get_data,","); try{ fill(255,127,0); stroke(0,0,0); ax = int(buf[0])/100*2; ay = int(buf[1])/100*2; az = int(buf[2])/100*2; box1 = createShape(BOX,ax,ay,az); box1.translate(ax/2,ay/2,az/2); } catch(Exception e) { e.printStackTrace(); } } }