2016年7月25日月曜日

Arduino と GY-50 L3G4200D ジャイロセンサーモジュール 使ってみた

準備

◆Arduino IDE (PCにインストール)

◆Arduino Uno (360円 + 送料170円) 


◆USBケーブル AーBタイプ (100円+送料170円)


◆GY-50 L3G4200D ジャイロセンサーモジュール (470円 + 送料170円)
・角速度と温度の検出
・VCC電圧は5V
・SCL、SDA電圧は3.3V
・SCL、SDA端子は 10kΩでpullUpされています


◆できれば、何か電圧レベル変換するもの(N-JFETを使った)





  工作開始 
◆ 接続します
(外部抵抗不要)GY-50 L3G4200D SCL、SDA端子は 10kΩでpullUpされています 
※(外部抵抗不要)Arduino の Wire ライブラリーを利用すると、内部の抵抗を利用して プルアップしてくれます

◆接続を確認します
確認1

確認2(Arduino Uno がつながっているポート)

◆スケッチを書きます。Y軸のみ



#include <Wire.h>
int GyroAddress = 0b1101001;
void setup() {
    Serial.begin(9600);
    Wire.begin();
    Wire.beginTransmission(GyroAddress);
    Wire.write(0x20);//Adress to set output selection
    Wire.write(0b00001010);//I set output selection with only Y-axis
    Wire.endTransmission(); 
    delay(1500);
}
void loop(){
    Wire.beginTransmission(GyroAddress);
    Wire.write(0x2B); //(high)Address of Y-axis angular rate data.
    Wire.endTransmission();
    Wire.requestFrom(GyroAddress, 1); // read a byte
    while(!Wire.available()) {
        // waiting
    }
    int yH = Wire.read();
   
    Wire.beginTransmission(GyroAddress);
    Wire.write(0x2A); //(low)Address of Y-axis angular rate data.
    Wire.endTransmission();
    Wire.requestFrom(GyroAddress, 1); // read a byte
    while(!Wire.available()) {
        // waiting
    } 

    int yL = Wire.read();
   
    int y = 256 * yH + yL;
    Serial.print(" angular=");
    Serial.print(y); 

    Wire.beginTransmission(GyroAddress);
    Wire.write(0x26); //Address of temperature
    Wire.endTransmission();
    Wire.requestFrom(GyroAddress, 1); // read a byte
    while(!Wire.available()) {
        // waiting
    }
    int t = Wire.read();

    Serial.print("     temperature=");
    Serial.println(t);
    delay(100);
}


 

◆シリアルモニタで見ます




・角速度も温度も0点調整をやらないといけないようだ。
・温度が上がると数値が下がるようだ。
・割り込みはどうするのだ?
What is Interrupt ?
 Does anyone have some obvious fix / advice / a direction to try?