3_8_I2C 温湿度传感器实验|学习笔记

简介: 快速学习3_8_I2C 温湿度传感器实验。

开发者学堂课程【HaaS 物联网应用开发课程3_8_I2C 温湿度传感器实验】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/801/detail/13834


3_8_I2C 温湿度传感器实验

 

内容介绍

一、HaaS EDU K1 I2c 介绍

二、温湿度传感器介绍

三、I2C HAL API 介绍

四、温湿度传感器实验

 

一、HaaS EDU K1 I2c 介绍

本节课的主题是 I2C 接口的温湿度传感器,这本节课程中先给大家介绍一下 HaaS EDU K1 上的 I2c 接口,接下来会给大家介绍 HaaS EDU 上面内置的温湿度传感器,然后说明 AliOS Things 上面怎样使用 I2C HAL 的接口,最后通过I2C HAL 的接口读取 HaaS EDU K1 上面温湿度传感器的信息。

图片49.png

HaaS EDU K1  采用的是 HaaS 1000芯片,这颗芯片内置了两组 I2C 的总线接口,支持最高速度为1.4M,按照 I2C 协议的规定属于快速Plus的级别,HaaS EDU K1 上内置的所有传感器都接到了第二组的接口上,扩展口上的 I2C 也使用的是I2C1的接口,左边这个图是今天要讲的 I2C 温湿度传感器的电路的原理图,可以看到它接到的其实就 I2C SDA1和 I2C SCL1 这一组接口,然后右边这个图就是扩展口的一个原理图,那这边也可以看到I2C 对应的也是I2C1这一组接口。

 

二、温湿度传感器介绍

现在看一下温湿度传感器的原理以及它的应用,温湿度传感器多以温湿度一体化的探头作为测温元件,将温度和湿度信号采集出来,经过稳压滤波、运算放大、非线性校正、转换、航流及反向保护等电路处理后,转换成与温度或者是湿度线性关系的电流或者电压信号。

图片48.png

关于温湿度传感器的实际应用场景大家可以先想一想,其实周边有非常多的应用场景,比如说在食品行业食品行业中,温湿度传感器对食品的存储来说非常重要,温湿度的不当会带来食物的变质,引发食品安全问题,温湿度的监控有利于相关人员及时对食品的质量进行把控。

古董保存档案管理方面也是有非常多的应用的,比如说国家的博物馆里边会看到有一个玻璃罩子把它罩起来,然后里边其实是有用恒温恒湿的环境去对古董进行保护的,它里边就会用到温湿度传感器。再比如说最早在物联网课程介绍中有提到的温室大棚,植物的生长对于温湿度的要求也极为严格,在不当的温湿度条件下,动植物的生长都会停止,甚至是死亡,利用温湿度传感器、配合气体传感器、光照传感器等可以组成一个数字化的大棚,然后在这里边智能的控制大棚里边的相关参数,使大棚里面的效率达到最大化。在工业控制里面主要是用作暖通空调或者是机房的监控等等,在药品管理里面也非常多的使用,因为根据国家相关的要求,药品保存必须在相应的温湿度下面进行控制。

 图片47.png

HaaS EDU K1 内置的温湿度传感器型号是 Si 7006,它是 Silicon Labs  公司推出的,其内部集成了一个相对湿度传感元件、相对湿度传感元件还有一个 adc 模拟数字转换器,然后还有一些信号处理以及一个 I2c 的控制接口,它采用的是七比特地址模式,地址为0 X40,内部的相对湿度传感器的最大误差是正负5%,它的量程范围是正负82%RH,工作范围在零到百分之百 RH ,温度传感器的最大误差是正负一度,度量程范围在负10度到正85度,它的工作范围在负40度到正125度,工作电压在1.9V~3.6V之间,在功耗方面,3.3V 供电的情况下,每秒采样一次,它的功耗是2.2w。

图片46.png

这一页是 Si7006提供的指令以及指令描述,右边这个是一个指定的 code,然后左边是一个指定的描述,比如说想测量一个相对湿度,那可以向 Ox40从设备发送写操作,所写内容为 Command Code,进行开始测量,等待测量稳定时间之后,再向0x40从设备发送读操作指令 读取测量到的温度/湿度值。

需要注意的是发送测量指令后,需要等待测量结束,否则读取的值是不可信的。读取到的温湿度度需经过如下转换为实际的可读的温湿度,Temp_Code 就是从 Si7006读到的温度值,需要用175.72乘以这个 Code ,再除以6536减去一个46.85,这样才是两侧的实际的一个温度值,单位是摄氏度。相对湿度值则是通过125乘以从 si70006读取回来的相对湿度代码,然后除以6536再减去六,得到的就是相对湿度值。这一页是 si70006测量的一个时间特性,它主要有两大行,第一行是一个转换时间,第二行是开机的时间,然后第一行里边这个怎么看呢?

图片45.png

这是一个测试的一个条件,比如说要测量的是12比特的一个相对湿度,那基本上正常情况下大概十毫秒左右就可以测量成功了,最长的情况下可能会花费12毫秒,商店时间也非常重要,在供电电压大于1.9V 的时候,如果是室温25度的时候,它一般情况下18毫秒就可以上电成功,最长可能会经过25毫秒才可以上电成功。

在供电电压1.9V 之上,在所有 si70006工作范围之内,然后它的一个最长的一个上线时间是80毫秒左右,这一页的信息非常重要,为什么呢?因为在控制芯片进行测量的时候,必须要等到芯片上电完成之后才能开始测量,开始测量之后也必须等它两侧稳定之后才能开始读取它的测量值,否则读取到的测量值可能是不准确的。

 

三、I2C HAL API 介绍

图片44.png

本页里面的表格就是 AliOS Things 提供的I2C HAL 层提供的 API,用 hal_i2c_init 对12C 端口进行初始化,

hal_i2c_master_send 或者 hal_i2c_master_recv master 来对I2C 端口进行读或者写,最后假如说不需要12C 端口,就需要用 hal_i2c_finalize 关闭指定12C 端口。I2C 接口函数的声明都是在 include/aos/hal/i2c.h 里面,它里面定义了一些常用的比如说 I2C 的主从模式、设定等。

 

四、温湿度传感器实验

接下来的这个实验是通过 I2C 接口控制 si70006 两侧周围环境的温湿度信息并从 si70006把温湿度信息读取回来,打印到日志中。直接来看代码好了。

图片43.png

为了方便这边提前写好了一段代码,先来看一下它的一个主程序的逻辑,同样是在 application 下面的 example hello world demo 中的APP demo.c 里边来呼叫 si70006的一些 API ,比如首先先呼叫 si70006 int 对 si70006进行一个初始化,然后在 while 循环中会去呼叫 si70006_get_Humidity,然后来获取周围环境的湿度信息,然后再调用 si70006 temperature来获取周围环境的温度信息,获取成功之后会把相对湿度信息和温度信息打印出来,同样是一秒钟一次,来看一下 si70006的 int 中的实现,这个地方可以看到最后就呼叫一个 hell I2C neat,然后传入一个有I2C 的 nev 到 hal_I2C 的实现层,呼叫这个 API 之后,I2C 端口就被初始化了,然后看一下它的参数,这个地方传入的是一,前面有提到 si70006 是接到 Haas 1000芯片的I2C1这一组接口的,然后它的地址模式是七比特地址模式,SQL的频率是400k,主机端口是 master 的模式,从设备的地址是 si70006 的地址,让看一下它是0 X40,si70006 _int 函数看完之后,来看一下 si70006_getHumidity,这里边它是通过呼叫 hell master 的这个 API,然后传送一个 code 给 si70006,它传送的这个 code 看一下它的值是多少?

它是0xf5,刚刚有看到0xf5则是让 si70006去测量环境的相对湿度值,发送完这个code之后,会等待一个30毫秒的时间,这个就是等待 si70006测量稳定的,前面有看到 si70006测量稳定的时间大概是在十几毫秒,不到20毫秒,所以等待30毫秒的时间应该是足够的。接下来再通过呼叫 hell xc receive 然后来从 si70006读取两个 BAT 的数据回来,数据读回来之后,还要根据在 PPT 中提到的一个公式125乘以这个读取回来的数据,然后除以一个6535,然后再减去6,然后这样就是它正确的相对湿度值。

再来看一下获取温度的这个 API,同样的是发送一个 command code 给 si70006,这个 command code 是0fx3,它就是让 si70006去量测周围环境的温度,量测完成之后,同样要等待一个量测稳定的时间,然后再呼叫hal_i2c_master_recv,从 si7006夺取两个 beat 的数据回来,读取回来之后经过这个正确的换算公式得出来的就是周围环境的温度,那来看一下 si70006 提供相关 API 的驱动是在哪个地方?它是在 component sensor drivers 下边,来看一下这个目录,前面有给大家介绍过在 sensor drivers drv 下边有很多传感器的驱动已经集成了,如果大家在外接一个传感器的时候,可以先来这个地方看一下,这个传感器对应的AliOS Things 驱动性操作系统里面是不是已经集成了,如果集成了就可以直接拿过来使用,那来看一下说要怎么样使用这些传感器?在 drv 下面有一个 Drv.mk 这个文件来看一下,其实可以看到说每个传感器的驱动都用一个红来包起来了,来搜索一下 si7006,它的驱动是用 aus sensor_TEMP_SI7006这个红包起来的,所以在 hello world demo.mk 里面去设置这个红,把它设置成 y ,这样再去引用组件就可以呼叫到 si7006提供的这些的 API 了,可以来看一下代码是怎么写的?

hello world demo.mk 经过两步操作就可以使用 si7006的 API 了。首先通过 NAME components 加等于 sensor,把 sensor 这个组件给包进来,然后需要定义 aos sensor tmp si7006等于 y,这样在编译组件的时候,就可以把 si7006的驱动给编译进去了,编译进去之后,就可以呼叫 si7006开头的这些 API 了。

接下来看一下整个代码的执行效果,现在编译一下,编译之前先对工程进行清理,然后再整个工程进行编译。

完成之后,使用 aos 进行收入,同样选择一下 UR 的 pot,完成之后来看一下它的一个执行效果,可以看到它已经周期性的打印温湿度的信息了。

通过后面的一个蜂鸣器的口对它进行吹气,看看温湿度的信息会不会发生变化,可以看到相对湿度已经从最开始的二十多变到了现在的五十多,再来等一下看看它的相对湿度值会不会变小,可以看到它的相对湿度值已经开始在向下走了。

图片42.png

相关文章
|
3月前
|
传感器 并行计算 算法
多传感器感知原理解读 | BEVFusion解读(一)
多传感器感知原理解读 | BEVFusion解读(一)
121 0
|
4月前
|
传感器 物联网 芯片
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
|
3月前
|
传感器
多传感器感知原理解读 | BEVFusion解读(二)
多传感器感知原理解读 | BEVFusion解读(二)
97 0
|
4月前
|
传感器 存储 芯片
毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信
毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信
|
10月前
|
传感器
红外雨量计(光学雨量传感器)调试步骤
红外雨量计是一种常见的雨量监测设备,下面是红外雨量计的调试步骤:
红外雨量计(光学雨量传感器)调试步骤
|
传感器
振弦传感器基本概念
振弦传感器:(vibrating wire sensor)是以拉紧的金属钢弦作为敏感元件的谐振式传感器。当弦的长度确定之后,其固有振动频率的变化量即可表征钢弦所受拉力的大小。根据这一特性原理,即可通过一定的物理(机械)结构制作出测量不同种 类物理量的传感器(如:应变传感器、压力传感器、位移传感器等),从而实现被测物理量与频率值之间的一一对应关系,通过测量频率值变化量来计算出被测物理量 的改变量。 
|
传感器 数据采集 安全
无线振弦传感器采集系统的工作原理
无线振弦采集系统(NLM5或6多通道无线采集采发仪)是一种岩土工程监测仪器,它适用于各类振弦式传感器采集频率信号,(表面式应变计、混凝土应变计、钢筋应变计、内埋式裂缝计、表面裂缝计、土压力盒、锚索计等)。利用这些传感器可对大坝、桥梁、堤防、引水工程、建筑、市政地铁深基坑的内力、压力、沉降水平位移、变形,交通市政工程(船闸、铁道、地铁)以及高边坡等工程的应力、应变、变形、渗流、渗压等物理量监测和安全稳定分析,并广泛应用在工程健康监测领域。
|
传感器 编解码 监控
单片机温湿度测量程序编程
单片机温湿度测量程序编程
62 0
|
传感器 物联网 数据处理
振弦传感器采集读数模块基本概念
振弦传感器采集读数模块:指针对振弦传感器的特性而设计的传感器激励、读数模块。具有集成度高、功能模块化、数字接口的一系列特性,能完成振弦 传感器的激励、信号检测、数据处理、质量评估等专用针对性功能,进行传感器频 率和温度物理量模数转换,进而通过数字接口实现数据交互。振弦传感器读数模块 是振弦传感器与数字化、信息化之间的核心转换单元。 
|
传感器 存储
多通道振弦传感器无线采集仪电源连接详情
VS208/416/432 是以振弦、温度传感信号为主的多通道无线采集仪,并可扩展其它 模拟(电流、电压、电阻)信号和数字信号(RS485、RS232)传感器通道,内置电池, 可外接太阳能电池板。最多可实现 32 通道的全自动采集存储和无线发送,支持内部及 外部U 盘数据存储;1 路程控电源输出可为其它传感器供电;RS232/RS485 数据接 口,工业 MODBUS或 AABB 简单通讯协议可直接接入已有测控系统(如 PLC、无线 传输设备等)。