準備
◆Arduino IDE(PCにインストール)
◆Arduino Uno(360円 + 送料170円)
◆できれば、何か電圧レベル変換するもの(N-JFETを使った)
工作開始
◆ 接続します
※(外部抵抗不要)GY-521 MPU-6050の SCL、SDA端子は 4.7kΩでpullUpされています
◆Arduino IDE(PCにインストール)
◆Arduino Uno(360円 + 送料170円)
◆USBケーブル AーBタイプ(100円 + 送料170円)
◆GY-521 MPU-6050 加速度 ジャイロ センサーモジュール
・角速度と加速度と温度の検出
・VCC電圧は5V
◆できれば、何か電圧レベル変換するもの(N-JFETを使った)
工作開始
◆ 接続します
※(外部抵抗不要)GY-521 MPU-6050の SCL、SDA端子は 4.7kΩでpullUpされています
※(外部抵抗不要)Arduino の Wire ライブラリーを利用すると、内部の抵抗を利用して
プルアップしてくれます
◆接続確認します
確認1
確認2(Arduino Uno がつながっているポート)
◆スケッチを書きます
//An Arduino code by dd647
#include <Wire.h>
int GY521Address = 0b1101000;//pin AD0 is logic low
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(GY521Address);
Wire.write(0x6b);//Register_Name Power Management
Wire.write(0b00000010);//Upon power up mode and Clock PLL
Wire.endTransmission();
delay(500);
Wire.beginTransmission(GY521Address);
Wire.write(0x1c);//Register_Name ACCEL_CONFIG
Wire.write(0b00011000);//+-16g mode
Wire.endTransmission();
delay(500);
Wire.beginTransmission(GY521Address);
Wire.write(0x1b);//Register_Name GYRO_CONFIG
Wire.write(0b00000000);//+-250°/s mode
Wire.endTransmission();
delay(500);
}
void loop(){
getData(0x41,0x42,"TEMP");//Register_Name TEMP_OUT
getData(0x3b,0x3c,"ACCELx");//Register_Name ACCEL_XOUT
getData(0x3d,0x3e,"ACCELy");//Register_Name ACCEL_YOUT
getData(0x3f,0x40,"ACCELz");//Register_Name ACCEL_ZOUT
getData(0x43,0x44,"GYROx");//Register_Name GYRO_XOUT_
getData(0x45,0x46,"GYROy");//Register_Name GYRO_YOUT_
getData(0x47,0x48,"GYROz");//Register_Name GYRO_ZOUT_
Serial.println(" ");
delay(500);
}
void getData(int AddressH, int AddressL, char Str[]){
Wire.beginTransmission(GY521Address);
Wire.write(AddressH);
Wire.endTransmission();
Wire.requestFrom(GY521Address, 1);
while(!Wire.available()) {
// waiting
}
int h = Wire.read();
Wire.beginTransmission(GY521Address);
Wire.write(AddressL);
Wire.endTransmission();
Wire.requestFrom(GY521Address, 1);
while(!Wire.available()) {
// waiting
}
int l = Wire.read();
int c = 0;
if (Str == "TEMP"){
c = (256 * h + l)/340+35;//Ofset=35°,LSB/1°=340
}else{
c = 256 * h + l;
}
Serial.print(Str);
Serial.print("=");
Serial.print(c);
Serial.print(" ");
}
#include <Wire.h>
int GY521Address = 0b1101000;//pin AD0 is logic low
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(GY521Address);
Wire.write(0x6b);//Register_Name Power Management
Wire.write(0b00000010);//Upon power up mode and Clock PLL
Wire.endTransmission();
delay(500);
Wire.beginTransmission(GY521Address);
Wire.write(0x1c);//Register_Name ACCEL_CONFIG
Wire.write(0b00011000);//+-16g mode
Wire.endTransmission();
delay(500);
Wire.beginTransmission(GY521Address);
Wire.write(0x1b);//Register_Name GYRO_CONFIG
Wire.write(0b00000000);//+-250°/s mode
Wire.endTransmission();
delay(500);
}
void loop(){
getData(0x41,0x42,"TEMP");//Register_Name TEMP_OUT
getData(0x3b,0x3c,"ACCELx");//Register_Name ACCEL_XOUT
getData(0x3d,0x3e,"ACCELy");//Register_Name ACCEL_YOUT
getData(0x3f,0x40,"ACCELz");//Register_Name ACCEL_ZOUT
getData(0x43,0x44,"GYROx");//Register_Name GYRO_XOUT_
getData(0x45,0x46,"GYROy");//Register_Name GYRO_YOUT_
getData(0x47,0x48,"GYROz");//Register_Name GYRO_ZOUT_
Serial.println(" ");
delay(500);
}
void getData(int AddressH, int AddressL, char Str[]){
Wire.beginTransmission(GY521Address);
Wire.write(AddressH);
Wire.endTransmission();
Wire.requestFrom(GY521Address, 1);
while(!Wire.available()) {
// waiting
}
int h = Wire.read();
Wire.beginTransmission(GY521Address);
Wire.write(AddressL);
Wire.endTransmission();
Wire.requestFrom(GY521Address, 1);
while(!Wire.available()) {
// waiting
}
int l = Wire.read();
int c = 0;
if (Str == "TEMP"){
c = (256 * h + l)/340+35;//Ofset=35°,LSB/1°=340
}else{
c = 256 * h + l;
}
Serial.print(Str);
Serial.print("=");
Serial.print(c);
Serial.print(" ");
}
→
◆シリアルモニタで見ます
重力に反応しています
0 件のコメント:
コメントを投稿