主要内容

树莓派感应HAT LED矩阵自动旋转图像显示

本示例向您展示如何开发一个Simulink®模型来实现一种算法来读取加速度计板上金宝app感应HAT并控制LED矩阵上显示的图像的旋转。

简介

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

  • 湿度传感器

  • 压力传感器

  • IMU传感器(加速度计、陀螺仪和磁强计)

在本例中,您将开发一个Simulink模型,根据Sense HAT的方向金宝app自动旋转LED矩阵上显示的图像。加速度计数据用于确定Sense HAT的方向。

先决条件

所需的硬件

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

  • 树莓派硬件

  • 树莓派Sense HAT

自动旋转算法

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

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

当树莓派垂直举起时(这是指树莓派的HDMI端口指向下方的位置),重力只作用在加速度计的X轴或Y轴上。

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

  • 如果板向上旋转,那么重力沿负y轴作用。

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

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

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

通过将沿X轴和Y轴的加速度值与0.75g阈值进行比较,我们将启发式地检测Sense HAT板的方向。如果沿其中一个轴的加速度超过0.75g,我们将认为板大致沿该轴方向。

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

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

  • 如果板向上旋转,那么重力沿负y轴作用。在本例中,Orientation = 0。

  • 如果板向下旋转,则重力沿正y轴作用。在本例中,Orientation = 180。

  • 如果板向左旋转,则重力沿正X轴作用。在本例中,Orientation = 90。

  • 如果板向右旋转,则重力沿负X轴作用。在本例中,Orientation = 270。

在Simulink中实现自动旋转算法金宝app

在本节中,我们将使用状态流程图在Simulink中实现自动旋转算法。金宝app

1,创建一个新的金宝app模型。

2.金宝appSimulink库浏览器,将状态流程图添加到模型中。这可以在Stateflow库下找到。

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

4.在这四个状态之间画出过渡线。每个跃迁对应X轴和Y轴上加速度的不同值。

5.在每个状态下,将方向值赋给输出。要分配的方向值在上面的'Auto-rotation algorithm'部分中描述。

6.添加'default transition'到图像方向为0的状态。

使用状态流图实现的完整算法类似于如下所示的实现:

任务2 -添加硬件特定块

在本节中,我们将树莓派Sense HAT特定块添加到我们在任务1中开发的Simulink模型中。金宝app

1.在Simuli金宝appnk库浏览器中,导航到金宝app树莓派的金宝appSimulink支持包图书馆。在此下,双击Sense HAT组。这将打开金宝appSimulink Sense HAT库

2.将IMU传感器块从Sense HAT库添加到您的Simulink模型中。金宝app配置此块通过设置'Active sensor'参数为'Accelerometer'来读取加速度。将此块的输出连接到Stateflow图的输入。

3.将Sense HAT库中的LED矩阵块添加到您的模型中。为了将其配置为显示图像,将“Mode”参数设置为“display image”,并将“Orientation Source”设置为“Input port”。

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

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

任务3 -信号监测和参数调整

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

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

2.标记IMU Sensor块和Stateflow图的输出,以便记录日志。通过记录信号,您可以检查和比较来自多个模拟的数据,以验证模型设计。有关信号记录的信息,请参见标记一个测井信号

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

4.硬件选项卡中的Simuli金宝appnk模型模式部分中,选择在船上跑然后点击监视和调优在树莓派硬件上运行模型。

5.当你改变持有Sense HAT的位置时,观察图像自动旋转。

6.在模型运行时,双击Stateflow图表,并在旋转Sense HAT时观察状态转换。当前状态用蓝色边界突出显示。当新的仿真数据在仿真数据检查器(SDI)中可用时,“仿真数据检查器”按钮将高亮显示。

7.修改阈值,观察输出的变化。

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

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

任务4 -配置和运行自动旋转Simulink模型作为独立应用程序金宝app

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

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

3.硬件选项卡中的Simuli金宝appnk模型模式部分中,选择在船上跑然后点击构建、部署和启动在树莓派硬件上部署Simul金宝appink模型。

4.在MATLAB®命令行上执行以下命令,停止在树莓派硬件上运行的模型

stopModel (r,“raspberrypi_sensehat_autorotate”);