Arduinoと加速度センサーでGoogleストリートビューを操作

あむちょです。

加速度センサーが転がっていたのでなんとなく。

PR アプリ作ってます

今回使ったのは、Arduino Leonardo。

標準でUSBに対応しているので、Arduinoからキーボード入力やマウス入力が簡単にできます。Arduino UnoでもがんばればUSB入力もできるけどちょっと大変です。

今回は、Arduino Leonardoで加速度センサーから傾きを検知し、USB経由でGoogleストリートビューのキーボードショートッカットを出力させました。

やったこと

加速度センサーの値から傾き検出

今回使った加速度センサーは、だいぶ前に秋月で買ったやつ。

kasokudo

今売っているのとはちょっと違いますがだいたい一緒。秋月、加速度センサー

データシートによると0Gの状態で、電源電圧/2の出力。1Gあたり電源電圧/5の振れ幅だそうです。

傾き0の場合、重力による1GがZ軸にかかり直交するx,y軸に影響はないが、y軸周りでθ回転させた場合、x軸には

1G✖️cos(90-θ)
=1G✖️sin(θ)

の重力加速度かかります。x軸周りで回転させた場合も同様にy軸方向に加速度が加わります。

配線は、加速度センサーに電源とGND、各軸の出力をアナログ入力のA0~A2につなぎます。

haisen

これをA/D変換して読み取ります。A/D変換についてはこちらArduinoでアナログ入力(AD変換)とシリアル通信、ついでにサーボモーター制御

x,y軸同時に回転させた場合はもっと複雑になるけど今回は角度を求めるわけじゃないので、簡単にx,y軸の加速度が閾値を超えたかどうかだけ判別してます。

<br />
  int gX = analogRead(0)-512;<br />
  int gY = analogRead(1)-512;<br />
  int gZ = analogRead(2)-512;</p>
<p>  Serial.print(gX);<br />
  Serial.print(gY);<br />
  Serial.print(gZ);<br />
  Serial.println();</p>
<p>  delay(10);<br />

0gで電源電圧の半分が出力されるので、2.5VにあたるAD変換値、512をひいて-512~512の範囲で扱ってます。

シルアル通信で各軸をかたむけながら、出力される値を見て閾値を100に直接決めました。

Arduinoからキー出力

Google ストリートビューは、キーボードの[←,→]で左右回転、[w,s]で前後に進めるのでArduinoからこれらを出力させます。

まずはsetupないで

<br />
void setup() {<br />
  Keyboard.begin();<br />
}<br />

あとは

Keyboard.write(‘w’);

でキーボードのwを1回押した時と同じ動作になります。←などの特殊なキーは

Keyboard.write(KEY_LEFT_ARROW);

で、ほかのキーはここを参照。Arduino-KeyboardModifiers

今回は、キーボードをずっと押した状態にしたかったので、Keyboard.writeのかわりに

Keyboard.press(‘w’);

を使います。はなした時はKeyboard.release(‘w’)で。

<br />
void loop() {<br />
  int gX = analogRead(0)-512;<br />
  int gY = analogRead(1)-512;<br />
  int gZ = analogRead(2)-512;</p>
<p>  delay(10);</p>
<p>   if(abs(gX) &gt; 100){<br />
    if(gX &gt; 0)Keyboard.press(KEY_LEFT_ARROW);<br />
    else{<br />
      Keyboard.press(KEY_RIGHT_ARROW);<br />
    }<br />
  }<br />
  else{<br />
    Keyboard.release(KEY_LEFT_ARROW);<br />
    Keyboard.release(KEY_RIGHT_ARROW);<br />
  }</p>
<p>  if(abs(gY) &gt; 100){<br />
    if(gY &gt; 0)Keyboard.press(&#8216;s&#8217;);<br />
    else{<br />
      Keyboard.press(&#8216;w&#8217;);<br />
    }<br />
  }<br />
  else{<br />
    Keyboard.release(&#8216;s&#8217;);<br />
    Keyboard.release(&#8216;w&#8217;);<br />
  }</p>
<p>}<br />

最終的にこんな感じになりました。

これを応用すれば、ショートカットをボタン一つで入力とかできるので、ctrl+c、ctrl+v入力装置を作れば

スーパープログラマーになれます


[ad][ad]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です