نمایش نتایج: از 1 به 10 از 49
Like Tree23 لایک

موضوع: آی ام یو ( 10dof imu / ahrs ) نه محوره gy-80 - ماژول قطب نمای دیجیتال ، سنسور شتاب

Threaded View

  1. #4
    Junior Member
    تاریخ عضویت
    Sep 2013
    محل سکونت
    Iran
    نوشته ها
    22

    L3G4200D Tripple Axis Gyroscope

    برای راه اندازی سنسور ژیروسکوپ L3G4200D Tripple Axis Gyroscope نیاز به کتابخونه نداره
    برای دریافت سه پارامتر X Y Z
    از کد زیر استفاده کنید

    کد:
    #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);
    
      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;
    }
    ویرایش توسط ehsan_1990 : 02-04-2014 در ساعت 07:34 AM

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO