【Follow me第二季第4期】汇总提交帖:全部任务
本帖最后由 MatrixPulse 于 2025-1-18 23:28 编辑# 【Follow me第二季第4期】汇总提交帖:全部任务
## 前言
Hello, 大家好!很高兴又与大家见面啦!Follow me第二季第 4 期终于来了!这次的板卡还是 Arduino!上次活动没能获得优秀作品有些遗憾,所以第 4 期又毫不犹豫地参加了,争取领个大奖回家,哈哈😄!
本期是 Follow me 第二季第 4 期任务,本次任务的开发板是 Arduino Nano RP2040 Connect,同时我选择了一个 M5Stack 的摄像头搭配,用以完成本次任务开发。
### 活动物料购买如下:
- 主板:(https://www.digikey.cn/zh/products/detail/arduino/ABX00052/14123941)
- 摄像头:(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)
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMG_7367.jpg)
#### Arduino Nano RP2040 Connect 开箱视频
Nano 开箱自带了一段程序,显示效果如下:
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113728754357523&bvid=BV1WrC8YzELp&cid=27571781841&p=1high_quality=1&danmaku=0" width=500 height=300 scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
####开箱实拍图
||
| :----------------------------------------------------------: | :----------------------------------------------------------: |
| 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。安装方法如下图所示:
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoConfig.jpg)
有关开发板包(Board Package)的安装请参考:(https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-board-manager/)
<img src="https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/%E5%BC%95%E8%84%9A%E5%9B%BE.png" alt="引脚图" style="zoom: 50%;" />
我们将编写代码点亮 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 库。
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Snipaste_2024-12-05_15-26-08.jpg)
#### 点灯流程图 :
***点灯代码详见附件...***
#### 点灯效果:
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113728922063631&bvid=BV1xdCbYgE2m&cid=27572307908&p=1high_quality=1&danmaku=0" width=500 height=300 scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
串口打印任务,我们将编写代码使 Arduino 通过串口每隔 1s 输出“Hello DigiKey & EEWorld!”
#### 串口打印流程图:
#### 串口打印代码:
```c++
void setup() { //初始化函数,这个函数内的代码只在启动时运行一次
Serial.begin(9600); //设置串口波特率
}
void loop() { //循环函数,这个函数内的代码会一直循环运行
Serial.println("Hello DigiKey & EEWorld!"); //向串口打印"Hello DigiKey & EEWorld!"
delay(1000);
}
```
#### 串口打印效果:
!(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 等外部参考。
##### 陀螺仪
<img src="https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/parts-of-gyroscope.png" alt="parts-of-gyroscope" style="zoom:75%;" />
陀螺仪测量旋转的**角速度**,用于检测旋转变化。有关陀螺仪的原理可参考:https://byjus.com/physics/gyroscope/
##### 加速度计
加速度计测量**线性加速度**,即直线速度的变化率。在一辆向前加速的汽车中,加速度计将测量该加速度。当倾斜手机时,重力相对于加速度计的方向会发生变化。加速度计可以检测到重力变化,从而确定手机方向。
#### Nano 中的 IMU
Arduino Nano RP2040 Connect 包含一个 ST 的 LSM6DSOXTR 6 轴惯性测量单元(位置见下图)。
<img src="https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/rp2040-imu-basics-img-02.png" alt="rp2040-imu-basics-img-02" style="zoom:50%;" />
要在 Arduino IDE中使用它,我们需要通过库管理安装 Arduino_LSM6DSOX 库(安装方式见下图)。
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/LSM6DSOXTR.jpg)
然后编写相应代码(详见附件)上传至开发板。下面的图片展示了由串口打印 IMU 六轴原始数据。
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_6_axis_rawdata.jpg)
有关 IMU 的详细信息可参考官方文档:(https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-basics/)
#### 流程图:
### 3. 任务三:麦克风的应用
任务三我们将学习 PDM 麦克风技术知识,调试 PDM 麦克风,通过串口打印收音数据和音频波形。Nano 带有一个 PDM 麦克风,其在开发板上的位置如下:
<img src="https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/rp2040-microphone-img-00.png" alt="rp2040-microphone-img-00" style="zoom:50%;" />
#### 什么是 PDM ?
**脉冲密度调制** **( Pulse-Density Modulation )** 是一种用于使用数字信号表示模拟信号的技术。 PDM 不是直接对模拟信号的幅度进行编码,而是使用脉冲密度对信号值进行编码。较高的脉冲密度代表较高的幅度,较低的密度代表较低的幅度。
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Pulse-density_modulation_1_period.gif)
正弦波一个周期的 100 个样本的 PDM 示例。蓝色代表1,白色代表0。
正弦波模拟信号与正弦波PDM信号对比:
!(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.h>`即可!随后我们将包含麦克风使用逻辑的代码编写出来并上传至开发板,就能够完成对麦克风的调用。接下来我们将通过一个小程序,来提高我们对 PDM 麦克风的应用。该程序通过声音强度的大小控制 RGB LED 的亮灭。
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113729140166773&bvid=BV1vvCbY9EXs&cid=27573094885&p=1high_quality=1&danmaku=0" width=500 height=300 scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
我们知道声音是模拟信号,PDM 麦克风以特定的采样率对声音进行采样。下面的程序中,我们将通过串口打印这些数据,并通过串口绘图仪来观察声音的“形状”。我们播放一段音频信号为正弦波的音频,理论上通过串口我们可以观察到正弦波。
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113729207341062&bvid=BV1fbCbYZE52&cid=27573292303&p=1high_quality=1&danmaku=0" width=500 height=300 scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
有关 PDM 使用的更多信息请参考:(https://docs.arduino.cc/learn/built-in-libraries/pdm/#overview)
### 4. 扩展任务一:麦克风与 RGB LED 联动
下面我们将通过 RGB LED 不同颜色和亮度,显示 PDM 麦克风收到的声音大小
- 低音量显示蓝色
- 中等音量显示绿色
- 高音量显示红色
#### 流程图
#### 实现效果
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113729291163166&bvid=BV14XCbYGES2&cid=27573617347&p=1high_quality=1&danmaku=0" allowfullscreen= "allowfullscreen" width="100%" height="500" scrolling="no" border="0" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts">
***完整代码见附件...***
### 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 库
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/IMU_AI_Applay.jpg)
有关 IMU 的高级功能可参考官方文档:(https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-advanced/)
#### 实现效果
!(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 服务端配置**
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/TimerCAM_Client2.jpg)
!(https://s2.loli.net/2024/12/29/ogVNOfjmI6XYMLb.jpg)
#### **Arduino Nano 客户端调试**
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/Nano_Client.jpg)
!(https://pluse.obs.cn-east-3.myhuaweicloud.com/picgo/NanoSerial.jpg)
以上就是本次活动全部任务的完成与展示,再次感谢 DigiKey 和 EEWorld 举办本次活动,为我们工程师提供了一个很好的学习机会!期待 Fllow Me 活动推出更多好玩的板卡!如果文章对您有帮助,别忘了点赞哦!😉
---
页:
[1]