Arduino I2C + 气压传感器LPS25H

LPS25H是ST生产的MEMS数字气压传感器,一些文档里也叫LPS331AP。主要特性有:

  • 测量范围:260 ~ 1260 hPa绝对气压
  • 分辨率:均方根1 Pa
  • 工作电压:1.7 ~ 3.6 V
  • 功耗:4μA(低分辨率模式)~25μA(高分辨率模式)
  • 数据刷新频率:1 ~ 25 Hz可选择
  • 接口:I2C,三线制/四线制SPI
  • 内置温度补偿
  • 内置24位ADC
  • 内置先入先出(FIFO)存储器
  • 封装:2.5 x 2.5 x 1.0 mm HCLGA-10L

管脚定义

  • VDD:电源,1.7~3.6V
  • GND:地
  • VDD_IO:IO口供电脚,电压小于等于VDD
  • GND_IO:IO口接地脚,需与GND相连
  • Reserved:与GND相连
  • CS:I2C接口(CS=1)选择,或SPI接口片选脚(CS=0)
  • SCL/SPC:I2C接口或SPI接口的时钟线,通过CS脚选择
  • SDA/SDI/SDIO:I2C接口或SPI接口的数据线
  • SA0/SDO:I2C接口地址选择脚,或者SPI接口的数据线
  • INT1:中断输出脚,可编程其触发条件,参见CTRL_REG4寄存器设置

与Arduino的连接

因为传感器IC大多工作在3.3V附近,因此干脆用工作于3.3V/8MHz版本的Arduino Pro Mini进行调试,避免了用UNO时接口电平转换的麻烦。采用I2C接口进行通讯。未利用INT1和FIFO的功能。

LPS25H  Pro Mini 3.3V/8MHz

VDD <------> 3.3V

GND <------> GND

SCL <------>  A5 (SCL)

SDA <------> A4 (SDA)

测试代码

 1 /*
 2     Barometer based on LPS25H sensor and Arduino Pro Mini(3.3V)
 3 */
 4
 5 #include <Wire.h>
 6
 7 #define ADDRESS_LPS25H 0x5D
 8 #define CTRL_REG1 0x20
 9 #define CTRL_REG2 0x21
10 #define PRESS_OUT_XL 0x28
11
12 byte buffer[5];
13
14 boolean ready = false;
15 int tempOut;
16 long presOut;
17 float tempVal;
18 float presVal;
19
20 void setup()
21 {
22     Wire.begin();
23     Serial.begin(9600);
24
25     //power down the device (clean start)
26     Wire.beginTransmission(ADDRESS_LPS25H);
27     Wire.write(CTRL_REG1);
28     Wire.write(0x00);
29     Wire.endTransmission();
30
31     //turn on the sensor, set the one-shot mode, and set the BDU bit
32     Wire.beginTransmission(ADDRESS_LPS25H);
33     Wire.write(CTRL_REG1);
34     Wire.write(0x84);
35     Wire.endTransmission();
36 }
37
38 void loop()
39 {
40     //run one-shot measurement
41     Wire.beginTransmission(ADDRESS_LPS25H);
42     Wire.write(CTRL_REG2);
43     Wire.write(0x01);
44     Wire.endTransmission();
45
46     //wait until the measurement is completed
47     while (ready == false)
48     {
49         delay(5); //conversion time: ~37ms
50         Wire.beginTransmission(ADDRESS_LPS25H);
51         Wire.write(CTRL_REG2);
52         Wire.endTransmission();
53         Wire.requestFrom(ADDRESS_LPS25H, 1);
54         if (Wire.read() == 0x00)
55         {
56             ready = true;
57         }
58         // Serial.println("waiting...");
59     }
60
61     //read the result
62     Wire.beginTransmission(ADDRESS_LPS25H);
63     Wire.write(PRESS_OUT_XL | 0x80); //read multiple bytes
64     Wire.endTransmission();
65
66     Wire.requestFrom(ADDRESS_LPS25H, 5);
67     if (Wire.available() >= 5)
68     {
69         for (int i = 0; i < 5; i++)
70         {
71             buffer[i] = Wire.read();
72         }
73     }
74     ready = false;
75
76     //calculation
77     presOut = (long(buffer[2]) << 16) | (long(buffer[1]) << 8) | long(buffer[0]);
78     presOut = (presOut << 8) >> 8; //PRESS_OUT_H/_L/_XL and is represented as 2’s complement
79     presVal = presOut/4096.0;
80
81     tempOut = (buffer[4] << 8) | buffer[3];
82     tempVal = 42.5 + tempOut/480.0;
83
84     Serial.print(presVal); Serial.print(" hPa\t");
85     Serial.print(tempVal); Serial.println(" `C");
86
87     delay(2000);
88 } 

MCU每隔两秒测量一次气压和温度数据,并通过串口打印结果。

参考资料

LPS25H - STMicroelectronics

时间: 2024-08-06 16:05:29

Arduino I2C + 气压传感器LPS25H的相关文章

Arduino I2C + 温湿度传感器Si7021

  Si7021是Silicon Labs生产的温湿度传感器芯片.其主要特性: 湿度精度:误差典型值+/-2%RH,最大值+/-3%RH(0~80%RH),出厂已校正 温度精度:误差典型值+/-0.3%°C,最大值+/-0.4%°C(-10°C~85°C),出厂已校正 测量范围:温度范围0~100%RH:温度范围最大-40°C~125°C 工作电压:1.9~3.6V 低功耗:工作时150μA,待机时60nA 接口:I2C,最大速率支持400kbps 长期稳定性:湿度≤0.25%RH/yr,温度≤

Arduino I2C + 数字式环境光传感器BH1750FVI

BH1750FVI是日本罗姆(ROHM)半导体生产的数字式环境光传感IC.其主要特性有: I2C数字接口,支持速率最大400KHz 输出量为光照度(Illuminance) 测量范围1~65535 lux,分辨率最小到 低功耗(Power down)功能 屏蔽50/60Hz市电频率引起的光照变化干扰 支持两个I2C地址,通过ADDR引脚选择 较小的测量误差(精度误差最大值+-20%) 电路连接 由于模块本身已经带有了3.3V稳压芯片和I2C电平转换电路,因此可将模块直接与UNO板的I2C接口相连

Arduino I2C + DS1307实时时钟

主要特性 DS1307是Maxim的串行.I2C实时时钟芯片.主要特性有: 工作电压:主电源电压4.5~5.5V,电池电压2.0~3.5V 功耗:电池供电.备份模式时<500nA 接口:I2C,最大速率100kbps 可编程方波输出 电源自动切换.失效检测 内置56字节大小.支持电池备份的RAM 管脚定义 X1.X2: 接32.768kHz晶体,要求晶体负载电容12.5pF Vcc:主电源,范围4.5~5.5V.当需要对DS1307读写时,需要接Vcc. VBAT:接电池,范围2.0~3.5V.

Arduino I2C + 温湿度传感器HTS221

主要特性 HTS221是意法半导体(STMicroelectronics)生产的小体积.数字式温湿度传感器IC.该IC目前在官网仍处在“评估”状态.其主要特性: 工作电压:1.7~3.6V 数据输出频率(ODR)可设:1Hz ~ 12.5Hz 低功耗:2μ[email protected] ODR 温度精度:给出误差典型值+/-0.5°C, 15~40°C:但注明“Typical specifications are not guaranteed.”.无误差最大值信息. 湿度精度:给出误差典型值

Arduino I2C + 三轴加速度计ADXL345

ADXL345是ADI公司生产的三轴数字加速度计芯片,与ST的LIS3DH功能接近.主要特性有: 工作电压:2.0 ~ 3.6V 功耗:待机功耗0.1μA:工作时与数据输出频率(ODR)有关,如ODR<10 Hz时30μA 接口:I2C:三线/四线制SPI 分辨率:可选择,最大13-bit 内置FIFO single tap/double tap检测 自由落体检测 两个可编程中断输出脚 封装:3 x 5 x 1 mm LGA 管脚定义 与Arduino的连接 用工作于3.3V/8MHz版本的Ar

Arduino I2C + AC24C32 EEPROM

主要特性 AC24C32是Atmel的两线制串行EEPROM芯片,根据工作电压的不同,有-2.7.-1.8两种类型.主要特性有: 工作范围:-2.7类型范围4.5~5.5V,-1.8类型1.8~5.5V.本文用的为-2.7类型. 待机功耗:与工作电压有关,见下图 容量:4096 x 8bits,即32k bits 接口:I2C,工作在5V时支持最大时钟频率400kHz,其他电压时100kHz 允许一次写一页(32-byte page write mode) 一次写动作完成的时间:与工作电压有关,

Arduino 寻找I2C地址address

参考:http://henrysbench.capnfatz.com/henrys-bench/arduino-projects-tips-and-more/arduino-quick-tip-find-your-i2c-address/ Arduino Quick Tip:  Find Your I2C Address Contents [show] 1 Don’t Get Hung Up When You Want to Play 2 I2C Scanner By Nick Gammon 3

可编程硬件Arduino初探(2)-神奇的鸡腿multiwii

0.前言 本文以multiwii为引子,重点介绍使用multiwii来完成多轴飞行器飞控的工作. 1.介绍 multiwii是任天堂公司针对wii游戏机的一个体感项目,主要应用于任天堂的wii游戏机遥控器手柄.用于检测玩家的动作,从而完成游戏互动.后来开源. multiwii作为一个最初用于检测遥控器姿态的项目,后被用于研究多轴飞行器\云台等.目前有大量的玩家和学着在对这个项目进行着贡献. 具体内容请自行科普: http://www.multiwii.com/ http://multiwii.o

卡尔曼滤波融合库函数+Arduino实例

-------这篇文章就作为放弃ACM比赛转行到电子设计大赛的开始吧,ACM比赛真的太需要时间了,准确的说对于我这样的菜鸟而言太浪费时间了,但是话说回来两年时间从中真心收获了很多 我是不理解卡尔曼滤波的原理啊,但是用这个库函数做个平衡车是绝对没问题 ,所以不理解没太大问题,只要知道它是用来融合加速度计 和 陀螺仪测定角度的.这个角度相对单纯求得的角度会更加精确,既然我弄不明白滤波的原理,下面我会特别详细的说明一下此库函数用到的变量,毕竟有很多人还是想弄明白的. Q_angle:相对于加速度计的噪