ACC4LVでMPU-6050を使ってみる

** LabVIEW Advent Calendar 2016 ** 2016年12月3日の記事です。

MPU-6050は加速度3軸とジャイロ3軸を内蔵したI2C接続のセンサーで、GY521というモジュールで安価に入手することができます。私は安いので海外直送のGY521を使っていますが、中国から送料無料で商売になるのが不思議です。

仕様書にはジャイロはフルスケール(±250, ±500, ±1000, あるいは±2000°/sec (dps)) を16ビットADC、加速度はフルスケール(±2g, ±4g, ±8g, あるいは±16g)を16ビットADCで測定し、OUTPUT DATA RATEはジャイロが最大8kHz、加速度が最大1kHzと書かれています。

Arduinoはお気に入りのESP8266WiFiモジュールです。使い勝手が良いESPr Developer(ESP-WROOM-02開発ボード)を使います。Arduinoでの使い方は購入元のページにリンクがあります。LabVIEWでプログラムを書いてコンパイルして書き込む場合でも、初めにArduinoで基本的な動作を確認するのが良いでしょう。Arduinoが初めての場合はArduino UNOからスタートするのが苦労が少ないと思います。中国直送の互換ボードは安いし、(経験上)きちんと動きますが、USBシリアル変換チップがCH340なので、ネットでドライバーを探してくる必要があるかもしれません。

pb280115

ESPr DeveloperとGY521との接続は4本だけです。
3.3V <—> VCC
GND <—> GND
SCL <—> IO5
SDA <—> IO4

Arduinoでの動作確認のためのサンプルプログラムはArduino Plyagroundのものを使いました。LabVIEWへの移植も基本的にはこれに従いました。

LabVIEWでArduinoにプログラムを書くことができるツールが「Arduino™ Compatible Compiler for LabVIEW」です。名前が長いのでACC4LVと縮めて書いています。使える関数が限定されているサブセット版なので多少の工夫が必要です。例えばU16からI16への変換がありません。どうしましょ。

 

Arduinoのサンプルを素直に移植するとこんな感じです。
mpu-8050d

 

14要素のU8配列を7要素のI16に変換します。U8を2個を上位、下位で合わせてU16になるのですが、I16にする必要があります。U16–>I16の変換はACC4LVには無いので、加算で出力をI16にしています。
sub__rawtoi16d

I16を加速度、温度、ジャイロの単位に変換します。
sub__i16tovalued

シリアル出力用の文字列に変換します。
sub__valuetostringd

 

では、では、