Cảm biến gia tốc 3 trục GY-50 L3G4200D

120.000₫
Tình trạng: Còn hàng
  • Thương hiệu: VĐ-ELECTRONIC
  • Dòng sản phẩm: DROP SHIP
  • Miễn phí giao hàng trong nội thành Đà Nẵng
Cảm biến Gyro 3 trục L3G4200D được sử dụng để đo góc quay của vật thể gắn cảm biến theo ba trục x, y, z, cảm biến có độ phân giải rất cao (16 bit) có để đo ở tốc độ 2000 độ/giây (dps) ổn định mà không bị ảnh hưởng bởi nhiệt độ hơn nhiều loại...

Cảm biến Gyro 3 trục L3G4200D được sử dụng để đo góc quay của vật thể gắn cảm biến theo ba trục x, y, z, cảm biến có độ phân giải rất cao (16 bit) có để đo ở tốc độ 2000 độ/giây (dps) ổn định mà không bị ảnh hưởng bởi nhiệt độ hơn nhiều loại cảm biến có sẵn trên thị trường hiện nay.

Cảm biến Gyro 3 trục L3G4200D có thể giao tiếp qua giao tiếp I2C hoặc SPI, nếu xử dụng giao tiếp I2C các bạn chỉ cần hàn 1 số jumper để chọn địa chỉ trên board, cảm biến còn tích hợp thêm 32 thanh ghi buffer FIFO giúp bạn có thể truy xuất dữ liệu nhanh và thuận tiện hơn làm giảm độ xử lý của Vi điều khiển.

Thông tin kỹ thuật

  • Nguồn sử dụng: 3~5VDC

  • Điện áp giao tiếp: 3~5VDC

  • Giao tiếp: I2C hoặc SPI

  • Đo 3 trục gia tốc góc.

  • Có thể điều chỉnh độ phân giải (250, 500, 2000 dps)

  • Đo rất nhạy (8.75mdps/LSB)

cảm biến gia tốc 3 trục l3g4200

Code Cảm biến gia tốc 3 trục L3G4200D

//This code is to use with L3G4200 triple axis gyro
//Modified by SurtrTech

#include <Wire.h>

#define CTRL_REG1 0x20
#define CTRL_REG2 0x21
#define CTRL_REG3 0x22
#define CTRL_REG4 0x23
#define CTRL_REG5 0x24

int L3G4200D_Address = 105; //I2C address of the L3G4200D

int x;
int y;
int z;

void setup(){

Wire.begin();
 Serial.begin(9600);

Serial.println("starting up L3G4200D");
 setupL3G4200D(2000); // Configure L3G4200 - 250, 500 or 2000 deg/sec

delay(1500); //wait for the sensor to be ready 
}

void loop(){
 getGyroValues(); // This will update x, y, and z with new values

Serial.print("X:");
 Serial.print(x); //Here you can do some operations befor you use that value
 //For example set it on a surface and substract or add numbers to get 0,0,0 if you want that position to be your reference
 Serial.print(" Y:");
 Serial.print(y);

Serial.print(" Z:");
 Serial.println(z);

delay(100); //Just here to slow down the serial to make it more readable
}

void getGyroValues(){

byte xMSB = readRegister(L3G4200D_Address, 0x29);
 byte xLSB = readRegister(L3G4200D_Address, 0x28);
 x = ((xMSB << 8) | xLSB);

byte yMSB = readRegister(L3G4200D_Address, 0x2B);
 byte yLSB = readRegister(L3G4200D_Address, 0x2A);
 y = ((yMSB << 8) | yLSB);

byte zMSB = readRegister(L3G4200D_Address, 0x2D);
 byte zLSB = readRegister(L3G4200D_Address, 0x2C);
 z = ((zMSB << 8) | zLSB);
}

int setupL3G4200D(int scale){
 //From Jim Lindblom of Sparkfun's code

// Enable x, y, z and turn off power down:
 writeRegister(L3G4200D_Address, CTRL_REG1, 0b00001111);

// If you'd like to adjust/use the HPF, you can edit the line below to configure CTRL_REG2:
 writeRegister(L3G4200D_Address, CTRL_REG2, 0b00000000);

// Configure CTRL_REG3 to generate data ready interrupt on INT2
 // No interrupts used on INT1, if you'd like to configure INT1
 // or INT2 otherwise, consult the datasheet:
 writeRegister(L3G4200D_Address, CTRL_REG3, 0b00001000);

// CTRL_REG4 controls the full-scale range, among other things:

if(scale == 250){
 writeRegister(L3G4200D_Address, CTRL_REG4, 0b00000000);
 }else if(scale == 500){
 writeRegister(L3G4200D_Address, CTRL_REG4, 0b00010000);
 }else{
 writeRegister(L3G4200D_Address, CTRL_REG4, 0b00110000);
 }

// CTRL_REG5 controls high-pass filtering of outputs, use it
 // if you'd like:
 writeRegister(L3G4200D_Address, CTRL_REG5, 0b00000000);
}

void writeRegister(int deviceAddress, byte address, byte val) {
 Wire.beginTransmission(deviceAddress); // start transmission to device 
 Wire.write(address); // send register address
 Wire.write(val); // send value to write
 Wire.endTransmission(); // end transmission
}

int readRegister(int deviceAddress, byte address){

int v;
 Wire.beginTransmission(deviceAddress);
 Wire.write(address); // register to read
 Wire.endTransmission();

Wire.requestFrom(deviceAddress, 1); // read a byte

while(!Wire.available()) {
 // waiting
 }

v = Wire.read();
 return v;
}