风筝
发表于: 2023-2-23 18:44:24 | 显示全部楼层

您是否想知道您的遥控飞机到达的高度、您驶过的山口的海拔高度,或者您和您的远足伙伴在上次跋涉时达到了多高;廉价的MS5611气压传感器/高度计可以满足您的需求。


硬件概述

该模块的核心是一个非常小、速度极快、精确、低功耗、低噪声的气压传感器,来自瑞士MEAS – MS5611

MS5611-Module-Hardware-Overview-Chip.jpg


MS5611可以测量10mbar到1200mbar的大气压力,在450到1100mbar的压力范围内绝对精度为±1.5mbar。 在该气压范围之外,保证精度为± 2.5 mbar。


该气压传感器针对高度计和变差计进行了优化,高度分辨率为0.012mbar,相当于大约10厘米的高度。


MS5611有一个片上温度传感器,可用于补偿环境变化和校准测量值。 这是一个相当精确的温度传感器,可测量-40˚C 至 +85˚C 范围内的芯片温度,精度为±0.8˚C。


电源

该模块带有MIC5205 3.3V精密稳压器和电压电平转换器,因此您可以放心地与您最喜欢的3.3V或5V微控制器一起使用。

MS5611-Module-Voltage-Regulator-Translator.jpg


MS5611在测量期间功耗小于1.4mA,在待机模式下功耗小于0.15µA。 这种低功耗允许在手机、可穿戴设备或智能手表等电池驱动设备中实施。


数字接口

MS5611通过I2C或SPI进行通信。PS(协议选择)引脚决定哪个接口是可操作的。

MS5611-Module-I2C-SPI-Protocol-Selection-Pin.jpg


将PS引脚拉低选择SPI接口,将PS拉高选择I2C接口。模块上有一个1K的上拉电阻将此引脚拉高,因此默认选择I2C接口。


I2C接口

传感器使用I2C接口与Arduino进行通信。 它支持两个独立的I2C地址:0x77H和0x76。 这允许两个MS5611模块在同一总线上使用或避免与总线上的另一个设备发生地址冲突。

MS5611-Module-I2C-Address-Selection-Pin.jpg


CSB 引脚决定模块的I2C地址。 该管脚内置2.2K下拉电阻。 因此,当您不连接CSB引脚时,默认I2C地址为0x77H,当您将其连接到VCC时,该线被拉高,I2C地址变为0x76H。


SPI接口

该传感器也能够通过SPI进行通信! 要启用SPI接口,请将PS(协议选择)引脚接地。


MS5611模块引脚排列

现在让我们看一下引脚排列。

MS5611-Module-Pinout.png


电源引脚:

VCC 是电源引脚。 您可以将它连接到Arduino的5V输出。

GND 是电源和逻辑引脚的公共地。


SPI逻辑引脚:

SCL 是SPI时钟引脚,它是芯片的输入。

SDA 是串行数据输入 (MOSI) 引脚,用于将数据从微控制器发送到MS5611。

CSB 是片选引脚。

SDO 是串行数据输出 (MISO) 引脚,用于将数据从MS5611发送到您的微控制器。

PS 是协议选择引脚。 将其拉低以启用SPI通信。


I2C逻辑引脚:

SCL 也是I2C时钟引脚,连接到单片机I2C时钟线。

SDA 也是I2C数据引脚,连接到单片机I2 数据线。

CSB 引脚决定了模块I2C地址。

PS 是协议选择引脚。 使其悬空以启用I2C通信。


将MS5611模块连接到Arduino

现在我们已经了解了关于模块的一切,可以开始将它连接到Arduino了!


首先将VCC引脚连接到电源,3V-5V 就可以了。将GND连接到公共地。


将SCL引脚连接到I2C时钟引脚,将SDA引脚连接到Arduino上的I2C数据引脚。在Arduino UNO R3开发板上,SDA和 SCL位于靠近AREF引脚的排针上。 它们也被称为 A5 (SCL) 和 A4 (SDA)。

Wiring-MS5611-Module-with-Arduino.png


一旦您的模块连接到Arduino,就可以编写一些代码了!


库安装

要开始读取传感器数据,您需要安装MS5611库。 它可以从Arduino库管理器获取。


要安装库,请导航至 Sketch > Include Library > Manage Libraries…等待库管理器下载库索引并更新已安装库的列表。

Manage-Libraries.png

输入ms5611过滤搜索结果并安装库。

MS5611-Library-Installation.png


Arduino代码 - 读取气压和温度

下面是一个基本的Arduino草图。 将其上传到您的Arduino。然后应该在串口监视器上看到气压值和温度值。

  1. #include "MS5611.h"

  2. MS5611 MS5611(0x77);

  3. void setup() {
  4.   Serial.begin(115200);
  5.   while(!Serial);

  6.   if (!MS5611.begin()) {
  7.     Serial.println("MS5611 not found, check wiring!");
  8.     while (1);
  9.   }
  10. }

  11. void loop() {
  12.   MS5611.read();
  13.   Serial.print("Temperature: ");
  14.   Serial.print(MS5611.getTemperature(), 2);
  15.   Serial.print("\tPressure: ");
  16.   Serial.print(MS5611.getPressure(), 2);
  17.   Serial.println();
  18.   delay(1000);
  19. }
复制代码

请注意,您需要将串口监视器设置为115200波特率。然后会看到很多显示气压和温度值的数据。 尝试四处移动传感器并注意数据如何变化。

MS5611-Sensor-Arduino-Output.png


代码说明

代码非常简单。首先包含了MS5611.h库,在全局空间中创建了一个对象MS5611 MS5611(0x77)。 请注意,该对象是使用I2C地址作为参数构造的。

  1. #include <Wire.h>

  2. MS5611 MS5611(0x77);
复制代码

setup()函数中,我们初始化与PC的串口通信并调用begin()函数。


MS5611.begin() 函数初始化I2C接口并检查芯片ID是否正确。 然后它使用软复位重置芯片并等待传感器在唤醒后进行校准。

  1. void setup() {
  2.   Serial.begin(115200);
  3.   while(!Serial);

  4.   if (!MS5611.begin()) {
  5.     Serial.println("MS5611 not found, check wiring!");
  6.     while (1);
  7.   }
  8. }
复制代码

loop()函数中,我们调用MS5611.read() 函数来执行读取。 完成后,我们可以使用点运算符访问对象 (MS5611) 的方法。

MS5611.getTemperature() 返回温度读数。

MS5611.getPressure() 返回气压读数。

  1. void loop() {
  2.   MS5611.read();
  3.   Serial.print("Temperature: ");
  4.   Serial.print(MS5611.getTemperature(), 2);
  5.   Serial.print("\tPressure: ");
  6.   Serial.print(MS5611.getPressure(), 2);
  7.   Serial.println();
  8.   delay(1000);
  9. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 17:10 , Processed in 0.077601 second(s), 10 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表