TensorFlow Lite深度学习Arduino微控制器

本文介绍了如何使用Arduino平台和TensorFlow Lite Micro在C代码中实现LED亮度的动态调整,根据y值变化控制LED的开关与亮度,通过串行通信展示在Arduino绘图工具中。涵盖了硬件配置、C代码实现和TinyML在物联网中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

Arduino

实现Arduino的输出处理的代码在hello_world / arduino / output_handler.cc中,用于代替原始文件hello_world / output_handler.cc。

让我们浏览一下源代码:

#include "tensorflow/lite/micro/examples/hello_world/output_handler.h"
#include "Arduino.h"
#include "tensorflow/lite/micro/examples/hello_world/constants.h"

首先,我们包含一些头文件。 我们的output_handler.h指定了此文件的接口。 Arduino.h提供了Arduino平台的接口; 我们用它来控制董事会。 因为我们需要访问kInferencesPerCycle,所以我们还包含了constants.h。

接下来,我们定义函数并指示它在首次运行时要执行的操作:

// Adjusts brightness of an LED to represent the current y value
void HandleOutput(tflite::ErrorReporter* error_reporter, float x_value,
 float y_value) {
// Track whether the function has run at least once
static bool is_initialized = false;
// Do this only once
if (!is_initialized) {
 // Set the LED pin to output
 pinMode(LED_BUILTIN, OUTPUT);
 is_initialized = true;
}

在C语言中,在函数内声明为静态的变量将在函数的多次运行中保持其值。 在这里,我们使用is_initialized变量来跟踪是否曾经运行过以下if(!is_initialized)块中的代码。

初始化块调用Arduino的pinMode()函数,该函数向微控制器指示给定的引脚应处于输入还是输出模式。 在使用图钉之前,这是必需的。 该函数由Arduino平台定义的两个常量调用:LED_BUILTIN和OUTPUT。 LED_BUILTIN表示连接到板载内置LED的引脚,而OUTPUT表示输出模式。

将内置LED的引脚配置为输出模式后,将is_initialized设置为true,以使该块代码不会再次运行。

接下来,我们计算所需的LED亮度:

// Calculate the brightness of the LED such that y=-1 is fully off
// and y=1 is fully on. The LED's brightness can range from 0-255.
int brightness = (int)(127.5f * (y_value + 1));

Arduino允许我们将PWM输出的电平设置为0到255之间的数字,其中0表示完全关闭,而255表示完全打开。 我们的y_value是介于–1和1之间的数字。前面的代码将y_value映射到0到255的范围内,以便当y = -1时LED完全熄灭,当y = 0时LED点亮一半,而当y = 1时 LED完全点亮。

下一步是实际设置LED的亮度:

// Set the brightness of the LED. If the specified pin does not support PWM,
// this will result in the LED being on when y > 127, off otherwise.
analogWrite(LED_BUILTIN, brightness);

Arduino平台的AnalogWrite()函数具有一个引脚号(我们提供LED_BUILTIN)和一个介于0到255之间的值。我们提供在上一行中计算出的亮度。 调用此功能时,LED将在该级别点亮。

最后,我们使用ErrorReporter实例记录亮度值:

// Log the current brightness value for display in the Arduino plotter
error_reporter->Report("%d\n", brightness);

在Arduino平台上,ErrorReporter设置为通过串行端口记录数据。 串行是微控制器与主机计算机通信的一种非常常见的方式,通常用于调试。 这是一种通信协议,其中通过打开和关闭输出引脚来一次一次传输数据。 我们可以使用它来发送和接收任何内容,从原始二进制数据到文本和数字。

Arduino IDE包含用于捕获和显示通过串行端口接收的数据的工具。 其中一种工具(串行绘图仪)可以显示其通过串行接收的值的图形。 通过从代码中输出亮度值流,我们可以看到它们的图形。 图3展示了该方法的作用。

加速机器学习

TinyML构建和训练模型

TinyML构建应用

发布到微控制器

构建唤醒词检测应用

构建唤醒词检测模型

人物检测应用构建

人物检测模型构建

魔杖应用构建

魔杖模型训练

应用于微控制器的TensorFlow lite

部署TinyML应用

优化延时

优化能耗

详情参阅 - 亚图跨际

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值