Interfacing an MPU6050 IMU Sensor with Raspberry Pi
Updated: Sep 27, 2020
The MPU6050 is an IMU(Inertial Measurement Unit) sensor that comes with an Accelerometer, Gyroscope sensor, and a temperature sensor too. It consists of a MEMS accelerometer, a temperature sensor and a MEMS gyro. When converting analogue values to digital, this device is very precise because it has a 16bit analogue to digital converter hardware for each channel. This module is capable of capturing channels x, y and z simultaneously. For interact with the host controller, it has an I2C interface. For many applications, such as drones, robots and motion sensors, this is a very useful unit. It is sometimes referred to as the Triple Axis Accelerometer or Gyroscope.
List of components required:
1. Raspberry Pi
3. Jumping wires
Raspberry Pi: The Raspberry Pi is a series of small single-board computers which was developed by the Raspberry Pi Foundation in the United Kingdom. Early on, the Raspberry Pi project focused on encouraging basic computer science teaching in schools and in developing economies. The original design later became much more popular than expected, selling for uses such as automobiles outside its target group.
MPU-6050: The MPU 6050 is a 6 Degrees of Freedom or a six-axis IMU sensor, which means that it produces six values. Three values for the accelerometer and three for the gyroscope. The MPU 6050 is a MEMS (Micro Electro Mechanical Systems) based sensor.
Jumping wires: Jumper wires are essentially wires with connector pins at either end, allowing them to be used to connect two points to each other without soldering. Jumper wires are usually used for breadboards and other prototyping instruments to make it easy to adjusts circuits.
Breadboard: The breadboard is a rectangular acrylic board with a tonne of tiny holes inside it. Such holes allow you to quickly insert electronic components into the model of an electronic circuit, such as this one with a battery, a switch, a resistor, and an LED.
In #MPU6050 we have 8 eight pins on them in that 8 pins we VCC, SCL, ground and SDA evidence. Now we will setup i2c communication format with the raspberry pi board here VCC is connected to the 5-volt pin, ground is #connected with ground, SCL with SCL pin and SDA pin with SDA pin on the raspberry pi. This sensor can we used to measure velocity, rotational velocity and many other parameters.
import smbus #import SMBus module of I2C
from time import sleep #import
#some MPU6050 Registers and their Address
PWR_MGMT_1 = 0x6B
SMPLRT_DIV = 0x19
CONFIG = 0x1A
GYRO_CONFIG = 0x1B
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
#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, 24)
#Write to interrupt enable register
bus.write_byte_data(Device_Address, INT_ENABLE, 1)
#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
bus = smbus.SMBus(1) # or bus = smbus.SMBus(0) for older version boards
Device_Address = 0x68 # MPU6050 device address
print (" Reading Data of Gyroscope and Accelerometer")
#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.0
Gy = gyro_y/131.0
Gz = gyro_z/131.0
print ("Gx=%.2f" %Gx,"Gy=%.2f" %Gy,"Gz=%.2f" %Gz,"Ax=%.2f g" %Ax,"Ay=%.2f g" %Ay,"Az=%.2f g" %Az)
Download code from here
The above picture is about i2c communication in raspberry pi.
After running program it reads data of accelerometer and gyroscope.
Video explanation of Interfacing MPU6050 sensor with raspberry pi for better understanding