秋月電子で3方向加速度センサー(Kionix KXR94-2050)を遊びました。このセンサーはX、Y、Z三つの方向での検出した変動値をアナログとして出力できるため、ArduinoやAVRマイコンのAD変換端子付のPINに接続し、そのままデータを読み込めます。さらにArduinoの場合COM接続もArduinoボードに搭載されているため、PC側はCOMポートの入力内容を分析し動きを画面に描画できます。
ArduinoからCOMポート経由で送信する際にデータをX、Y、Zの3方向カンマ付で送信します。
12,56,31 63,43,3
Arduino側ソースコード
送信用コードは以下の通りです。(Arduino言語)
// 入力ピン定義
// センサーの出力ピンをArduinoのアナログ入力ピンに接続する必要がある
#define AX 1
#define AY 2
#define AZ 3
void setup()
{
  // シリアル通信を初期化
  Serial.begin(9600);
}
void loop()
{
  unsigned int x = 0, y = 0, z = 0;
 
  while(1)
  {
    x = analogRead(AX);
    y = analogRead(AY);
    z = analogRead(AZ);
 
    // 99回サンプリング
    for (int i=0; i < 99; i++)
    {
      x += analogRead(AX); y += analogRead(AY); z += analogRead(AZ);
    }
    // 平均値を計算
    x /= 100; y /= 100; z /= 100;
    // 計算した平均値をシリアルに出力
    Serial.print(x, DEC);
    Serial.print(", ");
    Serial.print(y, DEC);
    Serial.print(", ");
    Serial.println(z, DEC);
 
    delay(10);
  }
}
Windows側ソースコード
受信用PC側のコードがデータを分析し画面に表示します。(C#言語)
// COM23を開く
SerialPort sp = new SerialPort("COM23");
sp.Open();
while (inputThread.IsAlive)
{
  string line = sp.ReadLine();
  string[] splitted = line.Split(',');
   
  if (splitted.Length > 2)
  {
    // X,Y,Z それぞれのデータを読み込む
    int x = int.Parse(splitted[0]);
    int y = int.Parse(splitted[1]);
    int z = int.Parse(splitted[2]);
    // 画面のポインターを移動する
    axlePanel1.OffsetX += (avgx + x) /2;
    axlePanel1.OffsetY += (avgy - y) /2;
    axlePanel1.OffsetZ += (avgz - z) /2;
    axlePanel1.Invalidate(false);
  }
}
例外
COMポートが開けない、データを読み込めない際のエラーの表示例:

このエラーが表示した場合、COMポートを確認し再度お試しください。
サンプル
ネコ技術がC#で作成した描画プログラムを公開します。ダウンロードはこちらです。
実際の動作の様子はこちら:
以上
(最後更新:2014年10月28日)
 
	
