亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

BMP180 I2C 数字气压传感器

BMP180 器件是一种数字气压传感器。这在通过 I2C 接口提供对传感器的访问的小模块上可用。这使我们能够以最少的接线轻松将其连接到 Raspberry Pi。

我的模块是一个小型 PCB,尺寸为 15x13mm,带有 5 针接头。其他模块的引脚顺序可能会有所不同,因此请注意标签,以便从 Pi 连接正确的电线。

BMP180 由博世制造,官方 BMP180 数据表包含所有技术细节。

配置 I2C 接口

为了使用此模块,您必须启用 Raspberry Pi 上的 I2C 接口,因为它默认未启用。这是一个相当简单的过程,在我的在 Raspberry Pi 上启用 I2C 接口教程中进行了描述。

连接硬件

下表显示了模块如何连接到 Raspberyr Pi 的 GPIO 接头 (P1)。有关图表,请参阅我的 GPIO 接头指南。

模块 PCB GPIO 接头引脚
VCC 3.3V P1-01
接地 地面 P1-06
SCL I2C SCL P1-05
SDA I2C SDA P1-03
3.3V

这是面包板设置的图表。如果您将模块的四个引脚直接连接到 Pi,则只需要四根母-母线。

面包板图使用了我在 Fritzing 中定义的自定义部件。其他模块可用,它们具有不同的引脚排列,因此如果您的引脚与本教程中显示的引脚不同,请确保将正确的引脚连接到 Pi。

连接设备并为 Pi 通电后,“i2cdetect”命令应显示地址为 0x77 的设备。

示例 Python 脚本

这是一个从传感器读取压力和温度数据的 Python 脚本示例:

<表边界=“0” CELLSPACING =“0” CELLPADDING =“0”> 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 #!/usr/bin/python 导入 smbus 导入 时间 来自 ctypes 导入 c_short 设备 = 0x77 #默认设备I2C地址 #bus =smbus.SMBus(0) # Rev 1 Pi 使用 0 总线 = smbus.SMBus( 1 ) #Rev 2 Pi 使用 1 def convertToString(data): # 将二进制数据转换为二进制数据的简单函数 #一个字符串 返回 str ((数据[ 1 ] + ( 256 * 数据[ 0 ])) / 1.2 ) def getShort(data, index): #从数据中返回两个字节作为有符号的 16 位值 返回 c_short((数据[索引]<< 8 ) + 数据[索引 + 1 ]).value def getUshort(data, index): #从数据中返回两个字节作为无符号的 16 位值 返回 (数据[索引]<< 8 ) + 数据[索引 + 1 ] def readBmp180Id(addr = 设备): #注册地址 REG_ID = 0xD0 (chip_id,chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2 ) 返回 (chip_id,chip_version) def readBmp180(addr = 设备): #注册地址 REG_CALIB = 0xAA REG_MEAS = 0xF4 REG_MSB = 0xF6 REG_LSB = 0xF7 #控制寄存器地址 CRV_TEMP = 0x2E CRV_PRES = 0x34 # 过采样设置 过采样 = 3 #0 - 3 #读取校准数据 #从EEPROM读取校准数据 校准 = bus.read_i2c_block_data(addr, REG_CALIB, 22 ) #将字节数据转换为字值 AC1 = getShort(cal, 0 ) AC2 = getShort(cal, 2 ) AC3 = getShort(cal, 4 ) AC4 = getUshort(cal, 6 ) AC5 = getUshort(cal, 8 ) AC6 = getUshort(cal, 10 ) B1 = getShort(cal, 12 ) B2 = getShort(cal, 14 ) MB = getShort(cal, 16 ) MC = getShort(cal, 18 ) MD = getShort(cal, 20 ) #读取温度 bus.write_byte_data(addr, REG_MEAS, CRV_TEMP) time.sleep( 0.005 ) (msb, lsb) = bus.read_i2c_block_data(addr, REG_MSB, 2 ) UT = (msb << 8 ) + lsb #读取压力 bus.write_byte_data(addr, REG_MEAS, CRV_PRES + (OVERSAMPLE << 6 )) time.sleep( 0.04 ) (msb, lsb, xsb) = bus.read_i2c_block_data(addr, REG_MSB, 3 ) 向上 = ((msb << 16 ) + (lsb << 8 ) + xsb)>> ( 8 - OVERSAMPLE) #优化温度 X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 温度 = (B5 + 8 )>> 4 #细化压力 B6 = B5 - 4000 B62 = B6 * B6>> 12 X1 = (B2 * B62)>> 11 X2 = AC2 * B6>> 11 X3 = X1 + X2 B3 = (((AC1 * 4 + X3) < + 2 )>> 2 X1 = AC3 * B6>> 13 X2 = (B1 * B62)>> 16 X3 = ((X1 + X2) + 2 )>> 2 B4 = (AC4 * (X3 + 32768 ))>> 15 B7 = (向上 - B3) * ( 50000 >> OVERSAMPLE) P = (B7 * 2 ) / B4 X1 = (P>> 8 ) * (P>> 8 ) X1 = (X1 * 3038 )>> 16 X2 = ( - 7357 * P)>> 16 压力 = P + ((X1 + X2 + 3791 )>> 4 ) 返回 (温度 / 10.0 ,压力 / 100.0 ) def main(): (chip_id,chip_version) = readBmp180Id() 打印 "芯片 ID :" ,chip_id 打印 "版本 :" ,chip_version 打印 (温度,压力) = readBmp180() 打印 "温度:" 、温度、 "C" 打印 "压力 :" 、压力、 "mbar" if __name__ = = "__main__" : main()

建议您使用以下命令将此脚本直接下载到您的 Pi 上:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py

或在浏览器中使用此链接。

为了运行它,您可以使用以下命令:

更多详情:BMP180 I2C数字气压传感器


制造工艺

  1. 模拟和数字信号
  2. 英飞凌:超小型气压传感器
  3. 英飞凌推出高精度数字 Turbo MAP 传感器
  4. 数字磁传感器基础
  5. 设计套件通过光学传感器测量血压
  6. 气压传感器提供更高的准确度
  7. Raspberry Pi 温度记录器
  8. Raspberry Pi 1-Wire 数字温度计传感器 (DS18B20)
  9. JAVA 中的树莓派数字霍尔传感器
  10. 数字光传感器
  11. 液态金属可穿戴压力传感器
  12. 什么是压阻式传感器?