- 2025-01-20
-
加入了学习《Follow Me 2-4 任务提交视频 》,观看 Follow me 2-4 任务提交
- 2025-01-18
-
发表了主题帖:
【Follow me第二季第4期】汇总提交帖:全部任务_视频提交补充
本帖最后由 MatrixPulse 于 2025-1-19 15:06 编辑
原帖链接:【Follow me第二季第2期】汇总提交帖:全部任务 - DigiKey得捷技术专区 - 电子工程世界-论坛
【Follow me第二季第4期】汇总提交帖:全部任务
前言
Hello, 大家好!很高兴又与大家见面啦!Follow me 第二季第 4 期终于来了!这次的板卡还是 Arduino!上次活动没能获得优秀作品有些遗憾,所以第 4 期又毫不犹豫地参加了,争取领个大奖回家,哈哈😄!
本期是 Follow me 第二季第 4 期任务,本次任务的开发板是 Arduino Nano RP2040 Connect,同时我选择了一个 M5Stack 的摄像头搭配,用以完成本次任务开发。
活动物料购买如下:
主板:ABX00052 Arduino | 开发板,套件,编程器 | DigiKey
摄像头:U082-X M5Stack Technology Co., Ltd. | 开发板,套件,编程器 | DigiKey
物料开箱展示:
Arduino Nano RP2040 Connect 开箱视频
Nano 开箱自带了一段程序,显示效果如下:
开箱实拍图
TimerCamera-X
Arduino Nano RP2040 Connect
任务展示
本次的任务提交视频如下,接下来我们一起来看看吧!
任务简介
任务一(必做):搭建环境并开启第一步 Blink / 串口打印 Hello DigiKey & EEWorld!
任务二(必做):学习 IMU 基础知识,调试 IMU 传感器,通过串口打印六轴原始数据;
任务三(必做):学习 PDM 麦克风技术知识,调试 PDM 麦克风,通过串口打印收音数据和音频波形。
扩展任务一:通过 RGB LED 不同颜色、亮度显示 PDM 麦克风收到的声音大小;
扩展任务二:通过 IMU 数据结合机器学习算法,识别运动状态,并通过串口打印。
自由发挥任务:TimerCAM-X 服务器 与 Nano 客户端的交互
设计思路及实现效果
1. 任务一:环境配置
环境配置
要在 Arduino IDE 中使用 Arduino Nano RP2040 Connect,需要在开发板管理器中安装 Arduino Mbed OS Nano Beards。安装方法如下图所示:
有关开发板包(Board Package)的安装请参考:Installing a Board Package in the IDE 2 | Arduino Documentation
我们将编写代码点亮 Arduino Nano RP2040 Connect 的 RGB LED,使其实现间隔时间 1s 的闪烁。参照 Arduino Nano RP2040 Connect 的引脚功能图,RGB LED 引脚与 Wi-Fi 模块相连,因此我们需要通过 Wi-Fi 模块来控制 RGB LED。要使用 Nano 上的 Wi-Fi 模块,需要在 Arduino IDE 中通过库管理器安装 WiFiNINA 库。
点灯流程图 :
点灯代码详见附件...
点灯效果:
串口打印任务
串口打印任务,我们将编写代码使 Arduino 通过串口每隔 1s 输出“Hello DigiKey & EEWorld!”
串口打印流程图:
初始化串口初始化(波特率9600)循环“Hello DigiKey & EEWorld!”
串口打印代码:
void setup() { //初始化函数,这个函数内的代码只在启动时运行一次
Serial.begin(9600); //设置串口波特率
}
void loop() { //循环函数,这个函数内的代码会一直循环运行
Serial.println("Hello DigiKey & EEWorld!"); //向串口打印"Hello DigiKey & EEWorld!"
delay(1000);
}
串口打印效果:
2. 任务二:IMU 的应用
任务二我们将学习 IMU 基础知识,调试 IMU 传感器,通过串口打印六轴原始数据。先来了解一些有关 IMU 的基础知识吧!
什么是 IMU ?
IMU ( Inertial Measurement Unit ) 一般包含 加速度计 和 陀螺仪,用于测量和报告物体的特定力,有时也会测量物体的方向。一些 IMU 还包括磁力计,可测量地球磁场并像指南针一样帮助确定方向。通过结合这些传感器的数据,IMU 可以提供物体运动的完整图像。IMU 是许多应用中必不可少的组件,例如,飞机中的导航系统、智能手机、机器人和游戏机。它们使设备能够跟踪其移动、方向和位置,而无需依赖 GPS 等外部参考。
陀螺仪
陀螺仪测量旋转的角速度,用于检测旋转变化。有关陀螺仪的原理可参考:https://byjus.com/physics/gyroscope/
加速度计
加速度计测量线性加速度,即直线速度的变化率。在一辆向前加速的汽车中,加速度计将测量该加速度。当倾斜手机时,重力相对于加速度计的方向会发生变化。加速度计可以检测到重力变化,从而确定手机方向。
Nano 中的 IMU
Arduino Nano RP2040 Connect 包含一个 ST 的 LSM6DSOXTR 6 轴惯性测量单元(位置见下图)。
要在 Arduino IDE中使用它,我们需要通过库管理安装 Arduino_LSM6DSOX 库(安装方式见下图)。
然后编写相应代码(详见附件)上传至开发板。下面的图片展示了由串口打印 IMU 六轴原始数据。
有关 IMU 的详细信息可参考官方文档:Accessing IMU Data on Nano RP2040 Connect | Arduino Documentation
流程图:
3. 任务三:麦克风的应用
任务三我们将学习 PDM 麦克风技术知识,调试 PDM 麦克风,通过串口打印收音数据和音频波形。Nano 带有一个 PDM 麦克风,其在开发板上的位置如下:
什么是 PDM ?
脉冲密度调制 ( Pulse-Density Modulation ) 是一种用于使用数字信号表示模拟信号的技术。 PDM 不是直接对模拟信号的幅度进行编码,而是使用脉冲密度对信号值进行编码。较高的脉冲密度代表较高的幅度,较低的密度代表较低的幅度。
正弦波一个周期的 100 个样本的 PDM 示例。蓝色代表1,白色代表0。
正弦波模拟信号与正弦波PDM信号对比:
PDM 麦克风
PDM 麦克风 是一种数字麦克风,其核心工作方式是通过 脉冲密度调制 ( Pulse-Density Modulation ) 来输出数字信号,取代传统麦克风的模拟信号。信号的“密度”(高电平的数量)反映了声音的大小。PDM 经常用于数字麦克风,因为 MEMS 麦克风可以直接输出 PDM 信号,从而无需额外的 ADC。
基本原理
声音输入:麦克风将捕捉到的声音转换成电信号。
调制方式:PDM 麦克风以非常高的频率(比如 MHz 级别)将信号采样。它不是直接给出电压值,而是通过一连串
高低电平的脉冲来表示声音强度。
当声音很大时,高电平脉冲(1)的数量增多。
当声音很小时,高电平脉冲的数量减少。
可以把 PDM 信号想象成一个人不停地在敲键盘:当声音很大时,他快速地敲键盘(频繁出现“1”)。当声音很小时,他敲键盘的次数就减少(稀疏的“1”)。 最终,这种敲击密度代表了声音的强弱。
优点
更小的体积:PDM 麦克风通常尺寸很小,非常适合用于手机、耳机等便携设备。
抗干扰能力强:PDM 信号是数字信号,传输过程中对电磁干扰不敏感。
直接连接处理器:PDM 信号可以直接输入到数字信号处理器(DSP)或 MCU,无需模数转换(ADC)
实际应用
PDM 麦克风的应用非常广泛,主要集中于需要高质量音频的小型设备中,例如:
智能手机
无线耳机
智能音箱
Arduino Nano RP2040 Connec 上的 MP34DT06JTR 传感器是一款超紧凑型 PDM 麦克风,规格如下:
信噪比:64dB
灵敏度:-26 dBFS ± 3 dB
温度范围:-40 至 85°C
那么,如何在 Arduino 中使用这款麦克风呢?
首先我们需要加载 PDM 库。Arduino 内置了 PDM 库,因此我们无需再添加额外的库,直接在草图中添加#include <PDM.h>即可!随后我们将包含麦克风使用逻辑的代码编写出来并上传至开发板,就能够完成对麦克风的调用。接下来我们将通过一个小程序,来提高我们对 PDM 麦克风的应用。该程序通过声音强度的大小控制 RGB LED 的亮灭。
我们知道声音是模拟信号,PDM 麦克风以特定的采样率对声音进行采样。下面的程序中,我们将通过串口打印这些数据,并通过串口绘图仪来观察声音的“形状”。我们播放一段音频信号为正弦波的音频,理论上通过串口我们可以观察到正弦波。
有关 PDM 使用的更多信息请参考:PDM Library | Arduino Documentation
4. 扩展任务一:麦克风与 RGB LED 联动
下面我们将通过 RGB LED 不同颜色和亮度,显示 PDM 麦克风收到的声音大小
低音量显示蓝色
中等音量显示绿色
高音量显示红色
流程图
实现效果
完整代码见附件...
5. 扩展任务二:基于机器学习的运动检测
除了测量原始运动数据外,安装在 Nano RP2040 Connect 上的 IMU 还具有 机器学习内核(Machine Learning Core, MLC)
机器学习内核 是一种运行在硬件传感器(如加速度计或陀螺仪)内部的低功耗机器学习模块。它允许传感器在本地处理数据并直接输出分类结果或事件检测信号,而无需占用主处理器(如 MCU)的资源。
IMU 带有机器学习内核有什么好处呢?
传统方法是将传感器收集的数据传输到 MCU,再由 MCU 使用复杂算法计算这些状态,这会消耗较多电力和算力。有了嵌入式机器学习内核,这个传感器就像一个聪明的“迷你大脑”,它可以直接根据你预先训练的模型来判断你当前的状态,并且只输出结果,比如“跑步”或“坐着”。这不仅 减少了主 MCU 的工作量,还 降低了系统整体功耗。目前,通过使用机器学习内核,Arduino 官方示例中的预训练模型可以识别 静止(Stationary)步行(Walking)慢跑(Jogging)骑行(Biking)驾驶(Driving)五种不同的运动状态
在本教程中,我们将重点介绍库附带的预训练模型。让我们来看看 IMU 的智能功能是如何工作的!我们看一下该草图的一些核心函数:
DEV_I2C.begin() - 初始化与 IMU 模块的 I2C 通信
AccGyr.begin() - 初始化加速度计和陀螺仪
AccGyr.Enable_X() - 启用加速度计
AccGyr.Enable_G() - 启用陀螺仪传感器
AttachInterrupt(INT_1, INT1Event_cb, RISING) - 注册 IMU 中断引脚拉高时的中断回调,这表明检测到运动类型AccGyr.Get_MLC_Output(mlc_out) - 读取机器学习核心输出并将决策树保存到数组变量中
printMLCStatus(status) - 将从机器学习核心检索到的数字转换为检测到的活动类型的人类可读描述
我们需要在 Arduino IDE 中安装 STM32duino X-NUCLEO-IKS01A3 库
有关 IMU 的高级功能可参考官方文档:Using the IMU Machine Learning Core Features | Arduino Documentation
实现效果
6. 自由发挥任务:TimerCAM-X 服务器 与 Nano 客户端
TimerCAM-X 是一款基于 ESP32 的智能相机模块,集成了 Wi-Fi 和蓝牙功能,适用于物联网(IoT)应用。在该项目中,TimerCAM-X 作为服务器端,利用其内置的摄像头捕获图像,并通过 Wi-Fi 网络发送至客户端。Arduino Nano RP2040 Connect 作为客户端,接收来自 TimerCAM-X 的图像数据。Nano RP2040 Connect 配备了 Raspberry Pi® RP2040 微控制器,并集成了 u-blox NINA-W102 模块,提供 Wi-Fi 和蓝牙连接能力。 通过这种配置,用户可以实现远程图像采集和处理,适用于物联网(IoT)应用中的监控和数据传输等场景。
TimerCAM-X 服务端配置
Arduino Nano 客户端调试
然后将串口收到的数据提取出来通过网页工具进行转换,就可以获取到 TimerCAM X 拍到的图片了:
以上就是本次活动全部任务的完成与展示,再次感谢 DigiKey 和 EEWorld 举办本次活动,为我们工程师提供了一个很好的学习机会!期待 Fllow Me 活动推出更多好玩的板卡!如果文章对您有帮助,别忘了点赞哦!😉
-
发表了主题帖:
【Follow me第二季第4期】汇总提交帖:全部任务
本帖最后由 MatrixPulse 于 2025-1-18 23:28 编辑
# 【Follow me第二季第4期】汇总提交帖:全部任务
[TOC]
## 前言
Hello, 大家好!很高兴又与大家见面啦!Follow me 第二季第 4 期终于来了!这次的板卡还是 Arduino!上次活动没能获得优秀作品有些遗憾,所以第 4 期又毫不犹豫地参加了,争取领个大奖回家,哈哈😄!
本期是 Follow me 第二季第 4 期任务,本次任务的开发板是 Arduino Nano RP2040 Connect,同时我选择了一个 M5Stack 的摄像头搭配,用以完成本次任务开发。
### 活动物料购买如下:
- 主板:[ABX00052 Arduino | 开发板,套件,编程器 | DigiKey](https://www.digikey.cn/zh/products/detail/arduino/ABX00052/14123941)
- 摄像头:[U082-X M5Stack Technology Co., Ltd. | 开发板,套件,编程器 | DigiKey](https://www.digikey.cn/zh/products/detail/m5stack-technology-co-ltd/U082-X/13545179)
| |
| :----------------------------------------------------------: | :----------------------------------------------------------: |
| | |
### **物料开箱展示:**
![订单截图](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/%E8%AE%A2%E5%8D%95%E6%88%AA%E5%9B%BE.jpg)
![IMG_7367](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMG_7367.jpg)
#### Arduino Nano RP2040 Connect 开箱视频
Nano 开箱自带了一段程序,显示效果如下:
#### 开箱实拍图
| |
| :----------------------------------------------------------: | :----------------------------------------------------------: |
| TimerCamera-X | Arduino Nano RP2040 Connect |
## 任务展示
本次的任务提交视频如下,接下来我们一起来看看吧!
[视频](https://training.eeworld.com.cn/video/42424)
## 任务简介
- **任务一(必做):**搭建环境并开启第一步 Blink / 串口打印 Hello DigiKey & EEWorld!
- **任务二(必做):**学习 IMU 基础知识,调试 IMU 传感器,通过串口打印六轴原始数据;
- **任务三(必做):**学习 PDM 麦克风技术知识,调试 PDM 麦克风,通过串口打印收音数据和音频波形。
- **扩展任务一:**通过 RGB LED 不同颜色、亮度显示 PDM 麦克风收到的声音大小;
- **扩展任务二:**通过 IMU 数据结合机器学习算法,识别运动状态,并通过串口打印。
- **自由发挥任务:**TimerCAM-X 服务器 与 Nano 客户端的交互
## 设计思路及实现效果
### 1. 任务一:环境配置
#### 环境配置
要在 Arduino IDE 中使用 Arduino Nano RP2040 Connect,需要在开发板管理器中安装 Arduino Mbed OS Nano Beards。安装方法如下图所示:
![NanoConfig](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoConfig.jpg)
有关开发板包(Board Package)的安装请参考:[Installing a Board Package in the IDE 2 | Arduino Documentation](https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-board-manager/)
我们将编写代码点亮 Arduino Nano RP2040 Connect 的 RGB LED,使其实现间隔时间 1s 的闪烁。参照 Arduino Nano RP2040 Connect 的引脚功能图,RGB LED 引脚与 Wi-Fi 模块相连,因此我们需要通过 Wi-Fi 模块来控制 RGB LED。要使用 Nano 上的 Wi-Fi 模块,需要在 Arduino IDE 中通过库管理器安装 WiFiNINA 库。
![Snipaste_2024-12-05_15-26-08](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Snipaste_2024-12-05_15-26-08.jpg)
#### 点灯流程图 :
***点灯代码详见附件...***
#### 点灯效果:
串口打印任务,我们将编写代码使 Arduino 通过串口每隔 1s 输出“Hello DigiKey & EEWorld!”
#### 串口打印流程图:
#### 串口打印代码:
```c++
void setup() { //初始化函数,这个函数内的代码只在启动时运行一次
Serial.begin(9600); //设置串口波特率
}
void loop() { //循环函数,这个函数内的代码会一直循环运行
Serial.println("Hello DigiKey & EEWorld!"); //向串口打印"Hello DigiKey & EEWorld!"
delay(1000);
}
```
#### 串口打印效果:
![NanoSerialPrintCharacter](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoSerialPrintCharacter.jpg)
### 2. 任务二:IMU 的应用
任务二我们将学习 IMU 基础知识,调试 IMU 传感器,通过串口打印六轴原始数据。先来了解一些有关 IMU 的基础知识吧!
#### 什么是 IMU ?
**IMU ( Inertial Measurement Unit )** 一般包含 **加速度计** 和 **陀螺仪**,用于测量和报告物体的特定力,有时也会测量物体的方向。一些 IMU 还包括磁力计,可测量地球磁场并像指南针一样帮助确定方向。通过结合这些传感器的数据,**IMU 可以提供物体运动的完整图像**。IMU 是许多应用中必不可少的组件,例如,飞机中的导航系统、智能手机、机器人和游戏机。它们使设备能够跟踪其移动、方向和位置,而无需依赖 GPS 等外部参考。
##### 陀螺仪
陀螺仪测量旋转的**角速度**,用于检测旋转变化。有关陀螺仪的原理可参考:https://byjus.com/physics/gyroscope/
##### 加速度计
加速度计测量**线性加速度**,即直线速度的变化率。在一辆向前加速的汽车中,加速度计将测量该加速度。当倾斜手机时,重力相对于加速度计的方向会发生变化。加速度计可以检测到重力变化,从而确定手机方向。
#### Nano 中的 IMU
Arduino Nano RP2040 Connect 包含一个 ST 的 LSM6DSOXTR 6 轴惯性测量单元(位置见下图)。
要在 Arduino IDE中使用它,我们需要通过库管理安装 Arduino_LSM6DSOX 库(安装方式见下图)。
![LSM6DSOXTR](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/LSM6DSOXTR.jpg)
然后编写相应代码(详见附件)上传至开发板。下面的图片展示了由串口打印 IMU 六轴原始数据。
![IMU_6_axis_rawdata](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_6_axis_rawdata.jpg)
有关 IMU 的详细信息可参考官方文档:[Accessing IMU Data on Nano RP2040 Connect | Arduino Documentation](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-basics/)
#### 流程图:
### 3. 任务三:麦克风的应用
任务三我们将学习 PDM 麦克风技术知识,调试 PDM 麦克风,通过串口打印收音数据和音频波形。Nano 带有一个 PDM 麦克风,其在开发板上的位置如下:
#### 什么是 PDM ?
**脉冲密度调制** **( Pulse-Density Modulation )** 是一种用于使用数字信号表示模拟信号的技术。 PDM 不是直接对模拟信号的幅度进行编码,而是使用脉冲密度对信号值进行编码。较高的脉冲密度代表较高的幅度,较低的密度代表较低的幅度。
![Pulse-density_modulation_1_period](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Pulse-density_modulation_1_period.gif)
正弦波一个周期的 100 个样本的 PDM 示例。蓝色代表1,白色代表0。
正弦波模拟信号与正弦波PDM信号对比:
![Pulse_density_modulation.svg](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Pulse_density_modulation.svg.png)
#### PDM 麦克风
**PDM 麦克风** 是一种数字麦克风,其核心工作方式是通过 **脉冲密度调制** **( Pulse-Density Modulation )** 来输出数字信号,取代传统麦克风的模拟信号。**信号的“密度”(高电平的数量)反映了声音的大小**。PDM 经常用于数字麦克风,因为 MEMS 麦克风可以直接输出 PDM 信号,从而无需额外的 ADC。
##### **基本原理**
- 声音输入:麦克风将捕捉到的声音转换成电信号。
- 调制方式:PDM 麦克风以非常高的频率(比如 MHz 级别)将信号采样。它不是直接给出电压值,而是通过一连串
高低电平的脉冲来表示声音强度。
- 当声音很大时,高电平脉冲(1)的数量增多。
- 当声音很小时,高电平脉冲的数量减少。
可以把 PDM 信号想象成一个人不停地在敲键盘:当声音很大时,他快速地敲键盘(频繁出现“1”)。当声音很小时,他敲键盘的次数就减少(稀疏的“1”)。 最终,这种敲击密度代表了声音的强弱。
##### **优点**
- 更小的体积:PDM 麦克风通常尺寸很小,非常适合用于手机、耳机等便携设备。
- 抗干扰能力强:PDM 信号是数字信号,传输过程中对电磁干扰不敏感。
- 直接连接处理器:PDM 信号可以直接输入到数字信号处理器(DSP)或 MCU,无需模数转换(ADC)
##### 实际应用
PDM 麦克风的应用非常广泛,主要集中于需要高质量音频的小型设备中,例如:
- 智能手机
- 无线耳机
- 智能音箱
Arduino Nano RP2040 Connec 上的 MP34DT06JTR 传感器是一款超紧凑型 PDM 麦克风,规格如下:
- 信噪比:64dB
- 灵敏度:-26 dBFS ± 3 dB
- 温度范围:-40 至 85°C
那么,如何在 Arduino 中使用这款麦克风呢?
首先我们需要加载 PDM 库。Arduino 内置了 PDM 库,因此我们无需再添加额外的库,直接在草图中添加`#include `即可!随后我们将包含麦克风使用逻辑的代码编写出来并上传至开发板,就能够完成对麦克风的调用。接下来我们将通过一个小程序,来提高我们对 PDM 麦克风的应用。该程序通过声音强度的大小控制 RGB LED 的亮灭。
我们知道声音是模拟信号,PDM 麦克风以特定的采样率对声音进行采样。下面的程序中,我们将通过串口打印这些数据,并通过串口绘图仪来观察声音的“形状”。我们播放一段音频信号为正弦波的音频,理论上通过串口我们可以观察到正弦波。
有关 PDM 使用的更多信息请参考:[PDM Library | Arduino Documentation](https://docs.arduino.cc/learn/built-in-libraries/pdm/#overview)
### 4. 扩展任务一:麦克风与 RGB LED 联动
下面我们将通过 RGB LED 不同颜色和亮度,显示 PDM 麦克风收到的声音大小
- 低音量显示蓝色
- 中等音量显示绿色
- 高音量显示红色
#### 流程图
#### 实现效果
***完整代码见附件...***
### 5. 扩展任务二:基于机器学习的运动检测
除了测量原始运动数据外,安装在 Nano RP2040 Connect 上的 IMU 还具有 **机器学习内核(Machine Learning Core, MLC)**
**机器学习内核** 是一种运行在硬件传感器(如加速度计或陀螺仪)内部的低功耗机器学习模块。它允许传感器在本地处理数据并直接输出分类结果或事件检测信号,而无需占用主处理器(如 MCU)的资源。
***IMU 带有机器学习内核有什么好处呢?***
传统方法是将传感器收集的数据传输到 MCU,再由 MCU 使用复杂算法计算这些状态,这会消耗较多电力和算力。有了嵌入式机器学习内核,这个传感器就像一个聪明的“迷你大脑”,它可以直接根据你预先训练的模型来判断你当前的状态,并且只输出结果,比如“跑步”或“坐着”。这不仅 ***减少了主 MCU 的工作量***,还 ***降低了系统整体功耗***。目前,通过使用机器学习内核,Arduino 官方示例中的预训练模型可以识别 ***静止(Stationary)步行(Walking)慢跑(Jogging)骑行(Biking)驾驶(Driving)***五种不同的运动状态
在本教程中,我们将重点介绍库附带的预训练模型。让我们来看看 IMU 的智能功能是如何工作的!我们看一下该草图的一些核心函数:
```c++
DEV_I2C.begin() - 初始化与 IMU 模块的 I2C 通信
AccGyr.begin() - 初始化加速度计和陀螺仪
AccGyr.Enable_X() - 启用加速度计
AccGyr.Enable_G() - 启用陀螺仪传感器
AttachInterrupt(INT_1, INT1Event_cb, RISING) - 注册 IMU 中断引脚拉高时的中断回调,这表明检测到运动类型AccGyr.Get_MLC_Output(mlc_out) - 读取机器学习核心输出并将决策树保存到数组变量中
printMLCStatus(status) - 将从机器学习核心检索到的数字转换为检测到的活动类型的人类可读描述
```
我们需要在 Arduino IDE 中安装 STM32duino X-NUCLEO-IKS01A3 库
![IMU_AI_Applay](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_AI_Applay.jpg)
有关 IMU 的高级功能可参考官方文档:[Using the IMU Machine Learning Core Features | Arduino Documentation](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-advanced/)
#### 实现效果
![IMU_AI_DATA](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_AI_DATA.jpg)
### 6. 自由发挥任务:TimerCAM-X 服务器 与 Nano 客户端
TimerCAM-X 是一款基于 ESP32 的智能相机模块,集成了 Wi-Fi 和蓝牙功能,适用于物联网(IoT)应用。在该项目中,TimerCAM-X 作为服务器端,利用其内置的摄像头捕获图像,并通过 Wi-Fi 网络发送至客户端。Arduino Nano RP2040 Connect 作为客户端,接收来自 TimerCAM-X 的图像数据。Nano RP2040 Connect 配备了 Raspberry Pi® RP2040 微控制器,并集成了 u-blox NINA-W102 模块,提供 Wi-Fi 和蓝牙连接能力。 通过这种配置,用户可以实现远程图像采集和处理,适用于物联网(IoT)应用中的监控和数据传输等场景。
#### **TimerCAM-X 服务端配置**
![TimerCAM_Client2](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/TimerCAM_Client2.jpg)
![TimerCAM_Client](https://s2.loli.net/2024/12/29/ogVNOfjmI6XYMLb.jpg)
#### **Arduino Nano 客户端调试**
![Nano_Client](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Nano_Client.jpg)
![NanoSerial](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoSerial.jpg)
以上就是本次活动全部任务的完成与展示,再次感谢 DigiKey 和 EEWorld 举办本次活动,为我们工程师提供了一个很好的学习机会!期待 Fllow Me 活动推出更多好玩的板卡!如果文章对您有帮助,别忘了点赞哦!😉
---
- 2025-01-15
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
来得早不如来的巧,新的一年,祝愿大家身体健康,万事如意!
- 2025-01-10
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
立一个新年Flag,工资涨到二万五
- 2024-12-30
-
回复了主题帖:
【Follow me第二季第4期】汇总提交帖:全部任务
### 6. 自由发挥任务:TimerCAM-X 服务器 与 Nano 客户端
TimerCAM-X 是一款基于 ESP32 的智能相机模块,集成了 Wi-Fi 和蓝牙功能,适用于物联网(IoT)应用。在该项目中,TimerCAM-X 作为服务器端,利用其内置的摄像头捕获图像,并通过 Wi-Fi 网络发送至客户端。Arduino Nano RP2040 Connect 作为客户端,接收来自 TimerCAM-X 的图像数据。Nano RP2040 Connect 配备了 Raspberry Pi® RP2040 微控制器,并集成了 u-blox NINA-W102 模块,提供 Wi-Fi 和蓝牙连接能力。 通过这种配置,用户可以实现远程图像采集和处理,适用于物联网(IoT)应用中的监控和数据传输等场景。
#### **TimerCAM-X 服务端配置**
![TimerCAM_Client2](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/TimerCAM_Client2.jpg)
![TimerCAM_Client](https://s2.loli.net/2024/12/29/ogVNOfjmI6XYMLb.jpg)
#### **Arduino Nano 客户端调试**
![Nano_Client](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Nano_Client.jpg)
![NanoSerial](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoSerial.jpg)
以上就是本次活动全部任务的完成与展示,再次感谢 DigiKey 和 EEWorld 举办本次活动,为我们工程师提供了一个很好的学习机会!期待 Fllow Me 活动推出更多好玩的板卡!如果文章对您有帮助,别忘了点赞哦!😉
---
-
回复了主题帖:
【Follow me第二季第4期】汇总提交帖:全部任务
源码下载:https://download.eeworld.com.cn/detail/eew_M98Yam/635472
- 2024-12-29
-
上传了资料:
【Follow me第二季第4期】汇总提交帖:全部任务
-
发表了主题帖:
【Follow me第二季第4期】汇总提交帖:全部任务
本帖最后由 MatrixPulse 于 2024-12-30 00:04 编辑 # 【Follow me第二季第4期】汇总提交帖:全部任务
[TOC]
## 前言
Hello, 大家好!很高兴又与大家见面啦!Follow me 第二季第 4 期终于来了!这次的板卡还是 Arduino!上次活动没能获得优秀作品有些遗憾,所以第 4 期又毫不犹豫地参加了,争取领个大奖回家,哈哈😄!
本期是 Follow me 第二季第 4 期任务,本次任务的开发板是 Arduino Nano RP2040 Connect,同时我选择了一个 M5Stack 的摄像头搭配,用以完成本次任务开发。
### 活动物料购买如下:
- 主板:[ABX00052 Arduino | 开发板,套件,编程器 | DigiKey](https://www.digikey.cn/zh/products/detail/arduino/ABX00052/14123941)
- 摄像头:[U082-X M5Stack Technology Co., Ltd. | 开发板,套件,编程器 | DigiKey](https://www.digikey.cn/zh/products/detail/m5stack-technology-co-ltd/U082-X/13545179)
| | |
| :----------------------------------------------------------: | :----------------------------------------------------------: |
| | |
### **物料开箱展示:**
![订单截图](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/%E8%AE%A2%E5%8D%95%E6%88%AA%E5%9B%BE.jpg)
![IMG_7367](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMG_7367.jpg)
#### Arduino Nano RP2040 Connect 开箱视频
Nano 开箱自带了一段程序,显示效果如下:
#### 开箱实拍图
| | |
| :----------------------------------------------------------: | :----------------------------------------------------------: |
| TimerCamera-X | Arduino Nano RP2040 Connect |
## 任务展示
本次的任务提交视频如下,接下来我们一起来看看吧!
[视频1]
## 任务简介
- **任务一(必做):**搭建环境并开启第一步 Blink / 串口打印 Hello DigiKey & EEWorld!
- **任务二(必做):**学习IMU基础知识,调试 IMU 传感器,通过串口打印六轴原始数据;
- **任务三(必做):**学习PDM麦克风技术知识,调试 PDM 麦克风,通过串口打印收音数据和音频波形。
- **扩展任务一:**通过 RGB LED 不同颜色、亮度显示 PDM 麦克风收到的声音大小;
- **扩展任务二:**通过 IMU 数据结合机器学习算法,识别运动状态,并通过串口打印。
- **自由发挥任务:**TimerCAM-X 服务器 与 Nano 客户端的交互
## 设计思路及实现效果
### 1. 任务一:环境配置
#### 环境配置
要在 Arduino IDE 中使用 Arduino Nano RP2040 Connect,需要在开发板管理器中安装 Arduino Mbed OS Nano Beards。安装方法如下图所示:
![NanoConfig](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoConfig.jpg)
有关开发板包(Board Package)的安装请参考:[Installing a Board Package in the IDE 2 | Arduino Documentation](https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-board-manager/)
我们将编写代码点亮 Arduino Nano RP2040 Connect 的 RGB LED,使其实现间隔时间 1s 的闪烁。参照 Arduino Nano RP2040 Connect 的引脚功能图,RGB LED 引脚与 Wi-Fi 模块相连,因此我们需要通过 Wi-Fi 模块来控制 RGB LED。要使用 Nano 上的 Wi-Fi 模块,需要在 Arduino IDE 中通过库管理器安装 WiFiNINA 库。
![Snipaste_2024-12-05_15-26-08](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Snipaste_2024-12-05_15-26-08.jpg)
#### 点灯流程图 :
```flow
st1=>start: 初始化
st2=>start: 循环开始
e=>end: 循环结束
op1=>operation: LED引脚:输出模式
op2=>operation: LED引脚高电平
op3=>operation: LED引脚低电平
st1(right)->op1(right)->st2->op2->op3->st2
```
***点灯代码详见附件...***
#### 点灯效果:
串口打印任务,我们将编写代码使 Arduino 通过串口每隔 1s 输出“Hello DigiKey & EEWorld!”
#### 串口打印流程图:
```flow
st1=>start: 初始化
st2=>start: 循环
op=>operation: 串口初始化(波特率9600)
io=>inputoutput: “Hello DigiKey & EEWorld!”
st1(right)->op(right)->st2(right)->io(top)->st2
```
#### 串口打印代码:
```c++
void setup() { //初始化函数,这个函数内的代码只在启动时运行一次
Serial.begin(9600); //设置串口波特率
}
void loop() { //循环函数,这个函数内的代码会一直循环运行
Serial.println("Hello DigiKey & EEWorld!"); //向串口打印"Hello DigiKey & EEWorld!"
delay(1000);
}
```
#### 串口打印效果:
![NanoSerialPrintCharacter](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoSerialPrintCharacter.jpg)
### 2. 任务二:IMU 的应用
任务二我们将学习 IMU 基础知识,调试 IMU 传感器,通过串口打印六轴原始数据。先来了解一些有关 IMU 的基础知识吧!
#### 什么是 IMU ?
**IMU ( Inertial Measurement Unit )** 一般包含 **加速度计** 和 **陀螺仪**,用于测量和报告物体的特定力,有时也会测量物体的方向。一些 IMU 还包括磁力计,可测量地球磁场并像指南针一样帮助确定方向。通过结合这些传感器的数据,**IMU 可以提供物体运动的完整图像**。IMU 是许多应用中必不可少的组件,例如,飞机中的导航系统、智能手机、机器人和游戏机。它们使设备能够跟踪其移动、方向和位置,而无需依赖 GPS 等外部参考。
##### 陀螺仪
陀螺仪测量旋转的**角速度**,用于检测旋转变化。有关陀螺仪的原理可参考:https://byjus.com/physics/gyroscope/
##### 加速度计
加速度计测量**线性加速度**,即直线速度的变化率。在一辆向前加速的汽车中,加速度计将测量该加速度。当倾斜手机时,重力相对于加速度计的方向会发生变化。加速度计可以检测到重力变化,从而确定手机方向。
#### Nano 中的 IMU
Arduino Nano RP2040 Connect 包含一个 ST 的 LSM6DSOXTR 6 轴惯性测量单元(位置见下图)。
要在 Arduino IDE中使用它,我们需要通过库管理安装 Arduino_LSM6DSOX 库(安装方式见下图)。
![LSM6DSOXTR](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/LSM6DSOXTR.jpg)
然后编写相应代码(详见附件)上传至开发板。下面的图片展示了由串口打印 IMU 六轴原始数据。
![IMU_6_axis_rawdata](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_6_axis_rawdata.jpg)
有关 IMU 的详细信息可参考官方文档:[Accessing IMU Data on Nano RP2040 Connect | Arduino Documentation](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-basics/)
#### 流程图:
```flow
st1=>start: 初始化串口通信
st2=>start: 循环
io1=>inputoutput: 打印加速度计和陀螺仪的采样率
io2=>inputoutput: 打印六轴传感器原始数据
st1(right)->io1(right)->st2(right)->io2(top)->st2
```
### 3. 任务三:麦克风的应用
任务三我们将学习 PDM 麦克风技术知识,调试 PDM 麦克风,通过串口打印收音数据和音频波形。Nano 带有一个 PDM 麦克风,其在开发板上的位置如下:
#### 什么是 PDM ?
**脉冲密度调制** **( Pulse-Density Modulation )** 是一种用于使用数字信号表示模拟信号的技术。 PDM 不是直接对模拟信号的幅度进行编码,而是使用脉冲密度对信号值进行编码。较高的脉冲密度代表较高的幅度,较低的密度代表较低的幅度。
![Pulse-density_modulation_1_period](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Pulse-density_modulation_1_period.gif)
正弦波一个周期的 100 个样本的 PDM 示例。蓝色代表1,白色代表0。
正弦波模拟信号与正弦波PDM信号对比:
![Pulse_density_modulation.svg](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Pulse_density_modulation.svg.png)
#### PDM 麦克风
**PDM 麦克风** 是一种数字麦克风,其核心工作方式是通过 **脉冲密度调制** **( Pulse-Density Modulation )** 来输出数字信号,取代传统麦克风的模拟信号。**信号的“密度”(高电平的数量)反映了声音的大小**。PDM 经常用于数字麦克风,因为 MEMS 麦克风可以直接输出 PDM 信号,从而无需额外的 ADC。
##### **基本原理**
- 声音输入:麦克风将捕捉到的声音转换成电信号。
- 调制方式:PDM 麦克风以非常高的频率(比如 MHz 级别)将信号采样。它不是直接给出电压值,而是通过一连串
高低电平的脉冲来表示声音强度。
- 当声音很大时,高电平脉冲(1)的数量增多。
- 当声音很小时,高电平脉冲的数量减少。
可以把 PDM 信号想象成一个人不停地在敲键盘:当声音很大时,他快速地敲键盘(频繁出现“1”)。当声音很小时,他敲键盘的次数就减少(稀疏的“1”)。 最终,这种敲击密度代表了声音的强弱。
##### **优点**
- 更小的体积:PDM 麦克风通常尺寸很小,非常适合用于手机、耳机等便携设备。
- 抗干扰能力强:PDM 信号是数字信号,传输过程中对电磁干扰不敏感。
- 直接连接处理器:PDM 信号可以直接输入到数字信号处理器(DSP)或 MCU,无需模数转换(ADC)
##### 实际应用
PDM 麦克风的应用非常广泛,主要集中于需要高质量音频的小型设备中,例如:
- 智能手机
- 无线耳机
- 智能音箱
Arduino Nano RP2040 Connec 上的 MP34DT06JTR 传感器是一款超紧凑型 PDM 麦克风,规格如下:
- 信噪比:64dB
- 灵敏度:-26 dBFS ± 3 dB
- 温度范围:-40 至 85°C
那么,如何在 Arduino 中使用这款麦克风呢?
首先我们需要加载 PDM 库。Arduino 内置了 PDM 库,因此我们无需再添加额外的库,直接在草图中添加`#include `即可!随后我们将包含麦克风使用逻辑的代码编写出来并上传至开发板,就能够完成对麦克风的调用。接下来我们将通过一个小程序,来提高我们对 PDM 麦克风的应用。该程序通过声音强度的大小控制 RGB LED 的亮灭。
我们知道声音是模拟信号,PDM 麦克风以特定的采样率对声音进行采样。下面的程序中,我们将通过串口打印这些数据,并通过串口绘图仪来观察声音的“形状”。我们播放一段音频信号为正弦波的音频,理论上通过串口我们可以观察到正弦波。
有关 PDM 使用的更多信息请参考:[PDM Library | Arduino Documentation](https://docs.arduino.cc/learn/built-in-libraries/pdm/#overview)
### 4. 扩展任务一:麦克风与 RGB LED 联动
下面我们将通过 RGB LED 不同颜色和亮度,显示 PDM 麦克风收到的声音大小
- 低音量显示蓝色
- 中等音量显示绿色
- 高音量显示红色
#### 流程图
```flow
st=>start: 开始
init=>operation: 初始化设置
led=>operation: 初始化LED引脚
pdm=>operation: 初始化PDM麦克风
filter=>operation: 初始化均值滤波数组
cond=>condition: 检测到音频数据?
calc=>operation: 计算音频样本平均值
window=>operation: 更新滑动窗口
sound=>operation: 计算平均声音强度
led_update=>operation: 更新LED显示
st->init->led->pdm(right)->filter(right)->cond
cond(yes, bottom)->calc(right)->window(right)->sound(right)->led_update(right)->cond
cond(no, up)->cond
```
#### 实现效果
***完整代码见附件...***
### 5. 扩展任务二:基于机器学习的运动检测
除了测量原始运动数据外,安装在 Nano RP2040 Connect 上的 IMU 还具有 **机器学习内核(Machine Learning Core, MLC)**
**机器学习内核** 是一种运行在硬件传感器(如加速度计或陀螺仪)内部的低功耗机器学习模块。它允许传感器在本地处理数据并直接输出分类结果或事件检测信号,而无需占用主处理器(如 MCU)的资源。
***IMU 带有机器学习内核有什么好处呢?***
传统方法是将传感器收集的数据传输到 MCU,再由 MCU 使用复杂算法计算这些状态,这会消耗较多电力和算力。有了嵌入式机器学习内核,这个传感器就像一个聪明的“迷你大脑”,它可以直接根据你预先训练的模型来判断你当前的状态,并且只输出结果,比如“跑步”或“坐着”。这不仅 ***减少了主 MCU 的工作量***,还 ***降低了系统整体功耗***。目前,通过使用机器学习内核,Arduino 官方示例中的预训练模型可以识别 ***静止(Stationary)步行(Walking)慢跑(Jogging)骑行(Biking)驾驶(Driving)***五种不同的运动状态
在本教程中,我们将重点介绍库附带的预训练模型。让我们来看看 IMU 的智能功能是如何工作的!我们看一下该草图的一些核心函数:
```c++
DEV_I2C.begin() - 初始化与 IMU 模块的 I2C 通信
AccGyr.begin() - 初始化加速度计和陀螺仪
AccGyr.Enable_X() - 启用加速度计
AccGyr.Enable_G() - 启用陀螺仪传感器
AttachInterrupt(INT_1, INT1Event_cb, RISING) - 注册 IMU 中断引脚拉高时的中断回调,这表明检测到运动类型AccGyr.Get_MLC_Output(mlc_out) - 读取机器学习核心输出并将决策树保存到数组变量中
printMLCStatus(status) - 将从机器学习核心检索到的数字转换为检测到的活动类型的人类可读描述
```
我们需要在 Arduino IDE 中安装 STM32duino X-NUCLEO-IKS01A3 库
![IMU_AI_Applay](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_AI_Applay.jpg)
有关 IMU 的高级功能可参考官方文档:[Using the IMU Machine Learning Core Features | Arduino Documentation](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-advanced/)
#### 实现效果
![IMU_AI_DATA](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_AI_DATA.jpg)
### 6. 自由发挥任务:TimerCAM-X 服务器 与 Nano 客户端
TimerCAM-X 是一款基于 ESP32 的智能相机模块,集成了 Wi-Fi 和蓝牙功能,适用于物联网(IoT)应用。在该项目中,TimerCAM-X 作为服务器端,利用其内置的摄像头捕获图像,并通过 Wi-Fi 网络发送至客户端。Arduino Nano RP2040 Connect 作为客户端,接收来自 TimerCAM-X 的图像数据。Nano RP2040 Connect 配备了 Raspberry Pi® RP2040 微控制器,并集成了 u-blox NINA-W102 模块,提供 Wi-Fi 和蓝牙连接能力。 通过这种配置,用户可以实现远程图像采集和处理,适用于物联网(IoT)应用中的监控和数据传输等场景。
#### **TimerCAM-X 服务端配置**
![TimerCAM_Client2](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/TimerCAM_Client2.jpg)
![TimerCAM_Client](https://s2.loli.net/2024/12/29/ogVNOfjmI6XYMLb.jpg)
#### **Arduino Nano 客户端调试**
![Nano_Client](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Nano_Client.jpg)
![NanoSerial](https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoSerial.jpg)
以上就是本次活动全部任务的完成与展示,再次感谢 DigiKey 和 EEWorld 举办本次活动,为我们工程师提供了一个很好的学习机会!期待 Fllow Me 活动推出更多好玩的板卡!如果文章对您有帮助,别忘了点赞哦!😉
---
- 2024-12-09
-
加入了学习《直播回放: DigiKey FollowMe 第二季 第4期 Arduino Nano RP2040 Connect 任务讲解》,观看 Arduino Nano RP2040 Connect 任务讲解
- 2024-10-09
-
加入了学习《【Follow me第二季第2期】任务完成视频》,观看 【Follow me第二季第2期】汇总提交帖:全部任务
- 2024-10-06
-
加入了学习《Follow Me 第二季第二期总结视频》,观看 follow me 集合
-
上传了资料:
【Follow me第二季第2期】汇总代码
-
加入了学习《【Follow me第二季第1期】全部任务演示》,观看 全部任务演示2.0
- 2024-10-05
-
发表了主题帖:
【Follow me第二季第2期】汇总提交帖:全部任务
本帖最后由 MatrixPulse 于 2024-10-6 14:46 编辑
# 【Follow me第二季第2期】汇总提交帖:全部任务
[TOC]
## 前言
Follow me 活动是 DigiKey 联合 EEWorld 发起的大型开发板体验活动,每期技术大咖推荐可玩性与可学性较强的开发板/仪器套件,参与者完成任务即返京东卡,出色完成者,还将获得额外200元京东卡奖励。
我参加的是 Follow me 第二季第 2 期任务,本次任务核心板为 Arduino UNO R4 WiFi,我选择的搭配器件为 LTR-329 环境光传感器和 Qwiic 线缆。
### 活动物料购买链接如下:
- 主板:[Arduino UNO R4 Wi-Fi](https://www.digikey.cn/zh/products/detail/arduino/ABX00087/20371539)(核心板)
- 扩展板:[5591](https://www.digikey.cn/zh/products/detail/adafruit-industries-llc/5591/16733167)( LTR-329 光传感器扩展板)
- 缆线:[PRT-14426](https://www.digikey.cn/zh/products/detail/sparkfun-electronics/PRT-14426/7652739)( Qwiic 缆线 - 50 mm)
### **物料实物展示:**
![](https://s2.loli.net/2024/10/01/pI6QAYdjitL5Buv.jpg)
![IMG_6399](https://s2.loli.net/2024/10/01/pUc1rH6i57JoOvy.jpg)
## 任务展示
[localvideo]19da8eef42b272e178fe4ee27f880835[/localvideo]
## 任务简介
- **入门任务(必做):**搭建环境并开启第一步 Blink / 串口打印 Hello EEWorld!
- **基础任务(必做):**驱动 12x8 点阵 LED;用 DAC 生成正弦波;用 OPAMP 放大 DAC 信号;用 ADC 采集并且打印数据到串口等其他接口可上传到上位机显示曲线
- **进阶任务(必做):**通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台 HA(HomeAssistant)
- **扩展任务:**通过外部 LTR-329 环境光传感器,上传光照度到 HA,通过 HA 面板显示数据
## 引脚功能图
要对 Arduino UNO R4 WiFi 进行编程,我们需要参考其引脚功能图,如下所示:(PS:Arduino 引脚功能图真是直观又漂亮!):
![image-20241001224137576](https://s2.loli.net/2024/10/01/DTcJmQhCg1pz7F6.png)
## 设计思路及实现效果
### 1. 入门任务
首先是 Blink 任务,我们将编写代码点亮 Arduino 内置 LED (LED_BUILTIN),使其实现间隔时间 1s 的闪烁
#### Blink 流程图 :
#### Blink 代码:
```c++
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
```
#### Blink 效果:
[localvideo]0a0ae887d9fde1550b4566438c2f9b1c[/localvideo]
串口打印任务,我们将编写代码使 Arduino 通过串口每隔 1s 输出“Hello EEWorld!”
#### 串口打印流程图:
#### 串口打印代码:
```c++
void setup() { //初始化函数,这个函数内的代码只在启动时运行一次
Serial.begin(9600); //设置串口波特率
}
void loop() { //循环函数,这个函数内的代码会一直循环运行
Serial.println("Hello EEWorld!"); //向串口打印"Hello EEWorld!"
delay(1000);
}
```
#### 串口打印效果:
![](https://s2.loli.net/2024/10/02/tUbagrP4HTRisBj.jpg)
### 2. 基础任务
Arduino UNO R4 WiFi 自带了一个 12x8 LED 矩阵,通过 Arduino 库管理器安装 ArduinoGraphics,我们可以方便地生成想要的 LED 矩阵图形。
![LED矩阵](https://s2.loli.net/2024/10/02/Bphj1xzVfXs5ZMG.png)
#### LED 矩阵流程图:
#### LED 矩阵代码:
```c++
// To use ArduinoGraphics APIs, please include BEFORE Arduino_LED_Matrix
#include
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup() {
Serial.begin(115200);
matrix.begin();
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
// add some static text
// will only show "UNO" (not enough space on the display)
const char text[] = "^_^";
matrix.textFont(Font_4x6);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(text);
matrix.endText();
matrix.endDraw();
delay(2000);
}
void loop() {
// Make it scroll!
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);
// add the text
const char text[] = " Hello EEWorld and DigiKey! ";
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(text);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();
}
```
#### LED 矩阵效果:
[localvideo]dc9bd59e9f1966b1679f7b8e89fbe905[/localvideo]
接下来我们通过 DAC 生成正弦波信号,用 OPAMP 将 DAC 信号放大两倍,并输出至 ADC,通过两个模拟引脚采集信号并打印至串口。
要实现两倍的放大效果,我们需要添加两个10 kΩ 的电阻,仿真电路如下:可以看到正弦波被放大至原来两倍
硬件实物连接图:
#### 放大信号程序流程图:
#### 放大信号代码:
```c++
#include "analogWave.h" // Include the library for analog waveform generation
#include
analogWave wave(DAC); // Create an instance of the analogWave class, using the DAC pin
int freq = 200; // in hertz, change accordingly
void setup() {
Serial.begin(2000000); // Initialize serial communication at a baud rate of 115200
/* By default, the resolution is set to 10-bit, which can be updated to both 12-bit (0-4096)
and 14-bit (0-16383) resolutions for improved accuracy on analog readings.*/
analogReadResolution(14);//Change to 14-bit resolution 分辨率
wave.sine(freq); // Generate a sine wave with the initial frequency
wave.amplitude(0.5);
OPAMP.begin(OPAMP_SPEED_HIGHSPEED);
}
void loop() {
Serial.print(analogRead(A4));//DAC output
Serial.print(" ");
Serial.println(analogRead(A5));//OPAMP output
}
```
#### 放大信号效果:
打开串口监视器,可以观测到经 ADC 转换后的数值:
![SineSerialMonitor](https://s2.loli.net/2024/10/02/UoX497AtrEBzcn1.png)
串口绘图器显示效果:
示波器显示效果:
### 3. 进阶任务
进阶任务为利用 Wi-Fi,通过 MQTT 协议接入到开源智能家居平台 HomeAssistant
HomeAssistant 的安装方式有四种,区别如下:
![HomeAssistant_version](https://s2.loli.net/2024/10/02/wbW3AlpMkv5iCGT.jpg)
这里我们采用在 BeagleBone Black(简称:BBB) 上安装 HomeAssistant Core 的方式运行,用到的硬件如下:
![BeagleBoneBlack](https://s2.loli.net/2024/10/02/P35vIditG8XEV1R.jpg)
MQTT Broker 我们选用 Mosquitto,其特点是轻量、开源。
![](https://s2.loli.net/2024/10/03/caoRmeTu2PKj6Mp.png)
#### 操作流程:
*安装过程可参考:如何在BBB上安装 Home Assistant?*(待完成)
#### 关键代码:
```c++
//arduino.secrets.h
#define MQTT_SERVER "192.168.1.10" //BeagleBone Black IP地址
#define MQTT_PORT 1884 //定义MQTT服务器的端口
#define MQTT_CLIENT_ID "arduino"
#define HA_CONNECTION "UNO/arduino/status/cmd_t"
#define TOPIC_SUBSCRIBE1 "UNO/arduino/myButtonA/cmd_t" //定义订阅的主题
#define TOPIC_SUBSCRIBE2 "UNO/arduino/myButtonB/cmd_t"
#define SECRET_PASS "3fzts5qh" //路由器Wi-Fi密码
```
```c++
//MQTT_HA_Connection.ino
#include
#include
#include
#include "WiFiS3.h"
#include "arduino_secrets.h"
#include "analogWave.h" // Include the library for analog waveform generation
/*
......
*/
WiFiClient client;
HADevice device (MQTT_CLIENT_ID); // HADevice device (mac, sizeof(mac));
HAMqtt mqtt(client, device);
HASensorNumber analogSensor ("myAnalogInput", HASensorNumber::PrecisionP1);
HASensorNumber uptimeSensor("myUptime");
HAButton buttonA("myButtonA");
HAButton buttonB("myButtonB");
/*
......
*/
void onMqttConnected(){
Serial.println("Connected to the broker!");
// 订阅两个按键的 MQTT 主题
mqtt.subscribe(TOPIC_SUBSCRIBE1); // myButtonA
mqtt.subscribe(TOPIC_SUBSCRIBE2); // myButtonB
Serial.println("subscribed to topic:" HA_CONNECTION);
mqtt.publish(HA_CONNECTION, "Hi HomeAssistant, I'm Arduino UNO R4 WIFI ^^");
}
```
***完整代码见附件...***
#### 实现效果:
![Snipaste_2024-10-03_18-48-15](https://s2.loli.net/2024/10/03/dIGOepLgBm2v7hu.jpg)
[localvideo]bbfcd74780a9ce1127594956e04b4fc6[/localvideo]
### 4. 扩展任务:
本次扩展任务我选择的是任务一,使用 LTR-329 环境光传感器(见下方视频)收集光照数据上传到 HA,并通过 HA 卡片显示。
环境光传感器是一种感应周围环境光线强度的器件,它通常用来调节设备的显示亮度,以提供更好的使用体验,常见的应用包括用于智能手机、平板和笔记本电脑等显示屏上的亮度调节。在电子阅读装置和电视上,环境光传感器可用于调整屏幕色温,以获得更舒适的阅读或观看体验。
[localvideo]18411d8bbd59d158f11307765d3aa4ab[/localvideo]
LTR-329 扩展板基于集成型环境光传感器,其具有以下特点:
- I2 C 接口,最高支持快速模式 @ 400kbit/s,地址为 0x29
- 超小型 4 针 ChipLED 封装 2.0mm x 2.0mm x 0.7mm
- 内置温度补偿电路
- 待机模式下低功耗
- 电源电压范围为 2.4V 至 3.6V,能够提供 1.7V 逻辑电压
- 工作温度范围为 -30C 至 +70C
- 符合 RoHS 标准
- 接近人眼光谱响应
- 不受红外/紫外光源影响
- 自动抑制 50/60 Hz 照明闪烁
- 全动态范围从 0.01 勒克斯到 64k 勒克斯
- 16 位有效分辨率
前面我们已经完成了 Arduino 通过 MQTT 协议与 HA 通信,下面我们将在代码中集成环境光传感器:
#### 流程图
#### 关键代码:
```C++
// MQTT_HA_Connection.ino
#include "Adafruit_LTR329_LTR303.h"
HASensorNumber lightSensor0("lightCH0"); // LTR-329_CH0
HASensorNumber lightSensor1("lightCH1"); // LTR-329_CH1
```
```c++
void setup() {
// ...... //
if (!ltr.begin(&Wire1)) {
Serial.println("Couldn't find LTR sensor!");
while (1) delay(10);
}
Serial.println("Found LTR sensor!");
ltr.setGain(LTR3XX_GAIN_2);
Serial.print("Gain : ");
switch (ltr.getGain()) {
case LTR3XX_GAIN_1: Serial.println(1); break;
case LTR3XX_GAIN_2: Serial.println(2); break;
case LTR3XX_GAIN_4: Serial.println(4); break;
case LTR3XX_GAIN_8: Serial.println(8); break;
case LTR3XX_GAIN_48: Serial.println(48); break;
case LTR3XX_GAIN_96: Serial.println(96); break;
}
ltr.setIntegrationTime(LTR3XX_INTEGTIME_100);
Serial.print("Integration Time (ms): ");
switch (ltr.getIntegrationTime()) {
case LTR3XX_INTEGTIME_50: Serial.println(50); break;
case LTR3XX_INTEGTIME_100: Serial.println(100); break;
case LTR3XX_INTEGTIME_150: Serial.println(150); break;
case LTR3XX_INTEGTIME_200: Serial.println(200); break;
case LTR3XX_INTEGTIME_250: Serial.println(250); break;
case LTR3XX_INTEGTIME_300: Serial.println(300); break;
case LTR3XX_INTEGTIME_350: Serial.println(350); break;
case LTR3XX_INTEGTIME_400: Serial.println(400); break;
}
ltr.setMeasurementRate(LTR3XX_MEASRATE_200);
Serial.print("Measurement Rate (ms): ");
switch (ltr.getMeasurementRate()) {
case LTR3XX_MEASRATE_50: Serial.println(50); break;
case LTR3XX_MEASRATE_100: Serial.println(100); break;
case LTR3XX_MEASRATE_200: Serial.println(200); break;
case LTR3XX_MEASRATE_500: Serial.println(500); break;
case LTR3XX_MEASRATE_1000: Serial.println(1000); break;
case LTR3XX_MEASRATE_2000: Serial.println(2000); break;
}
// ...... //
}
```
```c++
void loop() {
// ...... //
bool valid;
uint16_t visible_plus_ir, infrared;
// ...... //
if (ltr.newDataAvailable()) {
valid = ltr.readBothChannels(visible_plus_ir, infrared);
if (valid) {
// 上传传感器数值
lightSensor0.setValue(visible_plus_ir);
lightSensor1.setValue(infrared);
delay(500);
}
}
}
```
***完整代码见附件...***
#### 实现效果
[localvideo]b450018fc43de7ebba785df49bfbf79c[/localvideo]
以上就是本次活动全部任务的完成与展示,通过本次活动我学习到了:
- Arduino 开发环境的部署
- Home Assistant 的安装与部署
- Mosquitto Broker 的安装
- 还有一些常用的 Linux 命令
再次感谢 DigiKey 和 EEWorld 举办本次活动,为我们工程师提供了一个很好的学习机会!期待 Fllow Me 活动推出更多好玩的板卡!Respect!如果您觉得我的文章对您有所帮助,欢迎点赞支持哦!
#### 下载源码:
https://download.eeworld.com.cn/detail/eew_M98Yam/634538
- 2024-09-30
-
加入了学习《FollowMe 第二季:2 - Arduino UNO R4 Wi-Fi 及任务讲解》,观看 Arduino UNO R4 Wi-Fi 及任务讲解