主要内容

自动旋转图像显示在树莓Pi感应帽LED矩阵

本示例向您展示了如何开发Simulink®模型,以实现读取车载加速度计传感帽并控万博1manbetx制LED矩阵上显示图像的旋转的算法。

介绍

树莓皮™ Sense HAT是Raspberry Pi硬件的附加板。它有一个8X8 RGB LED矩阵、一个五位操纵杆,并包括以下传感器:

  • 湿度传感器

  • 压力传感器

  • IMU传感器(加速度计,陀螺仪,磁力计)

在本例中,您将开发一个Simulink模型,根据Sense帽子的方向自动万博1manbetx旋转LED矩阵上显示的图像。加速计数据用于确定传感帽的方向。

先决条件

所需的硬件

要运行此示例,您需要以下硬件:

  • 覆盆子π硬件

  • 覆盆子皮传感帽

自动旋转算法

图像自动旋转是指在现代智能手机和平板电脑中广泛使用的技术,它可以根据手持设备的位置旋转设备的显示。这些设备使用车载加速度计来确定位置。通过读取加速度计的数据,我们可以确定重力作用的主轴。

在本例中,我们将读取Sense帽子上提供的加速计。根据加速度值,我们可以确定重力作用的主轴。然后,该信息将用于设置Sense HAT的LED矩阵上显示的图像的方向。

当Raspberry Pi保持垂直时(这是指Raspberry Pi的HDMI端口朝下的位置),重力仅作用于加速计的X轴或Y轴。

根据重力作用的轴,我们可以决定显示图像的方向。

  • 如果板旋转指向上方,则重力沿负y轴作用。

  • 如果板旋转指向下,则重力沿正y轴作用。

  • 如果棋盘向左旋转,则重力沿正X轴作用。

  • 如果板向右旋转,则重力沿负X轴作用。

我们将通过将沿X轴和Y轴的加速度值与0.75g的阈值进行比较,试探性地检测传感帽板的方向。如果沿其中一个轴的加速度超过0.75g,我们将认为电路板大致沿该轴定向。

在自动旋转算法的传统设计中,我们不会考虑沿Z轴的加速度来决定方向的值。

在确定了主轴之后,我们现在可以将方向值映射到每个位置。

  • 如果板旋转指向上方,则重力沿负y轴作用。在这种情况下,方向=0。

  • 如果电路板旋转指向下方,则重力沿y轴正方向作用。在这种情况下,方向=180。

  • 如果棋盘向左旋转,则重力沿正X轴作用。在这种情况下,方向= 90。

  • 如果板向右旋转,则重力沿负X轴作用。在这种情况下,方向= 270。

在Simulink中实现自动旋转算法万博1manbetx

在本节中,我们将使用状态流程图在Simulink中实现自动旋转算法。万博1manbetx

1.创建一个新的万博1manbetx模型

2.万博1manbetx模型库浏览器,将状态流程图添加到模型中。这可以在Stateflow库下找到。

3.在状态流图中,创建四个状态对应于Sense HAT的四个位置。

4.在这四种状态之间绘制转换线。每个过渡对应于沿X轴和Y轴的不同加速度值。

5.在每个状态中,将方向值赋给输出。要分配的方向值在上面的“自动旋转算法”一节中描述。

6.添加“默认过渡”到图像方向为0的状态。

使用Stateflow图实现的完整算法与下面所示的实现类似:

任务2-添加特定于硬件的块

在本节中,我们将向任务1中开发的Simulink模型添加Raspberry Pi Sense帽子特定块。万博1manbetx

1.在Simuli万博1manbetxnk库浏览器中,导航到万博1manbet万博1manbetxxSimulink支持包树莓派图书馆。在此下,双击Sense HAT组。这将打开万博1manbetxSimulink传感帽库

2.将Sense HAT库中的IMU传感器块添加到Simulink模型中。通过将“主动传感器”参数设置为“加速计”,将此块配置为万博1manbetx读取加速度。将此块的输出连接到状态流程图的输入。

3.将Sense HAT库中的LED矩阵块添加到您的模型中。为了配置它以显示图像,将“模式”参数设置为“显示图像”,并将“方向源”设置为“输入端口”。

4.LED矩阵块显示8x8x3的RGB图像。向模型中添加一个常量块,并将其值设置为'imread('senseHAT_demo.png')'。senseHAT_demo.png是作为本示例的一部分提供的示例图像。

5.要显示的图像的方向由状态流程图决定。将状态流程图的输出连接到LED矩阵块的“方向”端口。

任务3 -信号监控和参数调优

执行Monitor和Tune动作,将图像显示在LED矩阵上,该矩阵将根据持有Sense HAT的位置进行定向。

1.打开LED矩阵上的自动旋转图像模型

2.. 标记IMU传感器块的输出和状态流程图以进行记录。通过记录信号,您可以检查和比较来自多个仿真的数据,以验证模型设计。有关信号记录的信息,请参阅标记记录信号

3.选择应用程序>运行在硬件板>选项…. 查看打开页面上的参数,确保Raspberry Pi板的连接参数正确。此外,确保通信接口参数在目标硬件资源>外部模式被设置为TCP/IP上的XCP

4.硬件选项卡中的万博1manbetx模式节,选择在船上运行然后单击监视和调谐在树莓派的硬件上运行模型。

5.当您改变传感帽的固定位置时,观察图像自动旋转。

6.当模型运行时,双击状态流程图,并在旋转检测帽时观察状态转换。当前状态以蓝色边界亮显。当新的仿真数据在仿真数据检查器(SDI)中可用时,“仿真数据检查器”按钮将亮显。

7.. 更改阈值并观察输出中的变化。

8.. 通过单击“模型”工具栏上的“模拟数据检查器”按钮,可以检查和比较来自多个模拟的数据。有关SDI的更多信息,请参阅分析仿真结果

9.按下停止按钮以停止模型执行。

任务4-将自动旋转Simulink模型配置为独立应用程序并运行万博1manbetx

1.打开LED矩阵上的自动旋转图像模型

2.选择应用程序>运行在硬件板>选项….查看打开页面的参数,确保树莓Pi板的连接参数是正确的。

3.硬件选项卡中的万博1manbetx模式节,选择在船上运行然后单击构建、部署和启动在树莓派硬件上部署Simul万博1manbetxink模型。

4.通过在MATLAB®命令行上执行以下命令,停止在Raspberry Pi硬件上运行的模型

stopModel (r,“raspberrypi_sensehat_autorotate”);