主要内容

使用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板来初始化传感器与一些高级设置。

先决条件

在你开始这个例子之前,我们建议你完成:

所需的硬件

要运行这个例子,你需要以下硬件:

仿真软件模型

模型示例如下图所示:

步骤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.请注意以下几点:

  • 获得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的传感器通信。

Baidu
map