読者です 読者をやめる 読者になる 読者になる

wide_snow’s blog

30代の組込みエンジニア(ファーマー)による技術メモの記録

スポンサードリンク

Raspberry Pi 2でI2C (MPU-6050の制御) 動作確認編

Raspberry Piの周辺回路(ペリフェラル)であるI2Cを使用して

6軸センサ(加速度&ジャイロ)を動かす方法について書いていきます。

 

I2Cが有効になっている必要がありますので先に下記の設定を行ってください。

wide-snow.hatenablog.com

 

6軸センサの選択

センサは色々とあると思いますが、今回は下記のMPU-6050を使用します。

 

この基板に付いているセンサはInvensense(インベンセンス)社のものです。

(Invensense社は手ブレ補正用のジャイロセンサを作っていることで有名ですね)

amazonで手頃な価格で手に入るようになっていましたので、これを使うことにしました。

データシートの入手

センサに限らずデバイスを使おうと思った場合、デバイスドライバが必要です。

デバイスドライバがOS毎(今回ならRaspbian)に用意されているのであれば

この作業は必要ないのでしょうが、組込み技術者であれば

マニュアルを読んでから使うべきでしょう・・・。

データシートはMPU-6050 | InvenSenseの下の方に

f:id:wide_snow:20150906204158p:plain

MPU-6000 and MPU-6050 Register Maps and Descriptions

というPDFが置いてあるリンクがありますので入手してください。

(入手しなくても本blogに書いてある程度ならコピペで出来ます)

MPU-6050の接続

MPU-6050をRaspberry Piに接続します。

Raspberry Piの電源をOFFにした後で

1pin - VCC

3pin - SDA

5pin - SCL

6pin - GND

に接続します。

f:id:wide_snow:20150914003441j:plain

f:id:wide_snow:20150914003418j:plain

Raspberry Piの電源をONにし、

pi@raspberrypi ~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                         
pi@raspberrypi ~ $

となっていれば接続が出来ています。

この結果はデバイスのデバイスアドレス(スレーブアドレス)は

0x68であることを示しています。

コマンド(i2cget)でデバイスを制御してみる

C言語Python等を使わなくても

Linuxでは簡易的にデバイスを制御することが出来ます。

試しにコマンドを使用してセンサにアクセスしてみます。

pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 0x75
0x68
pi@raspberrypi ~ $ sudo i2cget -y 1 0x68 0x6B
0x40

0x68はデバイスアドレス、0x75や0x6Bはデータシートに書いてある

レジスタアドレスです。

0x75 : WHO_AM_I

0x6B : PWR_MGMT_1

データシートを見ると、PWR_MGMT_1レジスタ値0x40は

・SLEEP中

・CLKSELはInternal 8MHz oscillatorを使用する

であることが分かります。

これで、デバイスは正常に動作していることが分かりました。

 

次回はPythonを使ってセンサの値を読み込んでみたいと思います。