Arduino I2C + 气压传感器LPS25H

LPS25H是ST生产的MEMS数字气压传感器。主要特性有:

  • 测量范围: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 } 
View Code

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

参考资料

LPS25H - STMicroelectronics

转载于:https://www.cnblogs.com/zlbg/p/4237201.html

硬件部件: Arduino Micro × 1个 无焊面包板一半尺寸 × 1个 MPS20N0040D-D压力传感器× 1个 LM358-N运算放大器× 1个 电阻1M欧姆 × 2 连接线套件,22 AWG × 1个 婴儿吸鼻器× 1个 5mm水族馆航空管× 1个 三通气管接头× 1个 软件应用程序和在线服务: Arduino IDE 手动工具和制造机: 剥线钳和切割器,32-20 AWG /0.05-0.5mm²单芯和绞线 在这个项目中,我们将构建一个简单的USB MIDI即插即用呼吸控制器。它的设计使用了容易找到的廉价组件,因此总成本仍然可以承受,并且大大低于商业上的等价物。这是仅使用气压传感器的基本版本,但计划将来对其进行升级以包括咬合和点头/倾斜传感器。 该项目假定您具有一些非常基础的电子学和Arduino知识,但由于不涉及焊接,因此即使是初学者也可以构建它。当然,更高级的用户可以将所有东西焊接在永久原型板上。由于Internet上有出色的教程,因此我不讨论IDE /库的安装以及上载代码的说明。 过采样用于平滑传感器的输入,效果非常好。您还可以根据自己的喜好调整范围,甚至拨入自定义曲线来调整控制器的行为。 由于传感器也可以测量负压,因此当您吸入空气而不是吹气时,会有第二个控制器消息流输出。两种类型的消息都可以由用户设置。例如,您可以将打击设置为弯音向上,而将其设置为弯音向下。默认情况下,两者均设置为控制器编号 建立步骤 1.如图/示意图所示,将Arduino插入面包板。 完整电路: 2.将传感器和运算放大器插入各自的位置,并根据侧面的小凹痕注意方向。 3.将电阻器的支脚切成适当的长度后,将其插入。 4.切/剥实心电缆,并将其放置在各自的位置。为了使这一点更易于理解,我将红色用于5V,将黑色用于接地,将黄色用于信号,但是您当然可以使用所有可用的东西。 5.如图所示,连接烟嘴,管道,三通接头和吸气器。您将需要切割一段“排气管”。 吹口,管道,连接器和排气口已连接: 6.按下三向连接器,使其适合传感器。它应该保持原状。 连接器安装到传感器: 7.安装Arduino IDE,并从“工具”->“管理库”安装所需的两个库(过采样和USB-MIDI)。用USB电缆将Arduino连接到计算机。上传附件代码。 8.应该设置好了,Arduino现在应该在您的DAW /音乐软件中显示为MIDI设备。启用它,并将其与键盘一起路由到支持呼吸控制器的插件。 调试模式下输出值的示例串行绘图仪图(蓝色:黄色,红色:空中绘制): 收割者DAW中的CC消息: 这种设计的一个物理缺点是唾液将不可避免地在管中流动并会引起明显的气流波动。三通连接器用于通过将唾液引导至“排气”管来解决此问题。为了最大程度地减少管道中的残留唾液,请通过调节管道长度来确保从咬嘴到三通接头之间存在连续的坡度。如果管子悬挂在三通接头的水平线以下,唾液将被卡在其下部,从而引起波动。吸气器的婴儿侧部分(包括其过滤器)连接到排气口,以最大程度地减少滴水和噪音,并增加流向传感器的空气流量。 在代码中,您可以根据自己的喜好调整值,包括自定义曲线。注释描述了如何执行此操作。如果发现很难达到127点,则减小最大范围,或者如果太容易,则增大它。无论何时更改值,都将需要重新上传代码。 将Arduino启动后的前几个读数取平均值,以校准其余位置。连接/重置设备时,请勿吹入管子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值