garoa

  • 2024-12-21
  • 加入了学习《Arduino? Nano RP2040 Connect 任务视频》,观看 PDM 数据打印及音频波形

  • 发表了主题帖: 【Follow me第二季第4期】PDM 数据打印及音频波形

    本帖最后由 garoa 于 2024-12-21 11:58 编辑     PDM 简介     PDM(Pulse Density Modulation:脉冲密度调制)是一种数字信号调制方式,通过调整脉冲的密度来表示模拟信号的幅度。与常见的 PWM(脉宽调制)相比,PDM 的工作原理更加精简,它是通过不同的 “1” 和 “0” 信号密度来表示音频信号的强度。     PDM 的工作原理     在 PDM 中,音频信号被转换为一系列的脉冲,脉冲的数量和频率对应音频信号的强弱。举个例子,如果音频信号的幅度较大,那么 PDM 信号中 “1” 的脉冲会比较频繁;如果音频信号的幅度较小,则 “1” 的脉冲密度较低。     与传统的模拟信号相比,PDM 信号优点         易于数字化处理:PDM 信号本身已经是数字信号,可以直接送入数字处理器进行后续处理。         抗噪能力强:由于信号是通过高频率的脉冲来传输,PDM 对噪声的抗干扰能力较强。         低功耗:通常,PDM 麦克风的功耗较低,适合于便携式设备。         MP34DT06JTR 简介     Arduino Nano RP2040 Connect 板载的麦克风 ST MP34DT06JTR 是一颗单声道麦克风,由意法半导体(STMicroelectronics)生产。详细资料见 ST 官方数据手册 Datasheet - MP34DT06J 。     特点         传感器类型:基于MEMS(微机电系统)技术,拥有高灵敏度和低功耗。         输出格式:提供PDM(脉冲密度调制)信号输出,这种格式适合直接接入微控制器的PDM解码接口。         频率范围:能够捕捉20Hz到20kHz的声音,非常适合用于语音识别、音频采集等场景。         供电电压:支持 1.8V 到 3.6V 的宽电压范围。         方向性:全向(Omnidirectional),意味着它能够均匀捕捉来自各方向的声音。     工作原理     MP34DT06JTR 通过拾取声波振动,生成对应的数字PDM信号。微控制器通过解码PDM信号,转换为音频样本。         在 Arduino 平台上使用 PDM 麦克风     Arduino Nano RP2040 Connect 提供了对 PDM 麦克风的支持,Arduino 官方有专门的 PDM 库,文档参考 PDM Library。     初始化     :PDM初始化      注:channels 为通道数量,1 为单声道,2 为立体声;sampleRate 为采样率。     获取数据:     :获取可读字节数     :接收 PDM 数据      注:buffer 为用于存储 PDM 数据的数组;size 为读取的字节数。         演示视频           示例代码     因为板载的麦克风是一颗单声道麦克风,所以 channels = 1。PDM 采样率为 20000 Hz。 #include <PDM.h> // 声道数量(仅支持单声道,固定为 1) static const char channels = 1; // PDM 数据的采样率(单位:Hz) static const int frequency = 20000; // 用于存储音频样本的缓冲区,每个样本是 16 位 short sampleBuffer[512]; // 读取到的音频样本数量,使用 volatile 修饰以确保线程安全 volatile int samplesRead; void setup() { // 初始化串口,用于调试和打印信息 Serial.begin(9600); // 等待串口连接(仅用于调试模式) while (!Serial); // 配置 PDM 麦克风的数据接收回调函数 PDM.onReceive(onPDMdata); // 初始化 PDM 麦克风 if (!PDM.begin(channels, frequency)) { Serial.println("PDM 初始化失败!"); while (1); // 如果初始化失败,则进入死循环 } } void loop() { // 检查是否有新的音频样本 if (samplesRead > 0) { // 遍历并打印读取到的样本数据 for (int i = 0; i < samplesRead; i++) { Serial.println(sampleBuffer[i]); // 打印单声道样本值 } // 清除样本读取计数 samplesRead = 0; } } /** * 回调函数,用于处理 PDM 麦克风采集的数据。 * 注意:该函数在中断服务程序(ISR)中执行,必须保持简洁高效。 */ void onPDMdata() { // 查询缓冲区中可用字节数 int bytesAvailable = PDM.available(); // 从缓冲区读取音频数据到样本缓冲区 PDM.read(sampleBuffer, bytesAvailable); // 每个样本为 16 位(2 字节),计算样本数量 samplesRead = bytesAvailable / 2; }  

  • 2024-12-20
  • 加入了学习《Arduino? Nano RP2040 Connect 任务视频》,观看 串口打印

  • 加入了学习《Arduino? Nano RP2040 Connect 任务视频》,观看 IMU 原始数据打印

  • 加入了学习《直播回放: DigiKey FollowMe 第二季 第4期 Arduino Nano RP2040 Connect 任务讲解》,观看 Arduino Nano RP2040 Connect 任务讲解

  • 2024-12-18
  • 发表了主题帖: 【Follow me第二季第4期】IMU 原始数据打印

        IMU 基础     Arduino® Nano RP2040 Connect 使用的 IMU 传感器为:LSM6DSOXTR。     LSM6DSOXTR 简介     LSM6DSOXTR 是由意法半导体(STMicroelectronics)推出的一款 6轴惯性测量单元(IMU),包含了加速度计和陀螺仪的功能。是一款小型、低功耗的传感器。         加速度计:3轴,测量物体的加速度变化。         陀螺仪:3轴,测量物体的角速度(旋转速度)     LSM6DSOXTR 集成了这两种传感器,因此是一个 6轴 IMU。     LSM6DSOXTR 的主要特点         加速度计范围:±2g、±4g、±8g、±16g(可配置)         陀螺仪范围:±125°/s、±250°/s、±500°/s、±1000°/s、±2000°/s(可配置)         低功耗模式:适用于电池供电设备,具备多个省电模式。         内置FIFO缓存:用于存储加速度和角速度数据,可以减少主机的读取频率。         传感器输出接口:通过 I²C 或 SPI 接口与外部设备(如微控制器)进行通信。         运动检测:支持运动检测、步数计数、自由落体检测、休眠模式等多种功能。     LSM6DSOXTR 的工作原理     加速度计通过内部的微机械传感器测量加速度。当物体加速时,传感器的质量块会在微小的弹簧中发生位移,根据位移的大小可以计算出加速度。         单位:加速度的单位是 g(重力加速度,1g = 9.8 m/s²)。         测量方向:LSM6DSOXTR 的加速度计是三轴的,因此可以测量沿 X、Y、Z 轴的加速度。         作用:可以用来判断物体的倾斜角度、运动方向、加速度大小等。     陀螺仪使用 MEMS 技术(微电子机械系统),通过微型的振荡结构测量物体围绕各轴旋转的速度。         单位:角速度的单位是 °/s(每秒旋转度数)。         测量方向:与加速度计类似,陀螺仪也是三轴的,可以测量绕 X、Y、Z 轴的角速度。         作用:可用于姿态估算,特别是在无外部定位信息的情况下。         读取 IMU 数据     在 Arduino® Nano RP2040 Connect 中,由图1 可知 LSM6DSOXTR 通过 I²C 与 RP2040 进行连接。 图1  Arduino Nano RP2040 Connect 框图       Arduino 官方有一个处理 LSM6DSOXTR 的库:Arduino_LSM6DSOX     初始化     :初始化库     作用:初始化是开发嵌入式程序中不可或缺的一步,其核心是为硬件和软件环境做好准备,确保系统运行的稳定性和正确性。     采样率     :读取加速度采样率(Hz)     :读取陀螺仪采样率(Hz)     作用:采样率决定了数据更新的频率。比如,采样率越高,数据更新越快,反应越灵敏,适用于高速运动的应用;采样率越低,数据更新越慢,适用于低速稳定的应用。     读取数据     :检查 IMU 是否有可用的加速度数据     :读取加速度计,并返回 x、y 和 z 轴的加速度值     :检查 IMU 是否有可用的陀螺仪数据     :读取陀螺仪,并返回 x、y 和 z 轴的角速度值         演示视频           示例代码 #include <Arduino_LSM6DSOX.h> // 存储加速度和陀螺仪数据 float Ax, Ay, Az; float Gx, Gy, Gz; // 时间间隔参数(非阻塞式输出控制) unsigned long previousMillis = 0; const long interval = 500; // 每500毫秒输出一次数据 void setup() { // 初始化串口通信 Serial.begin(9600); while (!Serial) { ; // 等待串口准备好 } Serial.println("串口初始化完成,开始读取IMU数据..."); // 初始化IMU传感器 if (!IMU.begin()) { Serial.println("错误:IMU 初始化失败,请检查硬件连接!"); while (1); // 如果初始化失败,程序停留在这里 } Serial.println("IMU 初始化成功!"); Serial.println(); } void loop() { // 获取当前时间 unsigned long currentMillis = millis(); // 每隔500毫秒读取并输出一次数据 if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // 更新上一次的时间 // 读取加速度数据 if (IMU.accelerationAvailable()) { IMU.readAcceleration(Ax, Ay, Az); } else { Serial.println("警告:未能读取到加速度数据!"); } // 读取陀螺仪数据 if (IMU.gyroscopeAvailable()) { IMU.readGyroscope(Gx, Gy, Gz); } else { Serial.println("警告:未能读取到陀螺仪数据!"); } // 串口输出加速度和陀螺仪数据 Serial.print("Accel:Ax="); Serial.print(Ax, 2); // 保留两位小数 Serial.print(" m/s², Ay="); Serial.print(Ay, 2); Serial.print(" m/s², Az="); Serial.print(Az, 2); Serial.print(" m/s² | "); Serial.print("Gyros:Gx="); Serial.print(Gx, 2); // 保留两位小数 Serial.print(" dps, Gy="); Serial.print(Gy, 2); Serial.print(" dps, Gz="); Serial.print(Gz, 2); Serial.println(" dps"); // 在不同数据组之间添加空行,便于查看 Serial.println(); } }  

  • 回复了主题帖: 【Follow me第二季第4期】串口打印

    本帖最后由 garoa 于 2024-12-18 09:38 编辑 Jacktang 发表于 2024-12-18 07:32 视频的配音是AI生成的,还是楼主配音 感谢老哥回复。正如老哥所料,配音是AI生成的,具体的可以参考下“剪映文字朗读使用操作”

  • 2024-12-17
  • 发表了主题帖: 【Follow me第二季第4期】串口打印

    本帖最后由 garoa 于 2024-12-17 14:29 编辑     关于串口     串口(Serial Port)是一种用于设备间串行通信的接口,通过一根数据线和一根地线在设备之间传输数据。与并行通信相比,串口的特点是以按位传输数据,虽然速度较慢,但具有成本低、硬件简单的优点。     特点:     异步通信:无需共享时钟信号。     双向通信:可以发送和接收数据。     常用协议:UART(通用异步收发器)是最常用的串口通信协议之一。         串口作用     设备间通信:串口允许计算机与嵌入式设备(如 Arduino、传感器、机器人)之间进行数据交换。例如,可以从传感器读取数据并通过串口传输给主机。     程序调试:串口是一种非常直观的调试工具。通过输出变量的值或状态信息,可以快速发现代码中的问题。     控制外部设备:通过串口向开发板发送命令,可以远程控制硬件设备。例如,向 Arduino 发送“打开”或“关闭”命令来控制 LED 灯的状态。         操作串口     初始化串口     :设置串口波特率。波特率需要与通信设备一致。     发送数据     :发送数据但不换行。     :发送数据并自动换行。     接收数据     :检查是否有数据可读。     :读取一个字节的数据。     :读取字符串数据。     使用工具     在 Arduino Cloud Editor 中打开串口监视器(Serial Monitor:在网页右上角)或使用第三方串口工具(如 PuTTY)查看数据。         演示视频           示例代码     代码中,先进行串口初始化,初始化成功后输出信息“串口连接成功!初始化完成”。然后每隔 1000 ms 打印“Hello DigiKey & EEWorld!”。 void setup() { // 初始化串口 Serial.begin(9600); // 等待串口连接 while (!Serial) { delay(100); } // 串口连接成功后,打印提示信息 Serial.println("串口连接成功!"); Serial.println("初始化完成!"); } void loop() { // 打印任务信息 delay(1000); Serial.println("Hello DigiKey & EEWorld!"); }  

  • 加入了学习《Arduino? Nano RP2040 Connect 任务视频》,观看 RGB Blink

  • 发表了主题帖: 【Follow me第二季第4期】RGB Blink

    本帖最后由 garoa 于 2024-12-17 11:16 编辑     RGB 型号     根据官方文档 ABX00053-schematics.pdf,从图1 可知 RGB LED 的型号为:SMLP34RGB2W3;连接方式为:公共阳极。   图1  SMLP34RGB2W3 在 Arduino Nano RP2040 Connect 中的电路原理图       SMLP34RGB2W3 简介:这款 LED 是一种小型的 RGB LED,通常用于指示灯、显示、状态指示等场景。这款 LED 通常是通过调节不同颜色的亮度来显示不同的颜色。具体来说,SMLP34RGB2W3 是一个三合一的RGB LED 组件,它包含了红色(R)、绿色(G)和蓝色(B)三个颜色的LED,可以根据输入的控制信号调节每个 LED 的亮度,从而混合成不同的颜色。具体元器件特性可以查看官方文档 SMLP34RGB series : LEDs。         RGB LED 在 Arduino® Nano RP2040 Connect 中的工作原理     根据官方文档 ABX00053-datasheet.pdf,从图2 可知 RGB LED 是连接在 Nina W102 Wi-Fi/Bluetooth 模块上的。RP 2040 通过 SPI 与 UART 控制 NINA W102 WiFi/BT,来实现 RGB LED 的点亮/熄灭。 从图3 可知 RGB LED 在数字信号为高时熄灭,在数字信号为低时点亮。 图2  Arduino® Nano RP2040 Connect 框图       U-blox Nina W102 简介:这款模块是一款低功耗的 Wi-Fi 和蓝牙无线通信模块,集成了 Wi-Fi 和蓝牙的功能。支持 802.11b/g/n 标准,并且具备蓝牙4.2(低能耗蓝牙,BLE)功能。Wi-Fi功能主要用于与局域网(LAN)或者互联网连接,而蓝牙功能则常用于短距离的设备对设备通信。具体元器件特性可以查看官方文档(文档链接)。   图3  Wi-Fi®/Bluetooth® 的工作原理         演示视频 闪烁功能演示视频         示例代码     代码中 RGB 灯光闪烁的顺序为红色、绿色、蓝色。灯光亮起维持 500 ms,两种灯光间隔为 500 ms。 #include <WiFiNINA.h> // 定义闪烁的延时时间(单位:毫秒) const int delayTime = 500; // 每个颜色闪烁的时间为500ms void setup() { // 将三色LED灯的引脚设置为输出模式 pinMode(LEDR, OUTPUT); pinMode(LEDG, OUTPUT); pinMode(LEDB, OUTPUT); // 确保LED初始状态为熄灭 digitalWrite(LEDR, LOW); digitalWrite(LEDG, LOW); digitalWrite(LEDB, LOW); } void loop() { // 依次点亮红色、绿色和蓝色LED灯 // 红色LED闪烁 digitalWrite(LEDR, HIGH); // 点亮红色LED delay(delayTime); // 等待500ms digitalWrite(LEDR, LOW); // 熄灭红色LED delay(delayTime); // 等待500ms // 绿色LED闪烁 digitalWrite(LEDG, HIGH); // 点亮绿色LED delay(delayTime); // 等待500ms digitalWrite(LEDG, LOW); // 熄灭绿色LED delay(delayTime); // 等待500ms // 蓝色LED闪烁 digitalWrite(LEDB, HIGH); // 点亮蓝色LED delay(delayTime); // 等待500ms digitalWrite(LEDB, LOW); // 熄灭蓝色LED delay(delayTime); // 等待500ms }  

  • 2024-12-15
  • 加入了学习《Arduino? Nano RP2040 Connect 任务视频》,观看 Arduino Cloud Editor 环境配置

  • 回复了主题帖: 【Follow me第二季第4期】Arduino Cloud Editor 中 Thing 和 Device 的异同

    Jacktang 发表于 2024-12-15 09:36 总结的到位,Thing 和Device 就是一虚一实,,,, 感谢老哥的认可

  • 2024-12-13
  • 加入了学习《Arduino? Nano RP2040 Connect 任务视频》,观看 Arduino Cloud Agent 安装

  • 发表了主题帖: 【Follow me第二季第4期】Arduino Cloud Editor 中 Thing 和 Device 的异同

    本帖最后由 garoa 于 2024-12-15 19:40 编辑         在 Arduino Cloud Editor 中,其中有 Thing 和 Device 两个概念。               1-Thing         在 Arduino Cloud 中,Thing 是一个虚拟的容器,用来表示硬件设备的集合和它与云平台之间的交互。一个 Thing 可以包含多个 Device,并且可以配置多个功能(比如传感器、开关、按钮等)。实际上,Thing 是对硬件的抽象,它代表项目或物联网系统。 Thing 是在 Arduino Cloud 中进行编程和配置的单位。 它将硬件设备和传感器的数据传输与 Arduino 云之间的通信进行关联。 Thing 可以在云平台上控制和监视设备,同时还可以连接其他服务,处理来自设备的数据。           2-Device         Device 是具体的硬件设备,是在 Arduino Cloud 中注册的物理设备。每个 Device 都是一个实际的、具体的 Arduino 或兼容的硬件(比如 Arduino Nano RP2040 Connect、Arduino Uno、Arduino MKR1000 等)。Device 是 Thing 的一部分,它们用于执行代码并通过物联网进行通信。 Device 是在云平台中配置和操作的实际硬件设备。 每个 Device 都具有唯一的标识符(ID),并且可以与其他设备、传感器或服务进行交互。 在 Device 上执行的程序(sketch)通常会和 Thing 进行同步,以实现云端的功能和控制。           3-Thing 与 Device 的区别 虚拟 vs 物理:         Thing 是一个虚拟的概念,代表了你物联网项目的核心,通常是指一组设备和它们的管理。         Device 是实际存在的硬件设备,它是在物理世界中工作的设备,执行代码并发送数据。 功能 vs 硬件:         Thing 可以管理多个 Device,并在云端进行数据分析、控制和交互。         Device 是硬件设备本身,它将传感器数据发送到 Thing 并执行来自 Thing 的控制命令。 配置 vs 执行:         Thing 是在 Arduino Cloud 中进行配置、控制和监控的主要对象。         Device 是实际执行任务的对象,它会执行在 Arduino Cloud 中上传的程序(sketch),并与 Thing 进行数据通信。           举例:         假设有一个智能温控系统,可能包含的设置有:         Thing:代表整个智能温控系统,包含多个设备(温度传感器、加热器等)。可以通过 Thing 来查看系统的状态、控制加热器或获取传感器数据。         Device:具体的硬件设备,如 温度传感器 和 加热器,它们是物理设备,负责采集温度数据并响应控制指令。             总结 Thing 是虚拟的表示,它可以包含多个 Device 和它们的配置。 Device 是实际的硬件设备,执行具体的物理操作,发送或接收数据。

  • 发表了主题帖: 【Follow me第二季第4期】Arduino Cloud Editor 环境搭建

    本帖最后由 garoa 于 2024-12-15 09:14 编辑         在参与“Follow me”活动的过程中,第一个任务中有关于开发环境搭建的内容。经过对不同开发环境的了解和对比,我最终选择了使用 Arduino Cloud Editor 作为我的开发工具。         之所以选择它,是因为在翻译 Arduino® Nano RP2040 Connect 的数据手册时,我发现这款开发板的官方资料中推荐了 Arduino Cloud Editor。这引起了我的兴趣:作为 Arduino 提供的在线开发环境,它不仅可以通过浏览器轻松访问,还支持与云平台的无缝集成。我想通过这次实践,探索这个工具的便捷性和功能性,并感受它是否能为像我这样的“硬件小白”提供更高效的开发体验。         搭建步骤: 注册 Arduino 账号                 账号注册网址:create an Arduino account 安装 Cloud Agent                 软件下载网址:cloud.arduino.cc/download-agent/                 注:Arduino Cloud Agent 是一个安装在电脑上的插件,用于在开发板与 Arduino 云平台之间建立串行通信。通过该插件,我们可以通过网络浏览器上传代码(Sketch),并能够读取和写入开发板的串行数据。     登录 Arduino Cloud                 登录网址:cloud.arduino.cc/download-agent/ 配置 Arduino® Nano RP2040 Connect                 添加设备(根据页面提示进行操作,详细步骤参考视频)                 设置WiFi(可选设置,如果不配置 WiFi,电脑可以通过 USB 来访问开发板。如果配置 WiFi,电脑可以通过网络来访问开发板,但需要在代码中进行设置)    

  • 加入了学习《Follow me 第二季第3期成果视频》,观看 成果展示

  • 2024-12-10
  • 回复了主题帖: 【Follow me第二季第4期】Arduino® Nano RP2040 Connect 中文版 Datasheet

    ly87802541 发表于 2024-12-8 22:27 这个文档很不错鸭   哈哈,感谢老哥认可

  • 2024-12-07
  • 回复了主题帖: 【Follow me第二季第4期】Arduino® Nano RP2040 Connect 中文版 Datasheet

    qwqwqw2088 发表于 2024-12-7 10:16 不知道如何上传图片   上传图片时,可以点开高级模式   好嘞,感谢老哥指点

  • 2024-12-06
  • 发表了主题帖: 【Follow me第二季第4期】Arduino® Nano RP2040 Connect 中文版 Datasheet

      首先,衷心感谢“得捷电子”和“EEWORLD电子工程世界”联合举办的 《Follow me》 活动,正是因为这个活动,我才有机会接触到 Arduino® Nano RP2040 Connect 开发板。   作为一名硬件“小白”,在收到这款开发板后,我的第一反应是:该从哪里开始呢?面对各种技术资料和英文文档,我感到有些迷茫。尤其是去官网查找资料时,看到的全是英文,虽然能理解一些基本术语,但整体还是有些吃力。更糟糕的是,当我使用浏览器插件进行翻译时,翻译结果常常断断续续,而且因为语言上的差异,读起来显得生硬,不符合中文的阅读习惯,这让我倍感困难。   经过一番思考,我决定将这份官方的英文 Datasheet 翻译成中文,既是为了自己更好地理解这款开发板的基本功能和性能,也希望能够帮助和我一样的“硬件小白”们,在遇到类似情况时,能够有一份更加通俗易懂的中文参考资料。   通过这次翻译,我不仅加深了对 Arduino® Nano RP2040 Connect 开发板性能的理解,也学到了如何在官网查找资料,并且对后续如何完成任务有了更清晰的规划。   说明:由于自己第一次在 EEWORLD论坛 中发帖,好多规则还没有熟悉,不知道如何上传 PDF 文档,暂时以照片的形式展现文档(不知最终展现效果如何)。        

最近访客

< 1/1 >

统计信息

已有1人来访过

  • 芯积分:68
  • 好友:--
  • 主题:7
  • 回复:5

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言