MPU6050 传感器在单个芯片上具有许多功能。它由一个MEMS加速度计,一个MEMS陀螺仪和温度传感器组成。该模块在将模拟值转换为数字时非常准确,因为每个通道都有16位的模数转换器硬件。该模块能够同时捕获x,y和z通道。它具有一个I2C接口,可与主机控制器进行通信。这个 MPU6050模块是具有两个加速度计和陀螺仪的小型芯片。对于无人机,机器人,运动传感器等许多应用而言,这是非常有用的设备。也称为 陀螺仪或三轴加速度计。
今天,在本文中,我们将将该MPU6050与Raspberry Pi进行接口连接,并显示16x2 LCD上的值。
所需组件:
- 树莓派
- MPU-6050
- 10K锅
- 跳线
- 面包板
- 电源供应
MPU6050陀螺仪传感器:
MPU-6050 是单芯片中的8针6轴陀螺仪和加速度计。默认情况下,该模块可用于I2C串行通信,但可通过配置其寄存器将其配置为SPI接口。对于I2C,它具有SDA和SCL线。几乎所有引脚都是多功能的,但在这里我们仅使用I2C模式引脚进行操作。
引脚配置:
Vcc:- 此引脚用于相对于地面为MPU6050模块供电
GND: 这是接地引脚
SDA: -SDA引脚用于控制器和mpu6050模块之间的数据
SCL: -SCL引脚用于时钟输入
XDA:- 这是传感器I2C SDA数据线,用于配置和读取外部传感器((在本例中未使用)(可选))
XCL:- 这是用于配置和读取外部传感器的传感器I2C SCL时钟线((在本例中未使用)((可选))
ADO: -I2C从站地址LSB(在我们的情况下不适用)
INT:- 中断引脚,用于指示数据就绪。
我们之前已经将MPU6050与Arduino进行了接口。
描述:
在本文中,我们将使用带Raspberry Pi的MPU6050在LCD上显示 温度,陀螺仪和加速度计的读数 。如果您不熟悉Raspberry Pi,请阅读Raspberry Pi教程部分,了解Raspberry Pi入门。
在这个项目中,我们首先 在LCD上显示了温度值,一段时间后显示了 陀螺仪值 ,然后一段时间后,获得了 加速度计读数 ,如下图所示:
电路图和说明:
电路图中, 用于与覆盆子裨接口MPU6050,很简单这里我们已经使用LCD和MPU6050。一个10k的电位器用于控制LCD的亮度。与MPU6050相连,我们完成了4个连接,其中将MPU6050的3.3v电源和地连接到Raspberry Pi的3.3v和地。MPU6050的SCL和SDA引脚与Raspberry的物理引脚3(GPIO2)和引脚5(GPIO3)连接。LCD的RS,RW和EN直接连接到GPIO18和树莓派的23。数据引脚直接连接到数字引脚号GPIO24,GPIO25,GPIO8和GPIO7。在此处了解有关将LCD与Raspberry Pi接口的更多信息。
为MPU6050陀螺仪传感器配置Raspberry Pi:
在开始编程之前,我们需要使用给定的方法启用Raspberry Pi的i2c:
步骤1:启用I2C通信
在安装Adafruit SSD1306库之前,我们需要在Raspberry Pi中启用I2C通信。
为此,请在Raspberry Pi控制台中输入:
须藤raspi -config
然后将出现一个蓝屏。现在选择界面选项
之后,我们需要选择I2C
之后,我们需要选择是,然后按Enter,然后单击确定
此后,我们需要通过发出以下命令来重新启动树莓派:
SODO重启
步骤2:安装python-pip和GPIO库
sudo apt-get install build-essential python-dev python-pip
之后,我们需要安装树莓派GPIO库
sudo pip安装RPi.GPIO
步骤3:安装 smbus 库
最后,我们需要使用给定命令在Raspberry Pi中安装 smbus 库:
须藤apt-get install python-smbus
步骤4:安装库MPU6050
之后,我们需要使用给定的命令安装MPU6050库
须藤点安装MPU6050
现在我们可以在示例中找到示例代码。用户可以通过直接上传到Raspberry Pi来测试该代码,也可以根据需要对其进行自定义。在这里,我们已在16x2 LCD上显示MPU6050的X,Y和Z轴值。您可以在本教程的末尾找到完整的Python代码。
编程说明:
最后,给出了完整的Python代码,我们在其中解释了代码的几个重要部分。
在Python程序中,我们导入了一些必需的库,例如时间,smbus和GPIO。
导入smbus导入时间导入RPi.GPIO为gpio
此后,我们需要获取一些寄存器地址以配置MPU6050并从中获取值。我们还采用了一些变量来校准和初始化I2C的总线。
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x45总线地址(0x45 GYRO_Z = 0) AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
然后,我们编写了一些用于驱动16x2LCD的函数,例如 def begin(),def cmd(ch),def write(ch),def Print(str),def clear()等 。您可以进一步检查LCD与Raspberry Pi的接口。
此后,我们需要初始化MPU6050模块
def InitMPU():bus.write_byte_data(Device_Address,DIV,7)bus.write_byte_data(Device_Address,PWR_M,1)bus.write_byte_data(Device_Address,CONFIG,0)bus.write_byte_data(Device_Address,GYRO_CONFIG,24)bus.write_byte_data(Device_Address,Device_Address ,INT_EN,1)time.sleep(1)
此后,我们需要编写一些函数以从MPU6050读取值并将其显示在LCD上。给定功能用于从MPU6050读取数据
def readMPU(addr):高= bus.read_byte_data(Device_Address,addr)低= bus.read_byte_data(Device_Address,addr + 1)value =((高<< 8)-低)if(值> 32768):值=值-65536返回值
给定功能用于读取加速度计和陀螺仪数据
def accel(): x = readMPU(ACCEL_X) y = readMPU(ACCEL_Y) z = readMPU(ACCEL_Z) Ax =(x / 16384.0-AxCal) Ay =(y / 16384.0-AyCal) Az =(z / 16384.0-AzCal) #print“ X =” + str(Ax) display(Ax,Ay,Az) time.sleep(.01) def gyro():全局GxCal全局GyCal全局GzCal x = readMPU(GYRO_X)y = readMPU(GYRO_Y)z = readMPU(GYRO_Z)Gx = x / 131.0-GxCal Gy = y / 131.0-GyCal Gz = z / 131.0-GzCal #print“ X =” + str(Gx)display(Gx,Gy,Gz)time.sleep(。 01)
之后,我们编写了一个温度读取功能
def temp():tempRow = readMPU(TEMP)tempC =(tempRow / 340.0)+ 36.53 tempC =“%。2f”%tempC打印tempC setCursor(0,0)Print(“ Temp:”)Print(str(tempC) )time.sleep(.2)
def calibrate() 函数用于校准MPU6050,而 def display() 函数用于在LCD上显示值。在下面提供的完整代码中检查这些功能。
此后,我们启动了LCD,初始化并校准了MPU6050,然后在 while 循环中,我们从MPU温度,加速度计和陀螺仪中调用了所有这三组值,并通过LCD显示了它们。
开始(); Print(“ MPU6050 Interface”)setCursor(0,1)Print(“ Circuit Digest”)time.sleep(2)InitMPU()calibrate()而1:InitMPU()clear()对于范围(20)中的i: ()clear()打印(“ Accel”)time.sleep(1)for范围(30)中的i:accel()clear()打印(“ Gyro”)time.sleep(1)for i范围(30) :陀螺仪()
MPU6050陀螺仪和加速度计 均用于检测任何设备的位置和方向。陀螺仪利用地球重力来确定x,y和z轴位置,并且加速度计会根据运动的变化率进行检测。我们已经在许多项目中将加速计与Arduino一起使用,例如:
- 基于加速度计的手势控制机器人
- 基于Arduino的车辆事故警报系统
- 使用Arduino的地震探测器警报