0

I have a problem with MPU6050 gyroscope, and Raspberry Pi computer. My project has a function for MPU. I use this code:

import time
import smbus            

def mpu(mpudat_m):
    PWR_MGMT_1   = 0x6B
    SMPLRT_DIV   = 0x19
    CONFIG       = 0x1A
    GYRO_CONFIG  = 0x1B #FS_SEL
    INT_ENABLE   = 0x38
    ACCEL_XOUT_H = 0x3B
    ACCEL_YOUT_H = 0x3D
    ACCEL_ZOUT_H = 0x3F
    GYRO_XOUT_H  = 0x43
    GYRO_YOUT_H  = 0x45
    GYRO_ZOUT_H  = 0x47


    def MPU_Init():
        #write to sample rate register
        bus.write_byte_data(Device_Address, SMPLRT_DIV, 7)
        
        #Write to power management register
        bus.write_byte_data(Device_Address, PWR_MGMT_1, 1)
        
        #Write to Configuration register
        bus.write_byte_data(Device_Address, CONFIG, 0)
        
        #Write to Gyro configuration register
        bus.write_byte_data(Device_Address, GYRO_CONFIG, 0b0)
        
        #Write to interrupt enable register
        bus.write_byte_data(Device_Address, INT_ENABLE, 1)


    def read_raw_data(addr):
        #Accelero and Gyro value are 16-bit
            high = bus.read_byte_data(Device_Address, addr)
            low = bus.read_byte_data(Device_Address, addr+1)
        
            #concatenate higher and lower value
            value = ((high << 8) | low)
            
            #to get signed value from mpu6050
            if(value > 32768):
                    value = value - 65536
            return value


    bus = smbus.SMBus(1)    # or bus = smbus.SMBus(0) for older version boards
    Device_Address = 0x68   # MPU6050 device address

    MPU_Init()

    print (" Reading Data of Gyroscope and Accelerometer")
    timer=0
    Gx=0
    Gy=0
    Gz=0

    while True:
        timer=0.01
    
        #Read Accelerometer raw value
        acc_x = read_raw_data(ACCEL_XOUT_H)
        acc_y = read_raw_data(ACCEL_YOUT_H)
        acc_z = read_raw_data(ACCEL_ZOUT_H)
        #Read Gyroscope raw value
        gyro_x = read_raw_data(GYRO_XOUT_H)
        gyro_y = read_raw_data(GYRO_YOUT_H)
        gyro_z = read_raw_data(GYRO_ZOUT_H)
        #Full scale range +/- 250 degree/C as per sensitivity scale factor
        Ax = acc_x/16384.0
        Ay = acc_y/16384.0
        Az = acc_z/16384.0

        Gx = gyro_x/131
        Gy = gyro_y/131
        Gz = gyro_z/131
        '''
    FS_SEL | Full Scale Range   | LSB Sensitivity
    -------+--------------------+----------------
    0      | +/- 250 degrees/s  | 131 LSB/deg/s
    1      | +/- 500 degrees/s  | 65.5 LSB/deg/s
    2      | +/- 1000 degrees/s | 32.8 LSB/deg/s
    3      | +/- 2000 degrees/s | 16.4 LSB/deg/s
    '''


        print ("Gx=%.2f" %Gx, u'\u00b0'+ "/s", "\tGy=%.2f" %Gy, u'\u00b0'+ "/s", "\tGz=%.2f" %Gz, u'\u00b0'+ "/s", "\tAx=%.2f g" %Ax, "\tAy=%.2f g" %Ay, "\tAz=%.2f g" %Az)     


        time.sleep(.01)
mpu(0)

...and I read in terminal this datas:

Gx=3.23 °/s     Gy=1.66 °/s     Gz=0.14 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.37 °/s     Gy=1.79 °/s     Gz=0.23 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.14 g
Gx=3.25 °/s     Gy=1.67 °/s     Gz=0.34 °/s     Ax=0.97 g       Ay=0.18 g       Az=0.15 g
Gx=3.27 °/s     Gy=1.55 °/s     Gz=0.22 °/s     Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=3.46 °/s     Gy=1.67 °/s     Gz=0.42 °/s     Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=3.32 °/s     Gy=1.66 °/s     Gz=0.21 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.18 °/s     Gy=1.57 °/s     Gz=0.41 °/s     Ax=0.98 g       Ay=0.18 g       Az=0.14 g
Gx=3.30 °/s     Gy=1.63 °/s     Gz=0.27 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.14 g
Gx=3.15 °/s     Gy=1.67 °/s     Gz=0.37 °/s     Ax=0.98 g       Ay=0.18 g       Az=0.16 g
Gx=3.28 °/s     Gy=1.54 °/s     Gz=0.37 °/s     Ax=0.98 g       Ay=0.16 g       Az=0.14 g
Gx=3.34 °/s     Gy=1.44 °/s     Gz=0.29 °/s     Ax=0.97 g       Ay=0.17 g       Az=0.15 g
Gx=3.38 °/s     Gy=1.54 °/s     Gz=0.40 °/s     Ax=0.97 g       Ay=0.17 g       Az=0.14 g
Gx=3.34 °/s     Gy=1.60 °/s     Gz=0.62 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.35 °/s     Gy=1.50 °/s     Gz=0.23 °/s     Ax=0.97 g       Ay=0.16 g       Az=0.15 g
Gx=3.29 °/s     Gy=1.72 °/s     Gz=0.31 °/s     Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=3.24 °/s     Gy=1.61 °/s     Gz=0.34 °/s     Ax=0.98 g       Ay=0.19 g       Az=0.16 g
Gx=3.28 °/s     Gy=1.70 °/s     Gz=0.40 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.37 °/s     Gy=1.63 °/s     Gz=0.20 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.16 °/s     Gy=1.34 °/s     Gz=0.24 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.37 °/s     Gy=1.49 °/s     Gz=0.30 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.16 g
Gx=3.39 °/s     Gy=1.56 °/s     Gz=0.18 °/s     Ax=0.98 g       Ay=0.19 g       Az=0.16 g
Gx=3.40 °/s     Gy=1.71 °/s     Gz=0.31 °/s     Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=3.13 °/s     Gy=1.63 °/s     Gz=0.37 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.40 °/s     Gy=1.70 °/s     Gz=0.21 °/s     Ax=0.97 g       Ay=0.19 g       Az=0.13 g
Gx=3.18 °/s     Gy=1.60 °/s     Gz=0.35 °/s     Ax=0.97 g       Ay=0.19 g       Az=0.15 g
Gx=3.21 °/s     Gy=1.53 °/s     Gz=0.22 °/s     Ax=0.97 g       Ay=0.19 g       Az=0.15 g
Gx=3.27 °/s     Gy=1.66 °/s     Gz=0.21 °/s     Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=3.43 °/s     Gy=1.75 °/s     Gz=0.38 °/s     Ax=0.97 g       Ay=0.17 g       Az=0.15 g
Gx=3.37 °/s     Gy=1.68 °/s     Gz=0.15 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.22 °/s     Gy=1.69 °/s     Gz=0.15 °/s     Ax=0.97 g       Ay=0.16 g       Az=0.14 g
Gx=3.26 °/s     Gy=1.54 °/s     Gz=0.40 °/s     Ax=0.97 g       Ay=0.17 g       Az=0.15 g
Gx=3.37 °/s     Gy=1.41 °/s     Gz=0.22 °/s     Ax=0.97 g       Ay=0.18 g       Az=0.15 g
Gx=3.15 °/s     Gy=1.71 °/s     Gz=0.21 °/s     Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=3.47 °/s     Gy=1.61 °/s     Gz=0.28 °/s     Ax=0.97 g       Ay=0.17 g       Az=0.15 g
Gx=3.21 °/s     Gy=1.56 °/s     Gz=0.33 °/s     Ax=0.98 g       Ay=0.18 g       Az=0.13 g
Gx=3.24 °/s     Gy=1.60 °/s     Gz=0.27 °/s     Ax=0.98 g       Ay=0.18 g       Az=0.15 g
Gx=3.22 °/s     Gy=1.72 °/s     Gz=0.27 °/s     Ax=0.98 g       Ay=0.19 g       Az=0.14 g

Why? I calculate the real data, if FS_SEL (0x1b) == 0. I write this register 0, but not good is this. I test, what is the result, if I delete the calculate. So this is the natur readed datas.

Gx=438.00 °/s   Gy=212.00 °/s   Gz=48.00 °/s    Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=429.00 °/s   Gy=234.00 °/s   Gz=38.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.13 g
Gx=438.00 °/s   Gy=231.00 °/s   Gz=34.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.13 g
Gx=428.00 °/s   Gy=211.00 °/s   Gz=36.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=418.00 °/s   Gy=196.00 °/s   Gz=15.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=415.00 °/s   Gy=198.00 °/s   Gz=53.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.14 g
Gx=429.00 °/s   Gy=211.00 °/s   Gz=62.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=451.00 °/s   Gy=222.00 °/s   Gz=29.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=443.00 °/s   Gy=219.00 °/s   Gz=35.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=416.00 °/s   Gy=215.00 °/s   Gz=46.00 °/s    Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=444.00 °/s   Gy=190.00 °/s   Gz=-254.00 °/s  Ax=0.97 g       Ay=0.16 g       Az=0.14 g
Gx=447.00 °/s   Gy=221.00 °/s   Gz=36.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=431.00 °/s   Gy=208.00 °/s   Gz=35.00 °/s    Ax=0.97 g       Ay=0.16 g       Az=0.15 g
Gx=444.00 °/s   Gy=184.00 °/s   Gz=34.00 °/s    Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=440.00 °/s   Gy=206.00 °/s   Gz=24.00 °/s    Ax=0.98 g       Ay=0.18 g       Az=0.15 g
Gx=445.00 °/s   Gy=208.00 °/s   Gz=6.00 °/s     Ax=0.98 g       Ay=0.19 g       Az=0.14 g
Gx=446.00 °/s   Gy=190.00 °/s   Gz=29.00 °/s    Ax=0.97 g       Ay=0.16 g       Az=0.13 g
Gx=432.00 °/s   Gy=204.00 °/s   Gz=39.00 °/s    Ax=0.99 g       Ay=0.17 g       Az=0.15 g
Gx=439.00 °/s   Gy=209.00 °/s   Gz=37.00 °/s    Ax=0.98 g       Ay=0.16 g       Az=0.14 g
Gx=420.00 °/s   Gy=203.00 °/s   Gz=52.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=451.00 °/s   Gy=217.00 °/s   Gz=36.00 °/s    Ax=0.98 g       Ay=0.16 g       Az=0.14 g
Gx=435.00 °/s   Gy=187.00 °/s   Gz=51.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.14 g
Gx=428.00 °/s   Gy=198.00 °/s   Gz=8.00 °/s     Ax=0.97 g       Ay=0.19 g       Az=0.15 g
Gx=445.00 °/s   Gy=178.00 °/s   Gz=38.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.14 g
Gx=449.00 °/s   Gy=191.00 °/s   Gz=48.00 °/s    Ax=0.98 g       Ay=0.16 g       Az=0.15 g
Gx=433.00 °/s   Gy=197.00 °/s   Gz=36.00 °/s    Ax=0.97 g       Ay=0.17 g       Az=0.15 g
Gx=431.00 °/s   Gy=206.00 °/s   Gz=50.00 °/s    Ax=0.97 g       Ay=0.17 g       Az=0.15 g
Gx=423.00 °/s   Gy=202.00 °/s   Gz=37.00 °/s    Ax=0.97 g       Ay=0.17 g       Az=0.15 g
Gx=431.00 °/s   Gy=221.00 °/s   Gz=51.00 °/s    Ax=0.98 g       Ay=0.18 g       Az=0.15 g
Gx=431.00 °/s   Gy=190.00 °/s   Gz=37.00 °/s    Ax=0.98 g       Ay=0.17 g       Az=0.15 g
Gx=414.00 °/s   Gy=2.00 °/s     Gz=33.00 °/s    Ax=0.97 g       Ay=0.17 g       Az=0.15 g

If distribute this ~450, ~200, and ~35 is this good? I'm open for all new solutions. In my project required the gyro tilt in degrees° (if good the °/s value, this is easy), and accelerometer datas (this works perfect).

Thanks! My English isn't perfect, sorry.

Domkrt
  • 85
  • 8
  • 1
    It is not clear exactly what you are asking? Which calculate are you deleting when you get the second set of results? – itprorh66 Jan 14 '21 at 21:42
  • @itprorh66 I delete this: `Gx = gyro_x/131` (also y and z axis) and I change to this: `Gx = gyro_x #/131`. My question is: How can I calculate, or read the real data in degrees. (If I have the °/sec datas, can I calculate degrees) – Domkrt Jan 15 '21 at 11:01
  • 1
    Check out this article [Convert Acceleration To Angle From MPU6050 I2C Sensor](https://www.hackster.io/mitov/convert-acceleration-to-angle-from-mpu6050-i2c-sensor-ca6e4e), it may provide the answers you are looking for. – itprorh66 Jan 15 '21 at 15:03

0 Answers0