使用Arduino硬件从i2c传感器读取温度
本示例展示如何使用Simulink®Arduino®硬件支持包从基于I2C的传感器配置和读取温度。
支持的硬件:
Arduino Uno
Arduino Mega 2560
Arduino Mega ADK
Arduino由于
Arduino达芬奇
Arduino MKR1000
Arduino MKR WIFI 1010
Arduino MKR ZERO
Arduino Nano 33 IoT
Arduino Nano 33 BLE Sense
其他Arduino衍生板具有I2C模块
此示例的可用版本:
Arduino Mega 2560板:arduino_I2C_temp
所提供的模型已为Arduino Mega 2560预配置。您可以在“支持的硬件”部分中列出的任何板上运行此模型,通过更改本例步骤2中描述的“硬件板”参数。
简介
Arduino硬件的Simulink支持包使您可以使用I2C接口与基于I2C的设备通信。
在本例中,您将学习如何与Sparkfun数字温度传感器TMP102通信。该传感器通过I2C总线与Arduino板连接。默认情况下,它将发送一个12位温度值,分辨率为0.0625摄氏度。您可以将该传感器配置为提供13位温度测量的扩展模式。有关设备的详细信息,请参见TMP102数据表.
这个例子展示了如何编程Arduino板从传感器读取温度使用I2C总线。它还说明了如何编程Arduino板来初始化传感器与一些高级设置。
先决条件
在你开始这个例子之前,我们建议你完成:
所需的硬件
要运行这个例子,你需要以下硬件:
支持Arduino单板
USB电缆
试验板线
小面包板(推荐)
仿真软件模型
模型示例如下图所示:
步骤1 -将TMP102传感器连接到Arduino硬件
在本节中,您将连接TMP102传感器到Arduino板。Arduino板载LED引脚13将指示TMP102读数超过指定的温度阈值。
1.将TMP102传感器连接到Arduino电路板上,连接方法如下:
TMP102 pin | Arduino Mega 2560 pin _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ VCC | 3.3 V GND | GND SDA | 20 SCL | 21 ALT | Not Connected ADD0 | GND _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
步骤2 -为支持的Arduino硬件配置Simulink模型
在本节中,您将为支持的Arduino硬件配置模型。
1.打开使用Arduino硬件从基于I2C的传感器读取温度模型。
2.在Simulink模型中,单击仿真>模型配置参数打开配置参数对话框。
3.选择硬件实现面板中选择所需的Arduino硬件硬件板参数列表。请勿更改其他设置。
4.点击好吧.
步骤3 -配置Simulink Model使用I2C Read Block读取温度
在本节中,您将配置该模型以使用TMP102传感器读取数据I2C读块。
1.打开使用Arduino硬件从基于I2C的传感器读取温度模型。
2.I2C读块配置:
打开I2C读块。注意从设备地址块的参数设置为“0x48”。TMP102传感器的ADD0引脚接地7位地址1001000(十六进制0x48)的TMP102数据表.
TMP102传感器包含多个寄存器。上电时,从设备读取的数据返回存储在寄存器0 -中的值温度寄存器(只读).离开从I2C从寄存器读取参数未选中,因为您将在此步骤中读取默认的温度寄存器。
温度寄存器的大小为16位。它以左对齐2的补码格式存储12位温度值。TMP102传感器使用Big Endian发送数据。选择数据类型“uint16”,字节次序到'Big Endian',数据量(N)到1,和样品时间到0.1。每0.1秒发起一次I2C读请求。
3.注意模型中的以下几点:
的数据类型转换Block用于将读取数据转换为int16,以处理正温度和负温度。
的获得Block用于将int16数据右移4位(除以16),以右对齐对应于温度测量的上12位。的获得block还将传感器分辨率为0.0625的12位数据相乘,得到相应的温度,单位为摄氏度。
这两个常数值为1和0的块与a一起使用开关块将温度读数与27摄氏度的阈值进行比较。当TMP102传感器读数超过指定的温度阈值时,Arduino板载LED在引脚13处发光。对传感器施加温度变化以观察这种行为。
步骤4 -在正常模式下运行Simulink模型,并连接I/O
在生成代码并在Arduino上部署模型之前,您可以使用Connected I/O在Normal模式下模拟模型,以验证模型设计。在本例中,当您在Connected I/O中模拟模型时,模型从与Arduino接口的TMP102传感器读取温度。这种模型与Arduino硬件之间的通信不需要任何代码生成或模型部署,从而加快了仿真过程。有关已连接I/O的详细信息,请参见使用已连接IO与硬件通信.
在连接I/O的正常模式下模拟模型:
1.在硬件选项卡中的Simulink模型模式部分中,选择连接输入输出然后点击使用IO运行.
模拟过程中,显示块显示温度读数从TMP102传感器摄氏度。当温度读数超过27摄氏度的阈值时,Arduino上的LED开始发光。
2.2 .在Simulink模型工具栏中,单击停止停止模拟。
步骤5 -在外部模式下运行Simulink模型(监视和调优)
在本节中,您将运行模型外部模式监控温度。
1.在硬件选项卡中的Simulink模型模式部分中,选择在船上跑然后点击监视和调优.
2.注意显示模型中的块显示TMP102传感器温度读数,以摄氏度为单位。
3.当模型中的显示块显示温度高于27摄氏度时,观察Arduino机载LED发光。
4.根据实际环境温度,在“开关”区域框中修改阈值,单击应用.当温度超过新的阈值时,看到板载LED发光。
5.单击停止按钮结束外部模式执行。
步骤6 -配置Simulink模型初始化温度传感器为13位扩展模式
本节介绍如何将TMP102传感器初始化为13位扩展模式。
1.打开使用Arduino硬件从I2C传感器初始化和读取温度模型。
2.注意模型中的两个子系统:
的One_time_initialization子系统配置TMP102传感器为13位扩展模式。
执行循环读取13位的温度。
的One_time_initialization子系统只在模型执行的第一步执行一次。方法处理子系统的这种选择性执行单位延迟和启用子系统块从Simulink库。
传感器配置为扩展模式新兴市场在那里配置寄存器到1的每TMP102数据表.这意味着将值“0x60B0”写入位于TMP102传感器地址1的配置寄存器。
3.打开One_time_initialization子系统。
4.配置I2C写写入TMP102传感器的配置寄存器:
打开I2C写块。的从设备地址block的参数被设置为“0x48”。
选择写入I2C从寄存器参数。然后I2C从设备寄存器地址参数出现在块中。
设置I2C从设备寄存器地址参数为1。配置寄存器的地址为1TMP102数据表.
设置数据类型参数为uint16和字节顺序参数到Big Endian,因为配置寄存器的大小为16位,其值需要通过I2C总线使用Big Endian发送。
5.中注意以下内容One_time_initialization子系统:
的常数block保存了一个要写入配置寄存器的值“0x60B0”。
I2C读块连接到显示块,确保正确的数据被写入配置寄存器。I2C读块与I2C写块的设置相同。
I2C写块优先级设置为1。I2C读块的优先级设置为高于1的任何值,以确保您在设置配置寄存器后读取该值。如果需要设置块的优先级,右键单击块>属性>常规>优先级。要了解更多关于块优先级及其对块执行顺序的影响,请参阅指定块属性.
6.请注意以下几点:
这个子系统类似于使用Arduino硬件从基于I2C的传感器读取温度模型。
的获得Block执行除法8,对应右移3位。右除法表示13位温度值。
步骤7 -在外部模式下运行Simulink模型(监视和调优)
提示:在外部模式下模拟模型前,可以先在I/O已连接的正常模式下模拟模型,具体操作请参见步骤4 -在I/O已连接的正常模式下运行模型。在Connected I/O中模拟模型使您能够在生成代码和在Arduino上部署模型之前验证模型设计。
在本节中,您将运行模型外部模式监控温度。
1.在硬件选项卡中的Simulink模型模式部分中,选择在船上跑然后点击监视和调优.
2.打开One_time_initialization子系统。
3.验证显示block显示了一个十六进制的值“0x60B0”,对应于所需的配置寄存器值。
4.监控显示块来观察TMP102的温度读数,单位为摄氏度。当模型中的显示块显示温度高于27摄氏度时,Arduino机载LED会发光。
5.根据实际环境温度,在“开关”区域框中修改阈值,单击应用.当温度超过新的阈值时,看到板载LED发光。
6.单击停止按钮结束外部模式执行。
其他可以尝试的事情
配置TMP102传感器恢复12位输出。
使用配置寄存器更改传感器中ADC的转换速率。中的连续转换模式和配置寄存器部分TMP102数据表欲知详情。
请参阅TMP102数据表并尝试将TMP102配置为运行关机模式和/或比较器模式.尝试更改高低限制寄存器的值。
按照本例中的步骤与其他基于I2C的传感器通信。